技术栈

Java 内存区域的另一种描述

2019-10-18  本文已影响0人  烟雨乱平生

JVM的区域总体分为两类:

Heap

堆区又分为:

非Heap

非堆区又分为:

年轻代

HotSpot JVM把年轻代分为了三部分:1个Eden区和2个Survivor区(分别叫from和to)。默认比例为8:1。

old老年代

老年代,用于存放新生代中经过多次垃圾回收仍然存活的对象,也有可能是新生代分配不了内存的大对象会直接进入老年代。

Code Cache代码缓存区

它主要用于存放JIT所编译的热点代码。CodeCache代码缓冲区的大小在client模式下默认最大是32m,在server模式下默认是48m,这个值也是可以设置的

Perm Gen(永久代)

Perm Gen全称是Permanent Generation space,称之为永久代,其实指的就是这个方法区。不过方法区和“PermGen space”又有着本质的区别。前者是 JVM 的规范,而后者则是 JVM 规范的一种实现,并且只有 HotSpot 才有 “PermGen space”,而对于其他类型的虚拟机,如 JRockit(Oracle)、J9(IBM) 并没有“PermGen space”。

由于方法区主要存储类的相关信息,Class在被Load进入这个区域后,如果应用程序LOAD很多Class的话,就很可能会出现PermGen space错误,比如对于动态生成类的情况比较容易出现永久代的内存溢出

JDK1.8之后被元空间替代

上一篇 下一篇

猜你喜欢

热点阅读