OutOfMemoryError错误
Java堆内存的OutOfMemoryError异常是实际应用中常见的内存溢出异常情况。当出现Java堆内存溢出时,异常堆栈信息“java.lang.OutOfMemoryError”会跟着进一步提示“Java heap space”。
当产生的对象过多时,会出现这个错误信息。解决办法:调整虚拟机堆参数(-Xmx和-Xms)。
Java方法区会存储类信息、常量、静态变量等。如果产生了大量类,比如某个ssh项目因为加载了框架和大量jar包,这样class文件都会载入内存的方法区,这样如果出现内存无法继续扩展的情况,也会出现java.lang.OutOfMemoryError,然后紧跟着PermGen space信息。通过-XX:PermSize和-XX:MaxPermSize可以限制方法区大小。
StackOverflow错误
Java中栈内存溢出,通常是由于栈深度超过限制深度,导致出现该问题。很常见的情况是,使用递归的时候,不小心忘了指定递归结束的时刻,导致递归深度超过限制深度,出现栈内存溢出。
堆
是jvm中内存最大、线程共享的一块区域。唯一的目的是存储对象实例。这里也是垃圾收集器主要收集的区域。由于现代垃圾收集器都采用的是分代收集算法,所以java堆也分为新生代和老年代。
可以通过参数-Xmx(jvm最大可用内存)和-Xms(jvm初始内存)来调整堆内存,如果扩大至无法继续扩展时,会出现OutOfMemoryError的错误。