项目打印出gc日志,dump文件.
-Xloggc:xxx.log
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/xxx
有了这些东西,事后才好复盘.
11
首先你要了解永久代是干嘛的,存了哪些东西。其次你要了解你自己的系统或应用做了什么,往永久代放了什么,是不是有groovy或自定了classloader动态加载class,是不是动态生成了常量的东西。还有就是dump一下heap,用Jprofiler分析一下永久代里有什么。
永久代溢出可以分为两种情况,第一种是常量池溢出,第二种是方法区溢出。
1、永久代溢出——常量池溢出
要模拟常量池溢出,可以使用String对象的intern()方法。如果常量池包含一个此String对象的字符串,就返回代表这个字符串的String对象,否则将String对象包含的字符串添加到常量池中。
2、永久代溢出——方法区溢出
方法区存放Class的相关信息,下面借助CGLib直接操作字节码,生成大量的动态类。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。