java outofmemory

 我来答
户如乐9318
2022-10-10 · TA获得超过6622个赞
知道小有建树答主
回答量:2559
采纳率:100%
帮助的人:135万
展开全部
java outofmemory是什么,让我们一起了解一下?

out of memory(内存溢出)是一个程序员常见的错误类型,通常是开启应用程序过多所导致。一般是由于电脑内存不足,配置过低,电脑开启的应用程序过多,导致内存不足或者游戏客户端的问题。

Java中OutOfMemoryError(内存溢出)出现的情况和解决办法是什么?

第一种OutOfMemoryError: PermGenspace。
发生这种问题的原意是程序中使用了大量的jar或class,使java虚拟机装载类的空间不够,与PermanentGeneration space有关。解决这类问题有以下两种办法: 
1、增加java虚拟机中的XX:PermSize和XX:MaxPermSize参数的大小,其中XX:PermSize是初始永久保存区域大小,XX:MaxPermSize是最大永久保存区域大小。如针对tomcat6.0,在catalina.sh或catalina.bat文件中一系列环境变量名说明结束处(大约在70行左右) 增加一行: 
JAVA_OPTS=" -XX:PermSize=64M -XX:MaxPermSize=128m" 。
如果是windows服务器还可以在系统环境变量中设置。感觉用tomcat发布sprint+struts+hibernate架构的程序时很容易发生这种内存溢出错误。
2、清理应用程序中web-inf/lib下的jar,如果tomcat部署了多个应用,很多应用都使用了相同的jar,可以将共同的jar移到tomcat共同的lib下,减少类的重复加载。这种方法是网上部分人推荐的,我没试过,但感觉减少不了太大的空间,最靠谱的还是第一种方法。 

第二种OutOfMemoryError: Java heap space 。
发生这种问题的原因是java虚拟机创建的对象太多,在进行垃圾回收之间,虚拟机分配的到堆内存空间已经用满了,与Heapspace有关。解决这类问题有两种思路: 
1、检查程序,看是否有死循环或不必要地重复创建大量对象。找到原因后,修改程序和算法。 
写一个使用K-Means文本聚类算法对几万条文本记录(每条记录的特征向量大约10来个)进行文本聚类时,由于程序细节上有问题,就导致了Javaheap space的内存溢出问题,后来通过修改程序得到了解决。 
2、增加Java虚拟机中Xms(初始堆大小)和Xmx(最大堆大小)参数的大小。如:set JAVA_OPTS= -Xms256m-Xmx1024m。

实战操作,本机内存溢出代码如下: package DirectMemory; import sun.misc.Unsafe; import java.lang.reflect.Field; /**  * VM Args: -Xmx20M -XX:MaxDirectMemorySize=10M  * DirectByteBuffer分配内存也会抛出内存溢出异常,但它抛出异常时没有真正向系统申请分配内存,而是通过计算得知内存  * 无法分配,于是手动抛出异常。有点类似操作系统的银行家算法(避免死锁)  */ public class DirectMemoryOOM {     private static final int _1MB = 1024*1024;     public static void main(String[] args) throws IllegalAccessException {         Field unsafeField = Unsafe.class.getDeclaredFields()[0];        //获取类中第一个变量         unsafeField.setAccessible(true);                               //设置是否可反射访问private变量         Unsafe unsafe = (Unsafe) unsafeField.get(null);             //获取静态对象         while (true){             unsafe.allocateMemory(_1MB);                            //申请分配内存         }     } }
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式