【发布时间】:2010-11-01 17:34:24
【问题描述】:
有什么方法可以测量我的 Java 应用程序中当前使用永久代 (PermGen) 的大小?我无法使用 VisualVM 等外部分析工具。
更好的是估计 PermGen 中 Java 类的内存消耗。它几乎与字节码文件的大小成正比吗?
【问题讨论】:
标签: java memory-management memory-footprint
有什么方法可以测量我的 Java 应用程序中当前使用永久代 (PermGen) 的大小?我无法使用 VisualVM 等外部分析工具。
更好的是估计 PermGen 中 Java 类的内存消耗。它几乎与字节码文件的大小成正比吗?
【问题讨论】:
标签: java memory-management memory-footprint
您可以使用 JDK 附带的 MemoryMXBean。但我认为没有办法从正在运行的应用程序中查询 permgen 的使用情况。 关于MemoryMXBean的文档。
【讨论】:
如果您不在 Windows 上,您可以尝试 JDK 附带的 jmap。
【讨论】:
您可以使用jmap 命令:
jmap [选项] (连接到正在运行的进程)
jmap [选项] (连接到核心文件)
jmap [选项] [server_id@] (连接到远程调试服务器)
其中选项是以下之一:
-heap : 打印 java 堆摘要
-permstat : 打印永久代统计数据
【讨论】:
PermGen 的大小与类文件的大小无关。根据 Sun 的说法,PermGen 的默认大小是 64 MB。如果你想增加它,你可以使用显式设置它:
-XX:PermSize=164m
在您的 Java 命令行或启动脚本中。这也是您无需依赖外部工具即可知道其设置的方法。
编辑:
阅读这篇文章,以确定目前以编程方式使用了多少 PermGen(即没有外部工具):
http://frankkieviet.blogspot.com/2006/10/how-to-fix-dreaded-permgen-space.html
【讨论】: