读书人

JVM内存分析系列(2)内存溢出的类型分

发布时间: 2013-12-28 22:19:33 作者: rapoo

JVM内存分析系列(二)内存溢出的类型分析
启动参数
-server -verbose:gc -Xms10m -Xmx10m -Xss128k -Xloggc:C:/tmp/gc.log -XX:PermSize=5m -XX:MaxPermSize=5m -XX:MaxDirectMemorySize=10m -XX:+PrintGCDetails -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=C:/tmp

Java堆溢出

at java.util.Arrays.copyOf(Arrays.java:2760)
at java.util.Arrays.copyOf(Arrays.java:2734)
at java.util.ArrayList.ensureCapacity(ArrayList.java:167)
at java.util.ArrayList.add(ArrayList.java:351)
at com.chinaso.phl.Server.main(Server.java:29)



虚拟机栈和本地方法栈溢出

stack length:1007
Exception in thread "main" java.lang.StackOverflowError
at com.chinaso.phl.Server.stackLeak(Server.java:13)


运行时常量池溢出
at java.lang.String.intern(Native Method)
at com.chinaso.phl.Server.main(Server.java:45)

注意:如果写成下面的形式,就是堆溢出了。只有String.intern()方法,是把字符串内容放入常量池并返回。
at java.util.Arrays.copyOf(Arrays.java:2760)
at java.util.Arrays.copyOf(Arrays.java:2734)
at java.util.ArrayList.ensureCapacity(ArrayList.java:167)
at java.util.ArrayList.add(ArrayList.java:351)
at com.chinaso.phl.Server.main(Server.java:46)




方法区溢出
at net.sf.cglib.core.EmitUtils.member_switch_helper(EmitUtils.java:690)
at net.sf.cglib.core.EmitUtils.constructor_switch(EmitUtils.java:681)
at net.sf.cglib.proxy.Enhancer.emitNewInstanceMultiarg(Enhancer.java:849)
at net.sf.cglib.proxy.Enhancer.generateClass(Enhancer.java:508)
at net.sf.cglib.core.DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:25)
at net.sf.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:216)
at net.sf.cglib.proxy.Enhancer.createHelper(Enhancer.java:377)
at net.sf.cglib.proxy.Enhancer.create(Enhancer.java:285)
at com.chinaso.phl.Server.main(Server.java:66)


本机直接内存溢出
at sun.misc.Unsafe.allocateMemory(Native Method)
at com.chinaso.phl.Server.main(Server.java:70)


附录
本文只是模拟各种内存溢出的情况,文章追求精简直接,本文不适合初学者,需要有一定的基础,对JVM内存模型有一定的了解。




作者简介
昵称:澳洲鸟
姓名:朴海林
QQ:85977328
MSN:6301655@163.com

转载请注明出处

读书人网 >软件架构设计

热点推荐