开发者社区> 问答> 正文

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

1878464141420310 2018-11-30 21:20:51 586
分享到
取消 提交回答
全部回答(3)
  • 游客bgx5ifdnbokuq
    2019-07-17 23:17:52

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


    11

    0 0
  • 名字不能长
    2019-07-17 23:17:52

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

    0 0
  • aoteman675
    2019-07-17 23:17:52

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

    0 0
添加回答