1. 有什么方法可以测量Java应用程序中永久生成(PermGen)当前使用的大小?我无法使用外部配置工具,例如VisualVM。

  2. 更好的方法是估算PermGen中Java类的内存消耗。它几乎与字节码文件的大小成正比吗?

有帮助吗?

解决方案

您可以使用JDK附带的MemoryMXBean。但是我不认为有一种方法可以从正在运行的应用程序中查询permgen的使用情况。 关于 MemoryMXBean 的文档。/ p>

其他提示

您可以将JDK中的 jvisualvm 工具用于 Visual GC 插件可以监视包括PermGen在内的所有JVM堆区域。

如果您不在Windows上,则可以尝试 jmap

您可以使用jmap命令:

jmap [选项] (以连接到正在运行的进程)

jmap [选项] (以连接到核心文件)

jmap [选项] [server_id @] (以连接到远程调试服务器)

其中选项是以下之一:

-heap:打印Java堆摘要

-permstat:打印永久代统计信息

PermGen的大小与类文件的大小无关。根据Sun,PermGen的默认大小为64 MB。如果您希望增加它,可以使用以下命令进行显式设置: 通用标签

在Java命令行或启动脚本中。这也是您无需依赖外部工具就能知道其设置的方法。

编辑:

阅读本文可确定当前以编程方式(即没有外部工具)使用了多少PermGen:

http://frankkieviet.blogspot。com / 2006/10 / how-to-fix-dreaded-permgen-space.html

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top