jdk为什么用元空间取代永久代

目录

Motivation(动机)

Description

参考


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

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值