【问题标题】:Tool to view objects in permgen在 permgen 中查看对象的工具
【发布时间】:2011-04-16 18:19:35
【问题描述】:

我有一些关于 permgen 溢出的问题。我可以使用哪些工具来查看哪些类现在加载到 permgen 以及它们使用了多少内存? 谢谢。

【问题讨论】:

    标签: java permgen


    【解决方案1】:

    也许你有一个庞大的代码库或者正在实习大量的字符串。

    试试jmap:

    jmap -permstat <pid>
    

    (注意:permstat 选项在 Windows 中不可用)

    例子:

    $ jmap -permstat 22982
    Attaching to process ID 22982, please wait...
    Debugger attached successfully.
    Server compiler detected.
    JVM version is 17.0-b16
    100691 intern Strings occupying 5641096 bytes.
    finding class loader instances ..Finding object size using Printezis bits and skipping over...
    done.
    computing per loader stat ..done.
    please wait.. computing liveness..done.
    class_loader    classes bytes   parent_loader   alive?  type
    
    <bootstrap>     303     1355992   null          live    <internal>
    0xdd159fe8      9       94104   0xdd153c30      live    sun/misc/Launcher$AppClassLoader@0xae7fcfa0
    0xdd153c30      0       0         null          live    sun/misc/Launcher$ExtClassLoader@0xae7b0178
    
    total = 3       312     1450096     N/A         alive=3, dead=0     N/A
    

    您也可以尝试将堆转储到文件中,然后将其加载到 Eclipse Memory Analyser,这将为您提供有用的信息,例如泄漏嫌疑人报告和支配树。

    jmap -dump:format=b,file=heap.bin 22982
    

    如有必要,您可以使用-XX:MaxPermSize JVM 选项来增加 PermGen 空间。

    【讨论】:

    • permstat 选项现在可在 Windows 上使用。 java 版本 "1.6.0_31" Java(TM) SE Runtime Environment (build 1.6.0_31-b05) Java HotSpot(TM) 64-Bit Server VM (build 20.6-b01, mixed mode)
    【解决方案2】:

    看起来您搜索的是分析器。 (例如jProfiler 或开源:http://java-source.net/open-source/profilers

    【讨论】:

    • 您能否指出任何可以选择探索 perm gen 空间的分析器。据我所知,他们中的大多数只探索堆,而不是 perm gen 空间。
    猜你喜欢
    • 1970-01-01
    • 2013-08-20
    • 2014-09-03
    • 2019-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多