目录
Motivation(动机)
This is part of the JRockit and Hotspot convergence effort. JRockit customers do not need to configure the permanent generation (since JRockit does not have a permanent generation) and are accustomed to not configuring the permanent generation.
这是JRockit和Hotspot融合工作的一部分。JRockit的客户不需要配置永久生成(因为JRockit没有永久生成),习惯于不配置永久代(想不到吧,仅仅是为了兼容)
Description
将Hotspot中永久生成的部分内容移到Java堆中,其余内容移到本地内存中。
Hotspot对Java类的表示(这里称为类元数据)目前存储在Java堆的一部分,称为永久生成。此外,实习的Strings和类静态变量也存储在永久生成中。永久生成由Hotspot管理,必须有足够的空间来存放Java应用程序使用的所有类元数据、实习Strings和类静态变量。当一个类被加载时,类元数据和静态会被分配到永久生成中,当类被卸载时,会从永久生成中被垃圾回收。当永久代被GC'ed时,内部的字符串也会被垃圾回收。
建议的实现将在本机内存中分配类的元数据,并将实习的Strings和类的静态数据移到Java堆中。Hotspot将显式地为类元数据分配和释放本机内存。新类元数据的分配将受到可用的本机内存量的限制,而不是由-XX:MaxPermSize的值固定,无论是默认的还是在命令行中指定的。
类元数据的本机内存分配将以块的形式进行,其大小足以容纳多个类元数据。每个块将与一个类加载器相关联,Hotspot将从该类加载器的块中分配该类加载器加载的所有类元数据。额外的块将根据需要为一个类加载器分配。块的大小将根据应用程序的行为而变化。这些大小将被选择为限制内部和外部碎片。当类加载器死亡时,通过释放所有与类加载器相关的块来释放类元数据的空间。在类的生命周期内,类元数据不会被移动。
参考
参照jdk的说明,网址:http://openjdk.java.net/jeps/122