方法区 and 元空间 详解

1.8之前

JVM用持久代(Permanet Generation)来存放方法区,可通过-XX:PermSize和-XX:MaxPermSize来指定最小值和最大值。

1.8之后

1.8之后取消了方法区,取而代之的是元空间,也不再使用持久代内存,而是使用本地内存
元空间的本质和永久代类似,都是对JVM规范中方法区的实现。不过元空间与永久代之间最大的区别在于:
元空间并不在虚拟机中,而是使用本地内存。因此,默认情况下,元空间的大小仅受本地内存限制,但可以通过以下参数来指定元空间的大小

1.8不会出现方法区的溢出,但永久带溢出还是存在的,但是会出现元空间的溢出。

 

为什么要用元空间取代方法区?

1)JDK1.8之前方法区使用的是 JVM持久代内存,字符串存在永久代中,容易出现性能问题和内存溢出

2)类及方法的信息等比较难确定其大小,因此对于永久代的大小指定比较困难,太小容易出现永久代溢出,太大则容易导致老年代溢出。

3)永久代会为 GC 带来不必要的复杂度,并且回收效率偏低。

4)Oracle 可能会将HotSpot 与 JRockit 合二为一

详细参考原文:https://blog.csdn.net/lilamei170607/article/details/81429623

 

posted @ 2019-05-15 15:18  隔壁w王叔叔  阅读(1423)  评论(0)    收藏  举报