Permgen OutOfMemory,请问有什么手段或者工具可以看到Permgen中被intern()的String的具体内容
Permgen OutOfMemory,请问有什么手段或者工具可以看到Permgen中被intern()的String的具体内容?一般Permgen里有2部分数据,一部分是加载的Class,一部分是String常量池(即调用了String.intern())。加载的Class的内容已经用Memory Analyzer分析出来了,但String常量池里的内容还不知道,请问,有没有什么方式或工具可以看到Permgen中被intern()的String常量池的具体内容? --------------------编程问答-------------------- profiler堆分析器,能够看到当前jvm堆内存的一些情况,比如每个对象所占内存的大小等等,而Permgen属于堆内存,你可以借助分析器,查看下…… --------------------编程问答--------------------
纠正你一下,Permgen不属于堆内存,JVM内存由以下5部分组成:
JVM内存组成:
1、程序计数器:是一块较小的内存空间,它的作用是当前线程所执行的字节码的行号指示器。
2、Java虚拟机栈:存放每个线程执行方法的局部变量区、操作数栈。
本地方法栈:执行Native方法。Sun Hotspot虚拟机把本地方法栈与虚拟机栈合二为一。
3、Java堆
4、方法区(Perm代)
5、直接内存(Direct Memory),NIO使用Native函数库直接分配堆外内存。
至于那些工具,如jmap,jinfo,jprofiler,jconsole,jvisualvm,memory易做图yzer都无法看到看到Permgen中被intern()的String常量池的具体内容的。 --------------------编程问答-------------------- 是的,没办法读取。
PermGen 与 java heap 的机制、GC 都不一样,heap dump 只能导出 heap 上的内容,导不出 PermGen 中的东西。
补充:Java , Java SE