关于java.lang.OutOfMemoryError

来源:百度文库 编辑:神马文学网 时间:2024/04/28 13:46:29
java.lang.OutOfMemoryError
经过查找资料,可能出现的问题和解决办法如下:
1.String其实是没有限制的,而是当String太大了,超过JVM的自身的内存后会抛出java.lang.OutOfMemoryError错误
String是没有长度限制的,而是有JVM的内存限制了String的长度。同时说明,并不会抛出任何Exception而只会抛出Error.
OutMemoryError表明程序的设计差,或者遇到了超出编程人员所预想的大批量的数据。不管哪种情况,都只有下面这几种解决办法。它们是:
设计人员重新设计程序,不致使程序一次载入所有的数据。
数据可以分割成更小的块。
可以为程序分配更多的内存。
为Java虚拟机提供更多的内存。
2.一般都是发生在开启大型档案或跟数据库一次拿了太多的数据,造成 Out Of Memory Error 的状况,这时就大概要计算一下数据量的最大值是多少,并且设定所需最小及最大的内存空间值。
另一种状况平时比较难查觉。就是 Servlet 或 JSP 的 Container 突然同时上线人数爆增,也相对造成内存需求不足,所以也必须要计算出程序所需的数据量*同时上线人数,来设定内存的需求量。(如果要有最佳化的值,最好是配合 gc 做调校)
有一种说法是听来的,实际上是不是如此还有待确认。
当 CPU 速度愈快,内存的最小需求量也就必需愈大。原因是 CPU 愈快,短时间内能处理的数据量也就愈大,所以在 java 做 GC 之前,可能已经内存已经消耗完了,所以 CPU 的速度也是内存初始需求量的重要因素之一。
目前这三项应该足以应付绝大部份 Out Of Memory Error 的状况,其它造成 Out Of Memory Error 的状况,等有遇到再来补充。
方法:
修改JAVA_OPTS="-Xms1024m -Xmx1024m" 或更大,根据系统内存情况
内存溢出的情况很大可能性是程序设计过程中不注意消耗内存的细节编码造成的。
但是编码后期来发现问题需要付出的劳动会很多,很不容易 。
http://www.matrix.org.cn/resource/article/43/43639_Memory_Leaks.html
http://www.pconline.com.cn/pcedu/empolder/gj/java/0509/699218.html
有关java内存的文章和内存溢出查找原因的一个方法。