求教java内存溢出异常

请教各位大佬

int[] ints=new int[Integer.MAX_VALUE];

为什么会抛出OutOfMemoryError

栈内存里不是只存一个地址吗

感谢!!!

1个回答

new int[Integer.MAX_VALUE];
这要开一个21亿长度的数组,每个int 4个字节,一共8GB,内存爆了。

caozhy
贵阳老马马善福专门编写代码的老马就是我! 回复Gennuseki: 如果问题解决,请点下我回答右边的采纳,谢谢
接近 2 年之前 回复
Gennuseki
Gennuseki 感谢!!!
接近 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
java异常之内存溢出异常
----------------------------------- ------------------------------- -Xms256M -Xmx768M -XX:PermSize=256M -XX:MaxPermSize=512M
JAVA内存区域与内存溢出异常
  1,运行时数据区域 根据JAVA虚拟机规范的规定:JAVA虚拟机所管理的内存将会包括以下几个运行时数据区域     程序计数器(Program Counter Register)是一块较小的内存空间,它的作用可以看作是当前线程所执行的字节码的行号指示器,通过改变计数器的值来选取下一条需要执行的字节码指令、分支、循环、跳转、异常处理、线程恢复等基础功能。每条线程都需要一个独立的程序...
Java内存区域与内存溢出异常
对于Java程序员来说,在虚拟机自动内存管理机制的帮助下,不再需要为每一个new操作去写分配对的delete/free代码(C++中的内存释放方式),不容易出现内存泄漏和内存溢出的问题,由虚拟机管理内存,这一切看起来都很美好。不过,正因为Java程序员把内存控制权利交给了Java虚拟机,一旦出现内存泄漏和溢出方面的问题,如果不了解虚拟机是怎么使用内存的,那么排查错误将会成为一项异常艰难的工作。1.
java内存区域与内存溢出异常
首先来看java虚拟机内存模型:区域分类:线程共享:所有线程都可以访问的区域 线程隔离:每一个线程都需要一块隔离的区域,各线程之间互不影响,独立存储各区域介绍:1.程序计数器:字节码文件的行号指示器 2.java虚拟机栈:每个方法执行的同时都要创建一个栈。用于存储局部变量表,操作数栈,动态链接,方法出口等信息。 3.本地方法栈:为虚拟机使用到的Native方法服务。 4.java堆:存放对象
Java内存溢出异常(上)
Java内存溢出异常主要分为两类:内存溢出和堆栈溢出。在下列情况下,将引发内存异常:Java堆溢出、虚拟机堆栈和本地方法栈溢出、方法区域和运行时常数池溢出以及本地直接内存溢出。以下各节将逐一描述这些类型的异常。 Java堆溢出 正如Java内存区域和内存溢出异常中所提到的,Java堆主要用于存储对象实例。这部分内存区域的大小可以由-xms参数和-xmx参数设置。通常将-xms和-xmx的值设置...
JAVA内存溢出异常测试
JAVA堆异常溢出: /** * Vm args:-Xms20M -Xms20M -XX:+HeapDumpOnOutOfMemoryError * java 堆内存溢出测试,深入理解java虚拟机 p51 * @author Rail * */ public class HeapOutOfMemoryError { static class OutOfMemoryError{
java内存溢出异常解决方案
文章关键字:|java|内存|溢出|异常|方案|   下面是具体的代码实现   package com.free;   import java.io.File;   import java.io.FileInputStream;   import java.io.FileNotFoundException;   import java.io.FileOutput...
java内存溢出异常
java.lang.OutOfMemoryError 内存溢出异常 Exception in thread “http-apr-8080-exec-6” java.lang.OutOfMemoryError: PermGen space 解决办法:在IDEA下,打开Tomcat设置页面 -XX:PermSize=64M -XX:MaxPermSize=128m
java内存溢出异常(OutOfMemoryError)和栈溢出异常(StackOverflowError)
在Java虚拟机规范中描述了两种异常: 定义: 如果线程请求的栈深度大于虚拟机所允许的最大深度,将抛出StackOverflowError异常。 如果虚拟机在扩展栈时无法申请到足够的内存空间,则抛出OutOfMemory Error异常。 这里把异常分成两种情况,看似更加严谨,但却存在着一些互相重叠的地方:当栈空间 无法继续分配时,到底是内存太小,还是已使用的栈空间太大,其本质上只是对同一
第二章:java内存区域与内存溢出异常
目的  最近在学习<<深入理解Java虚拟机>>一书,特整理成学习笔记。概要  对于java而言,我们在编码的时候不需要显式的编码分配内存和回收内存,可以节约我们大量的时间去关注业务。但是不需要显式的编码,并不意味着我们不需要去了解其中的原理,如果不了解的话,我们在进行编码的时候可能无法选择更加高效正确的实现方法,从而影响系统的性能。譬如当我们选择一个技术方法的时候,该技术方法会导致内存中产生巨量的
第二章Java内存区域与内存溢出异常
第二章  Java内存区域与内存溢出异常  一、概述  对与Java程序员来说,在虚拟机自动内存管理机制的帮助下,不再需要为每个new操作去写delete/free代码,不容易出现内存泄露和内存溢出问 题,由虚拟机管理这一切看起来很美好。但是一旦出现内存泄露和内存溢出问题,如果不了解虚拟机是怎么使用内存的,那么排查错误将会成为 一项异常艰难的工作。  二、运行时数据区域
Java内存溢出异常及其处理
    熟悉Java内存划分及运行的首要目的就是预防JVM抛出内存溢出相关的异常,或者说当发生这样异常是该如何排查问题,定位问题并且给出合理的解决方案,这对于开发工作以及后期维护工作的顺利进行尤为重要。 一、在Java语言中,对象访问是如何进行的?     即使是最简单的访问,也会涉及Java栈、Java堆、方法区这三个最重要内存区域之间的关联关系。比如下面这行代码:     Object...
JAVA内存溢出分析之OutOfMemoryError异常
1.1              OutOfMemoryError异常 在Java虚拟机规范的描述中,除了程序计数器外,虚拟机内存的其他几个运行时区域都有发生OutOfMemoryError(下文称OOM)异常的可能。本节将通过若干实例来验证异常发生的场景,并且会初步介绍几个与内存相关的最基本的虚拟机参数。 本节内容的目的有两个:第一,通过代码验证Java虚拟机规范中描述的各个运行时区域...
Java内存区域与内存溢出异常-上
   一、根据java虚拟机规范(java se7)的规定,java虚拟机所管理的内存包含以下几个运行时数据区域,如下图所示: java虚拟机运行时数据区就这五个区域,很直观了吧 接下来对这几个区域一一介绍 1、程序计数器         程序计数器 是一块较小的内存空间,它可以看做是当前线程所执行的字节码的行号指示器。 在虚拟机的概念模型里(仅是概念模型,各种虚拟机可能会通过一些更...
java内存区域与内存溢出异常总结
1.java虚拟机运行时数据区总结 数据库名称 功能 线程共享/线程隔离 OutOfMemoryError异常 备注 程序计数器 当前线程所执行的字节码的行号指示器 线程隔离 无 执行N...
chapter02_Java内存区域与内存溢出异常_3_内存溢出的异常
Java堆溢出 (1) 不断创建新对象 虚拟机栈和本地方法栈溢出 (1) 单线程下,无递归终止条件 (2) 不断开辟新线程,每个线程都会被分配自己的栈,最终溢出 方法区(包括运行时常量池)溢出 (1) 运行时常量池溢出的一种情况: 运行时常量池中存放了大量的字符串 (2) 方法区溢出的一种情况 运行时产生大量的类(方法区会保存各个被加载的类的信息) Java中的内存泄漏 (1) 内...
【JVM】Java内存区域与内存溢出异常
最近学习《深入理解Java虚拟机》,打算把学习所得和体会整理出来,方便以后反复再看。本文主要介绍了JVM内存的组成、堆中对象创建和布局、常见的内存溢出异常,这三部分内容。
java虚拟机笔记-java内存区域与内存溢出异常
-
《java虚拟机》笔记- 第二章:Java内存区域与内存溢出异常(异常部分)
目的:   1.通过代码验证JVM描述的各个运行时区域存储的内容   2.在工作中遇到实际的内存溢出时,根据异常信息快速定位是哪个区域的内存溢出 内存溢出(OutOfMemoryError)存在的区域:java虚拟机栈,本地方法栈,堆,方法区 一、堆内存溢出   堆容量参数设置:-Xms,-Xmx   堆溢出场景:堆是用来存储对象实例的,不断创建对象,并且保证GC Roots到对象之间有可达路径来...
java异常传播求教
现在看到很多开源框架的异常都是封装好的,比如struts,spring,都把Exception给封装成runtime exception,请教的问题是,rn我怎么才能得到原来抛出的异常,比如一个异常时数据库异常SQLException,封装之后呢,就变成了HibernateDataAccessException,那能不能得到原来的异常信息,比如SQLException的信息,这个我想如果能获得的话,也应该是要运行时才能获得的吧,如果不能,为什么?
java io 异常,求教!
请看代码:rn[code=java]rnpublic class test rn public static void main(String[]args) throws Exceptionrn String s2 = readScanner("请输入:");rn System.out.println("这是你Scanner输入的:"+s2);rn String str = readString("请输入:");rn System.out.println("这是你输入的"+str);rn rn private static String readString(String prompt) throws IOExceptionrn String str = null ;rn BufferedReader br = new BufferedReader(new InputStreamReader(System.in));rn System.out.print(prompt);rn str = br.readLine() ;rn rn return str ;rn rn private static String readScanner(String prompt)rn String retStr = null ;rn System.out.print(prompt);rn Scanner scanner = new Scanner(System.in);rn retStr = scanner.nextLine();rn scanner.close();rn rn return retStr ;rn rn[/code]rnrn结果和报错如下:rn[code=text]rn请输入:ggregrn这是你Scanner输入的:ggregrn请输入:Exception in thread "main" java.io.IOException: Stream closedrn at java.io.BufferedInputStream.getBufIfOpen(Unknown Source)rn at java.io.BufferedInputStream.read(Unknown Source)rn at sun.nio.cs.StreamDecoder.readBytes(Unknown Source)rn at sun.nio.cs.StreamDecoder.implRead(Unknown Source)rn at sun.nio.cs.StreamDecoder.read(Unknown Source)rn at java.io.InputStreamReader.read(Unknown Source)rn at java.io.BufferedReader.fill(Unknown Source)rn at java.io.BufferedReader.readLine(Unknown Source)rn at java.io.BufferedReader.readLine(Unknown Source)rn at test.readString(test.java:20)rn at test.main(test.java:13)rn[/code]rnrn问题1:rn 这个程序,如果把readScanner(String prompt)中的scanner.close();注释掉,程序就正确了!rn而有了scanner.close(),就如上面报错!rnrn问题2:rn 我跟踪Debug,跟踪到BufferedReader中的readLine()后,出现IOException!!!rn我就怪了,我在readScanner(String prompt)中写了scanner.close(),结果在readString(String prompt)中的str = br.readLine();报IOException!
java 异常(求教)?
public void test() throws Exceptionrn tryrn 代码一rn finally rn 代码二rnrn 代码三rnrn请问:[color=#FF0000]方法throws Exception后,当执行代码一出现异常后,方法throws Exception,代码二(finally里的代码都会执行,但异常throws后还会执行吗?)和代码三会执行吗?[/color]rnrnrnpublic void test() throws Exceptionrn tryrn 代码一rn rncatch (Exception e)rn //如果在这里throw呢rnfinally rn 代码二rnrn 代码三rn rn请问:代码二和代码三会执行吗?这样的执行效果呢?
jvm常见内存溢出异常
上面这幅图就是jvm虚拟机运行时的主要数据区,蓝色部分是线程共享区域,而白色部分就是线程私有区域。 以下例子均在jdk1.7中运行 1.堆内存溢出 /** * VM Args: -Xms2m -Xmx2m * Created by Stay on 2017/5/15 14:50. */ public class Base1 { public static void
内存溢出分析:OutOfMemoryError异常
下面给出个内存区域内存溢出的简单测试方法:一、Java堆溢出将堆大小限制为20MB,不可扩展(将堆堆最小值参数与最大值参数设置为一样即可避免堆自动扩展),通过参数-XX:+HeapDumpOnOutOfMemoryError可让虚拟机在出现内存溢出异常时Dump出当前的内存堆转储快照以便事后进行分析。import java.util.ArrayList; import java.util.List;
WebSphere 后台异常 内存溢出
[9/10/13 14:30:54:400 CST] 000000e1 ServiceLogger I com.ibm.ws.ffdc.IncidentStreamImpl resetIncidentStream FFDC0010I: FFDC closed incident stream file C:\IBM\WebSphere\AppServer\profiles\AppSrv01\lo...
内存溢出异常测试
JAVA堆异常溢出: /** * Vm args:-Xms20M -Xmx20M -XX:+HeapDumpOnOutOfMemoryError * 堆的最小值参数-Xms,堆的最大值参数-Xmx * -XX:+HeapDumpOnOutOfMemoryError表示让虚拟机在出现内存异常时Dump出当前的内存堆转储快照 * -XX:HeapDumpPath:为快照文件位置 * Jav
ofbiz提示内存溢出异常
解决方案:
ECLIPSE抛出内存溢出异常
!ENTRY org.eclipse.ui 4 0 2009-05-19 21:50:32.062rn!MESSAGE java.lang.OutOfMemoryError: Java heap spacern!STACK 0rnjava.lang.RuntimeException: java.lang.OutOfMemoryError: Java heap spacern at org.eclipse.wst.sse.core.internal.text.JobSafeStructuredDocument.stopRewriteSession(JobSafeStructuredDocument.java:275)rn at org.eclipse.wst.sse.core.internal.undo.StructuredTextUndoManager.undo(StructuredTextUndoManager.java:646)rn at org.eclipse.wst.sse.ui.StructuredTextViewerUndoManager.undo(StructuredTextViewerUndoManager.java:183)rn at org.eclipse.jface.text.TextViewer.doOperation(TextViewer.java:3718)rn at org.eclipse.jface.text.source.SourceViewer.doOperation(SourceViewer.java:891)rn at org.eclipse.jface.text.source.projection.ProjectionViewer.doOperation(ProjectionViewer.java:1423)rn at org.eclipse.wst.sse.ui.internal.StructuredTextViewer.doOperation(StructuredTextViewer.java:595)rn at org.eclipse.ui.texteditor.TextOperationAction$1.run(TextOperationAction.java:131)rn at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70)rn at org.eclipse.ui.texteditor.TextOperationAction.run(TextOperationAction.java:129)rn at org.eclipse.jface.action.Action.runWithEvent(Action.java:498)rn at org.eclipse.ui.commands.ActionHandler.execute(ActionHandler.java:185)rn at org.eclipse.ui.internal.handlers.LegacyHandlerWrapper.execute(LegacyHandlerWrapper.java:109)rn at org.eclipse.core.commands.Command.executeWithChecks(Command.java:476)rn at org.eclipse.core.commands.ParameterizedCommand.executeWithChecks(ParameterizedCommand.java:508)rn at org.eclipse.ui.internal.handlers.HandlerService.executeCommand(HandlerService.java:169)rn at org.eclipse.ui.internal.keys.WorkbenchKeyboard.executeCommand(WorkbenchKeyboard.java:471)rn at org.eclipse.ui.internal.keys.WorkbenchKeyboard.press(WorkbenchKeyboard.java:822)rn at org.eclipse.ui.internal.keys.WorkbenchKeyboard.processKeyEvent(WorkbenchKeyboard.java:880)rn at org.eclipse.ui.internal.keys.WorkbenchKeyboard.filterKeySequenceBindings(WorkbenchKeyboard.java:569)rn at org.eclipse.ui.internal.keys.WorkbenchKeyboard.access$3(WorkbenchKeyboard.java:511)rn at org.eclipse.ui.internal.keys.WorkbenchKeyboard$KeyDownFilter.handleEvent(WorkbenchKeyboard.java:126)rn at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)rn at org.eclipse.swt.widgets.Display.filterEvent(Display.java:1184)rn at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1002)rn at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1027)rn at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1012)rn at org.eclipse.swt.widgets.Widget.sendKeyEvent(Widget.java:1040)rn at org.eclipse.swt.widgets.Widget.sendKeyEvent(Widget.java:1036)rn at org.eclipse.swt.widgets.Widget.wmChar(Widget.java:1352)rn at org.eclipse.swt.widgets.Control.WM_CHAR(Control.java:3894)rn at org.eclipse.swt.widgets.Canvas.WM_CHAR(Canvas.java:341)rn at org.eclipse.swt.widgets.Control.windowProc(Control.java:3787)rn at org.eclipse.swt.widgets.Canvas.windowProc(Canvas.java:337)rn at org.eclipse.swt.widgets.Display.windowProc(Display.java:4528)rn at org.eclipse.swt.internal.win32.OS.DispatchMessageW(Native Method)rn at org.eclipse.swt.internal.win32.OS.DispatchMessage(OS.java:2370)rn at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3420)rn at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2382)rn at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2346)rn at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2198)rn at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:493)rn at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:288)rn at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:488)rn at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)rn at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:113)rn at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:193)rn at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)rn at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)rn at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:382)rn at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)rn at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)rn at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)rn at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)rn at java.lang.reflect.Method.invoke(Unknown Source)rn at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:549)rn at org.eclipse.equinox.launcher.Main.basicRun(Main.java:504)rn at org.eclipse.equinox.launcher.Main.run(Main.java:1236)rn上面是LOG所报出的信息,请各位帮忙找下问题出在哪里
C#winform内存溢出异常
new其他的不会报内存溢出异常,new窗口就报内存溢出异常。
内存溢出异常解决方案总结
  一 调整 虚拟机参数   二 立即 释放无用的对象   三 利用序列化和反序列化技术   下面是具体的代码实现 package outofmemory; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java....
异常 System.OutOfMemoryException 内存溢出
用ObjectDataSource绑定DropDownList时发生System.OutOfMemoryException 异常rn但是用代码绑定却没有发生rnthis.DropDownList.DataSource=new CategoryTop().GetAll();rnthis.DropDownList.DataBind();rn这样写没问题rnrn请问为什么绑定ObjectDataSource时出现内存溢出??rn帮忙分析下 谢谢
System.OutOfMemoryException内存溢出异常
我的电脑配置如下:rnrn1. win7,64位rn2. 内存16Grn3. CPU 3.6Grnrn现在运行WPF程序,图片量有些大,3G左右,每张图片1-2M,操作一段时间就会出现图片白页,再过一会就内存溢出异常。rnrn内存都16G应该够用了吧,怎么还是提示内存溢出的问题,我读取图片的代码如下:rnrn1. public static BitmapImage GetBitmapImage(string path)rn rn BitmapImage bitmap = new BitmapImage();rn if (path != null && path.Length != 0 && File.Exists(path))rn rn bitmap.BeginInit();rn bitmap.CacheOption = BitmapCacheOption.OnLoad;rn bitmap.CreateOptions = BitmapCreateOptions.DelayCreation;rn bitmap.StreamSource = new MemoryStream(File.ReadAllBytes(path));rn bitmap.EndInit();rn bitmap.Freeze();rn rn return bitmap;rn rnrn2. public void LoadOddBottomPage(String page)rn rn rn Uri uri = new Uri(System.IO.Path.Combine("file://", page));rn BitmapImage bitmap = new BitmapImage();rn bitmap.BeginInit();rn bitmap.CacheOption = BitmapCacheOption.OnLoad;rn bitmap.CreateOptions = BitmapCreateOptions.DelayCreation;rn bitmap.UriSource = uri;rn bitmap.EndInit();rnrn Image_PageRightPreview.Loaded += new RoutedEventHandler(PageOddBottom_Loaded);rn Image_PageRightPreview.Source = bitmap;rn //PageOddBottomLoaded(Image_PageRightPreview);rn rnrn有没有大虾知道原因?和虚拟内存有关吗?还是有其他原因,急等呀,也欢迎大家讨论,启发下思路!多谢了!!
java内存溢出之永久代内存溢出
前言 在实际开发中,我们经常会遇到oom,即所谓的内存溢出情况,但是不能是所有的内存溢出都一概而论,我们需要搞清楚具体内存的溢出原因和分类然后对症下药。这里和大家一起学习一下内存溢出中的永久代内存溢出。 永久代内存溢出概述 对于JVM的分代策略,想必大家都清楚。之所以对内存进行分代是为了能够更有效的对内存进行回收,对于jvm的分代,大家有兴趣的可以学习,这点不重点讲述。在jvm中的永久代
JVM的内存溢出异常
链接:http://developer.51cto.com/art/201205/336013.htm
Java8内存溢出异常
多的不说最近看了周老师的深入理解Java虚拟机了解一点内存溢出异常知识。 JAVA 堆溢出 package com.dairujie.demo; import java.util.ArrayList; import java.util.List; /** * * @ClassName: 堆溢出 * @Description:TODO(-Xms20m -Xmx20m -XX:+Heap...
【转】JVM的内存溢出异常
JVM的内存溢出异常       在Java虚拟机规范的描述中,除了PC(程序计数器)寄存器外,虚拟机内存的其他几个运行时区域都有发生OutOfMemoryError异常的可能。当发生OutOfMemoryError异常时,无法用try...catch捕捉。 在开始讲解之前,在这里先简单介绍下虚拟机启动相关的一些内存设置参数。因为OutOfMemoryError异常发生,...
软件提示内存溢出异常
************** 异常文本 **************rnSystem.OutOfMemoryException: 引发类型为“System.OutOfMemoryException”的异常。rn 在 System.Collections.ArrayList.set_Capacity(Int32 value)rn 在 System.Collections.ArrayList.EnsureCapacity(Int32 min)rn 在 System.Collections.ArrayList.Add([code=VB.NET][/code]Object value)rn 在 System.Windows.Forms.DataGridViewSelectedRowCollection.Add(DataGridViewRow dataGridViewRow)rn 在 System.Windows.Forms.DataGridView.get_SelectedRows()rn 在 AfEmail.MainForm.MainSend_Click(Object sender, EventArgs e)rn 在 System.Windows.Forms.Control.OnClick(EventArgs e)rn 在 System.Windows.Forms.Button.OnClick(EventArgs e)rn 在 AfEmail.GlassButton.OnClick(EventArgs e)rn 在 System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)rn 在 AfEmail.GlassButton.OnMouseUp(MouseEventArgs e)rn 在 System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)rn 在 System.Windows.Forms.Control.WndProc(Message& m)rn 在 System.Windows.Forms.ButtonBase.WndProc(Message& m)rn 在 System.Windows.Forms.Button.WndProc(Message& m)rn 在 System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)rn 在 System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)rn 在 System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)rnrn这怎么回事?
求助、提示异常内存溢出
我想利用URL类和网页进行连接并且从网页中抓取部分文本存在本地。代码如下rn[code=java]import java.io.BufferedReader;rnimport java.io.BufferedWriter;rnimport java.io.File;rnimport java.io.FileWriter;rnimport java.io.IOException;rnimport java.io.InputStreamReader;rnimport java.net.URL;rnimport java.net.URLConnection;rnimport java.util.ArrayList;rnpublic class wangyirn public static ArrayList NewUrls = new ArrayList();rn public static String Nowurl;rn public static int WebIndex = 2501;rn public static String fPath = "F:/JAVA代码存储/163-travel/data";rn public static int num = 2501;rn public static int num2 = 5000;rn public static StringBuffer Webcode = new StringBuffer();rn [color=#FF6600]static String GetWebcode(String Nowurl)[/color] // 通过url得到网页源码rn rn Webcode.delete(0, Webcode.length());rn BufferedReader reader = null;rn try rn URL nowurl;rn nowurl = new URL(Nowurl);rn URLConnection Conn;rn Conn = nowurl.openConnection();rn Conn.setDoInput(true);rn InputStreamReader read = new InputStreamReader(rn Conn.getInputStream());rn reader = new BufferedReader(read);rn String str;rn while ((str = reader.readLine()) != null) rn str = str + "\n";rn Webcode.append(str);rn rn read.close();rn reader.close();rn catch (IOException e) rn e.printStackTrace();rn System.out.println(Nowurl); rn finally rn [color=#339966]return Webcode.toString();[/color]rn rn static void DrawUrl(String Precode)// PreCode为网页源码rn rn String link = "";rn String temple = "";rn String reg1 = "http://travel.163";rn int index0 = Precode.indexOf(reg1);rn int index1 = -1;//链接之前的双引号rn int index2 = -1;//链接之后的双引号rn int rebegin = 0;//用于表示下一次开始的起点 rn //新的提取url的部分rn rebegin = 0;rn while(index0 >0)rn temple = Precode.substring(rebegin+1, index0 );rn index1 = temple.lastIndexOf('"');rn index2 = Precode.indexOf('"', index0);rn link = Precode.substring(index0,index2);rn if(index2>index1&&index1>0&&link.contains("http")&&link.length()<255)rn if (!NewUrls.contains(link))rn NewUrls.add(link);rn rebegin = index2;rn index0 = Precode.indexOf(reg1, rebegin); rn rn rn static String GetNewUrl(ArrayList al) rn String tmpAUrl = al.get(0);rn return tmpAUrl;rn rn static void removeurl(ArrayList al) rn al.remove(0);rn rn static String Drawtext1(String reg1, String reg2, String PreCode) // 只抓取两个标签之间内容并且去除空格rn rn String temple = "";rn int index1 = -1;rn int index2 = -1;rn int length1 = reg1.length();rn index1 = PreCode.indexOf(reg1);rn index2 = PreCode.indexOf(reg2);rn if (index1 < 0 || index2 < 0)rn return "";rn temple = PreCode.substring(index1 + length1, index2);rn String kongge = "\\s*";rn temple = temple.replaceAll(kongge, "");rn return temple;rn rn static String Drawtext2(String reg1, String reg2, String PreCode)// 在Drawtext1的基础上抓起 <\p>之间内容,然后去除其他标签rn rn String result = "";rn result = Drawtext1(reg1, reg2, PreCode);rn String lastreg = "<[^>]+>";rn result = result.replaceAll(lastreg, ""); rn lastreg = "\\pP|\\pS|\\pC|\\d";rn result = result.replaceAll(lastreg,",");rn lastreg = ",2,";rn result = result.replaceAll(lastreg,""); rn String ereg = "([A-Za-z]|&)*";rn result = result.replaceAll(ereg, "");rn return result;rn rn static void DrawTCode(String PreCode) // 网页源码为参数,抓取旅游内容rn rn String result = "";rn result = result + Drawtext1(" ", "", PreCode);rn System.out.println(result);rn result = result + '\n';rn result = result + Nowurl + '\n';rn result = result + Drawtext2("ep-summary","",PreCode);rn save(result); rn rn [color=#FF6600]static void save(String text)[/color] // 向文件夹中存入文本rn rn try rn File file = new File(fPath, WebIndex + ".txt");rn if (!file.exists()) rn file.getParentFile().mkdirs();rn rn file.createNewFile();rn BufferedWriter bw = new BufferedWriter(new FileWriter(file));rn bw.write(text);rn bw.close();rn catch (IOException e) rn e.printStackTrace(); rn System.out.println(Nowurl);rn rn WebIndex++;rn rn static boolean isshtml(String url) rn int lastd = url.lastIndexOf('.');rn int size = url.length();rn String end = url.substring(lastd + 1, size);rn if (end.compareTo("html") == 0)rn return true;rn elsern return false;rn rn public static void main(String[] args) rn Nowurl = "http://travel.163.com/";rn DrawUrl(GetWebcode(Nowurl));rn while(WebIndex<=num2) rn while (NewUrls.size() > 0) rn Nowurl = GetNewUrl(NewUrls);rn DrawUrl(GetWebcode(Nowurl));//有可能输出异常信息,在GetWebcode中rn System.out.println(num);rn System.out.println(Nowurl);rn if (isshtml(Nowurl) == true&&rn Nowurl.matches(".*\\d2/\\d4/\\d2.*")) rn num++;rn DrawTCode(GetWebcode(Nowurl));rn removeurl(NewUrls);rn else rn removeurl(NewUrls);rn rn rn rn rn[/code]rn设计文件和网络的函数我用颜色标出来了。报出的异常信息如下:rnException in thread "main" java.lang.OutOfMemoryError: Java heap spacern at java.util.Arrays.copyOfRange(Arrays.java:3209)rn at java.lang.String.(String.java:216)rn at java.lang.StringBuffer.toString(StringBuffer.java:585)rn at wangyi.GetWebcode(wangyi.java:42)rn at wangyi.main(wangyi.java:151)rn异常信息里标明的代码我用绿色标出了。rn求大神解救,为何出现内存异常?
相关热词 c#检测非法字符 c#双屏截图 c#中怎么关闭线程 c# 显示服务器上的图片 api嵌入窗口 c# c# 控制网页 c# encrypt c#微信网页版登录 c# login 居中 c# 考试软件