我的提问 我要提问

1878464141420310 2018-11-30 21:20:51

永久代溢出怎么找具体原因啊

Java核心技术

回答(4)

游客bgx5ifdnbokuq 0

11

游客bgx5ifdnbokuq 0

项目打印出gc日志,dump文件.
-Xloggc:xxx.log
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/xxx
有了这些东西,事后才好复盘.

名字不能长 0

首先你要了解永久代是干嘛的,存了哪些东西。其次你要了解你自己的系统或应用做了什么,往永久代放了什么,是不是有groovy或自定了classloader动态加载class,是不是动态生成了常量的东西。还有就是dump一下heap,用Jprofiler分析一下永久代里有什么。

aoteman675 0

永久代溢出可以分为两种情况,第一种是常量池溢出,第二种是方法区溢出。
1、永久代溢出——常量池溢出
要模拟常量池溢出,可以使用String对象的intern()方法。如果常量池包含一个此String对象的字符串,就返回代表这个字符串的String对象,否则将String对象包含的字符串添加到常量池中。
2、永久代溢出——方法区溢出
方法区存放Class的相关信息,下面借助CGLib直接操作字节码,生成大量的动态类。

相关问题