2010-01-19 43 views
2

什么是PermGen空间Java?我们的团队遇到问题PermGen-space正在增加。这种增加最终会影响性能。java中的PermGen空间

我想知道什么PermGen空间是,我们如何优化其空间使用率?

+4

你试过Google吗? – 2010-01-19 09:19:45

+1

我搜索,但其中大部分是关于outofmemory上下文。所以我只想知道在自己的情况下只有PermGen – GuruKulki 2010-01-19 09:21:47

+0

http://java.sun.com/docs/hotspot/gc5.0/gc_tuning_5.html是一个很好的资源。 – 2010-01-19 09:27:02

回答

9

http://java.sun.com/docs/hotspot/gc1.4.2/faq.html(问题7-10)

  • 应如何永久代会大小?

    永久生成器用于保存虚拟机本身的反射,例如类对象和方法对象。这些反射物体被直接分配到永久世代中,并且其大小与其他世代独立。一般来说,这一代的大小可以忽略,因为默认大小是足够的。但是,加载许多类的程序可能需要更大的永久代。

  • 我如何判断永久代是否填满?

    从1.4.2开始-XX:+ PrintGCDetails将打印每个垃圾回收收集堆的所有部分的信息。对于一个完整的集合

    [全GC [终身:30437K-> 33739K(280576K),0.7050569秒] 106231K-> 33739K(362112K),[彼尔姆:2919K-> 2919K(16384K)],0.7052334秒]

    这个例子显示,在永久代中收集的很少(从收集之前使用的2919K变为收集后使用的2919K),永久代的当前规模为16384K。

  • 我该如何增加永久代的大小?

    使用命令行选项-XX:MaxPermSize参数=

  • 我怎么知道类装载什么或卸载?

    使用命令行选项-XX:+ TraceClassloading和-XX:+ TraceClassUnloading

  • 2

    在JVM中,PermGen拥有已加载/创建的类。这些信息是垃圾收集的,就像堆的其他部分一样,但是有粗糙的边缘可以防止这种情况发生。只是增加PermGen的空间

    Start your JVM with 
    -XX:MaxPermSize=Xm 
    where X is a number like 128, 256. 
    

    一个好的link有关此错误

    +0

    这不是关于类的元数据,而是实际的类。 :-) – wds 2010-01-19 09:29:36

    1

    基本上,彼尔姆代是指在其中所有装入的类被存储在堆的空间。它专门用于存储类定义。

    另外一个Java类的基本领域有

    * Methods of a class (including the bytecodes) 
    * Names of the classes (in the form of an object that points to a string also in the permanent generation) 
    * Constant pool information (data read from the class file, see chapter 4 of the JVM specification for all the details). 
    * Object arrays and type arrays associated with a class (e.g., an object array containing references to methods). 
    * Internal objects created by the JVM (java/lang/Object or java/lang/exception for instance) 
    * Information used for optimization by the compilers (JITs) 
    

    See这里。