有没有办法在我的Java应用程序中测量当前使用的大小的永久代(PermGen)?我不能使用VisualVM等外部分析工具。
更好的是估计PermGen中Java类的内存消耗。它几乎与字节码文件的大小成比例?
答案 0 :(得分:9)
您可以使用JDK附带的MemoryMXBean。但我认为没有办法从正在运行的应用程序中查询permgen使用情况。 有关MemoryMXBean的文档。
答案 1 :(得分:2)
答案 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