如何在Java应用程序中确定PermGen的大小(即以编程方式)?

时间:2010-11-01 17:34:24

标签: java memory-management memory-footprint

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

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

5 个答案:

答案 0 :(得分:9)

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

答案 1 :(得分:2)

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

答案 2 :(得分:2)

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

答案 3 :(得分:1)

您可以使用jmap命令:

  

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

     

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

     

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

其中options是以下之一:

  

-heap:打印java堆摘要

     

-permstat:打印永久生成统计信息

答案 4 :(得分:0)

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

-XX:PermSize=164m

在Java命令行或启动脚本中。这也是你如何在不依赖外部工具的情况下知道它的设置。

编辑:

阅读本文以确定当前正在以编程方式使用PermGen的程度(即没有外部工具):

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