7
  1. 有什么方法可以测量我的 Java 应用程序中当前使用的永久代 (PermGen) 的大小?我不能使用 VisualVM 等外部分析工具。

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

4

5 回答 5

9

您可以使用 JDK 附带的 MemoryMXBean。但我认为没有办法从正在运行的应用程序中查询 permgen 的使用情况。关于MemoryMXBean的文档。

于 2010-11-01T18:01:39.163 回答
2

您可以使用JDK 中的jvisualvm工具和Visual GC插件来监视所有 JVM 堆区域,包括 PermGen。

于 2010-11-01T17:47:23.480 回答
2

如果您不在 Windows 上,您可以尝试JDK 附带的jmap 。

于 2010-11-01T17:50:20.107 回答
1

您可以使用以下jmap命令:

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

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

jmap [option] [server_id@](连接远程调试服务器)

其中选项是以下之一:

-heap :打印java堆摘要

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

于 2013-09-09T18:18:22.177 回答
0

PermGen 的大小与类文件的大小无关。根据 Sun 的说法,PermGen 的默认大小是 64 MB。如果您想增加它,您可以使用以下方法显式设置它:

-XX:PermSize=164m

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

编辑:

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

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

于 2010-11-01T17:46:55.560 回答