java 内存溢出异常
代码略长,发不上来,我贴到了CSDN,求大神帮助。链接:http://bbs.csdn.net/topics/390446896...
代码略长,发不上来,我贴到了CSDN,求大神帮助。
链接:http://bbs.csdn.net/topics/390446896 展开
链接:http://bbs.csdn.net/topics/390446896 展开
展开全部
使用Java程序从数据库中查询大量的数据时出现异常:java.lang.OutOfMemoryError: Java heap space
在JVM中如果98%的时间是用于GC且可用的 Heap size 不足2%的时候将抛出此异常信息。
JVM堆的设置是指java程序运行过程中JVM可以调配使用的内存空间的设置.JVM在启动的时候会自动设置Heap size的值,其初始空间(即-Xms)是物理内存的1/64,最大空间(-Xmx)是物理内存的1/4。可以利用JVM提供的-Xmn -Xms -Xmx等选项可进行设置。
例如:java -jar -Xmn16m -Xms64m -Xmx128m MyApp.jar
如果Heap Size设置偏小,除了这些异常信息外,还会发现程序的响应速度变慢了。GC占用了更多的时间,而应用分配到的执行时间较少。
Heap Size 最大不要超过可用物理内存的80%,一般的要将-Xms和-Xmx选项设置为相同,而-Xmn为1/4的-Xmx值。
Heap size的 -Xms -Xmn 设置不要超出物理内存的大小。否则会提示“Error occurred during initialization of VM Could not reserve enough space for object heap”。
这个问题的根源是jvm虚拟机的默认Heap大小是64M,可以通过设置其最大和最小值来实现.设置的方法主要是几个.
1.可以在windows 更改系统环境变量加上JAVA_OPTS=-Xms64m -Xmx512m
2,如果用的tomcat,在windows下,可以在C:\tomcat5.5.9\bin\catalina.bat 中加上:
set JAVA_OPTS=-Xms64m -Xmx256m
位置在: rem Guess CATALINA_HOME if not defined 这行的下面加合适.
3.如果是linux系统
Linux 在{tomcat_home}/bin/catalina.sh的前面,加 set JAVA_OPTS='-Xms64 -Xmx512'
在JVM中如果98%的时间是用于GC且可用的 Heap size 不足2%的时候将抛出此异常信息。
JVM堆的设置是指java程序运行过程中JVM可以调配使用的内存空间的设置.JVM在启动的时候会自动设置Heap size的值,其初始空间(即-Xms)是物理内存的1/64,最大空间(-Xmx)是物理内存的1/4。可以利用JVM提供的-Xmn -Xms -Xmx等选项可进行设置。
例如:java -jar -Xmn16m -Xms64m -Xmx128m MyApp.jar
如果Heap Size设置偏小,除了这些异常信息外,还会发现程序的响应速度变慢了。GC占用了更多的时间,而应用分配到的执行时间较少。
Heap Size 最大不要超过可用物理内存的80%,一般的要将-Xms和-Xmx选项设置为相同,而-Xmn为1/4的-Xmx值。
Heap size的 -Xms -Xmn 设置不要超出物理内存的大小。否则会提示“Error occurred during initialization of VM Could not reserve enough space for object heap”。
这个问题的根源是jvm虚拟机的默认Heap大小是64M,可以通过设置其最大和最小值来实现.设置的方法主要是几个.
1.可以在windows 更改系统环境变量加上JAVA_OPTS=-Xms64m -Xmx512m
2,如果用的tomcat,在windows下,可以在C:\tomcat5.5.9\bin\catalina.bat 中加上:
set JAVA_OPTS=-Xms64m -Xmx256m
位置在: rem Guess CATALINA_HOME if not defined 这行的下面加合适.
3.如果是linux系统
Linux 在{tomcat_home}/bin/catalina.sh的前面,加 set JAVA_OPTS='-Xms64 -Xmx512'
2018-08-04 · 百度知道合伙人官方认证企业
育知同创教育
1【专注:Python+人工智能|Java大数据|HTML5培训】 2【免费提供名师直播课堂、公开课及视频教程】 3【地址:北京市昌平区三旗百汇物美大卖场2层,微信公众号:yuzhitc】
向TA提问
关注
展开全部
【情况一】:
java.lang.OutOfMemoryError: Java heap space:这种是java堆内存不够,一个原因是真不够,另一个原因是程序中有死循环;
如果是java堆内存不够的话,可以通过调整JVM下面的配置来解决:
<jvm-arg>-Xms3062m</jvm-arg>
<jvm-arg>-Xmx3062m</jvm-arg>
【情况二】
java.lang.OutOfMemoryError: GC overhead limit exceeded
【解释】:JDK6新增错误类型,当GC为释放很小空间占用大量时间时抛出;一般是因为堆太小,导致异常的原因,没有足够的内存。
【解决方案】:
1、查看系统是否有使用大内存的代码或死循环;
2、通过添加JVM配置,来限制使用内存:
<jvm-arg>-XX:-UseGCOverheadLimit</jvm-arg>
java.lang.OutOfMemoryError: Java heap space:这种是java堆内存不够,一个原因是真不够,另一个原因是程序中有死循环;
如果是java堆内存不够的话,可以通过调整JVM下面的配置来解决:
<jvm-arg>-Xms3062m</jvm-arg>
<jvm-arg>-Xmx3062m</jvm-arg>
【情况二】
java.lang.OutOfMemoryError: GC overhead limit exceeded
【解释】:JDK6新增错误类型,当GC为释放很小空间占用大量时间时抛出;一般是因为堆太小,导致异常的原因,没有足够的内存。
【解决方案】:
1、查看系统是否有使用大内存的代码或死循环;
2、通过添加JVM配置,来限制使用内存:
<jvm-arg>-XX:-UseGCOverheadLimit</jvm-arg>
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
Webcode.delete(0, Webcode.length());
你知道这行代码要做什么吗?
他会把webcode原来的所有字符拷贝,然后返回,基本上可以认为,你内存中存在2份字符串了
webcode为什么要定义为static呢
直接在GetWebcode方法中创建一个就行了
static String GetWebcode(String Nowurl) // 通过url得到网页源码
{
StringBuffer Webcode = new StringBuffer();
BufferedReader reader = null;
try {
URL nowurl;
nowurl = new URL(Nowurl);
URLConnection Conn;
Conn = nowurl.openConnection();
Conn.setDoInput(true);
InputStreamReader read = new InputStreamReader(
Conn.getInputStream());
reader = new BufferedReader(read);
String str;
while ((str = reader.readLine()) != null) {
str = str + "\n";
Webcode.append(str);
}
read.close();
reader.close();
} catch (IOException e) {
e.printStackTrace();
System.out.println(Nowurl);
} finally {
}
String result = Webcode.toString();
return result;
}
你知道这行代码要做什么吗?
他会把webcode原来的所有字符拷贝,然后返回,基本上可以认为,你内存中存在2份字符串了
webcode为什么要定义为static呢
直接在GetWebcode方法中创建一个就行了
static String GetWebcode(String Nowurl) // 通过url得到网页源码
{
StringBuffer Webcode = new StringBuffer();
BufferedReader reader = null;
try {
URL nowurl;
nowurl = new URL(Nowurl);
URLConnection Conn;
Conn = nowurl.openConnection();
Conn.setDoInput(true);
InputStreamReader read = new InputStreamReader(
Conn.getInputStream());
reader = new BufferedReader(read);
String str;
while ((str = reader.readLine()) != null) {
str = str + "\n";
Webcode.append(str);
}
read.close();
reader.close();
} catch (IOException e) {
e.printStackTrace();
System.out.println(Nowurl);
} finally {
}
String result = Webcode.toString();
return result;
}
追问
修改了之后,还是抛出了内存溢出的异常,显示是Webcode.append(str)这一行异常
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
看看是不是死循环的,你可以while语句里打倒一下
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询