[讨论] Permgen OutOfMemory,请问有什么手段或者工具可以看到Permgen中被intern()的String的具体内容
lin_yp
2012-09-17
Permgen OutOfMemory,请问有什么手段或者工具可以看到Permgen中被intern()的String的具体内容?
一般Permgen里有2部分数据,一部分是加载的Class,一部分是String常量池(即调用了String.intern())。加载的Class的内容已经用Memory Analyzer分析出来了,但String常量池里的内容还不知道,请问,有没有什么方式或工具可以看到Permgen中被intern()的String常量池的具体内容? |
|
ol_beta
2012-09-18
可以在OutOfMemory的时候dump一份JVM的内存镜像,然后用MemoryAnalyzer等工具分析,这类工具一般支持OQL,可以直接查找你要的字符串。
|
|
lin_yp
2012-09-18
这个之前已经用MemoryAnalyzer看过了,只能知道java.lang.String的内容,但区分不出哪些是字符串常量池的(即String.intern()),哪些是普通字符串。
我的意思是有没有什么方式或工具可以看到Permgen中被intern()的String常量池的具体内容? |
|
ol_beta
2012-09-18
lin_yp 写道 这个之前已经用MemoryAnalyzer看过了,只能知道java.lang.String的内容,但区分不出哪些是字符串常量池的(即String.intern()),哪些是普通字符串。
我的意思是有没有什么方式或工具可以看到Permgen中被intern()的String常量池的具体内容? 对已字符串常量,jvm会默认调用String.intern(),不必手动调用。 关于在PermGen是否有标识能够识别出String.intern()不太了解,希望知道的朋友给回答一下。 |
|
lin_yp
2012-09-18
ol_beta 写道 lin_yp 写道 这个之前已经用MemoryAnalyzer看过了,只能知道java.lang.String的内容,但区分不出哪些是字符串常量池的(即String.intern()),哪些是普通字符串。
我的意思是有没有什么方式或工具可以看到Permgen中被intern()的String常量池的具体内容? 对已字符串常量,jvm会默认调用String.intern(),不必手动调用。 关于在PermGen是否有标识能够识别出String.intern()不太了解,希望知道的朋友给回答一下。 字符串常量是这样的,但代码中也有一些地方是new String("内容").intern()主动调用的,现在是想在不知道代码的情况下,找出Permgen中String.intern()的内容 |