开发者社区> 问答> 正文

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

展开
收起
1878464141420310 2018-11-30 21:20:51 2538 0
3 条回答
写回答
取消 提交回答
  • 项目打印出gc日志,dump文件.
    -Xloggc:xxx.log
    -XX:+HeapDumpOnOutOfMemoryError
    -XX:HeapDumpPath=/xxx
    有了这些东西,事后才好复盘.


    11

    2019-07-17 23:17:52
    赞同 展开评论 打赏
  • 首先你要了解永久代是干嘛的,存了哪些东西。其次你要了解你自己的系统或应用做了什么,往永久代放了什么,是不是有groovy或自定了classloader动态加载class,是不是动态生成了常量的东西。还有就是dump一下heap,用Jprofiler分析一下永久代里有什么。

    2019-07-17 23:17:52
    赞同 展开评论 打赏
  • 擅长互联网移动开发。。。

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

    2019-07-17 23:17:52
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载