首页 热点资讯 义务教育 高等教育 出国留学 考研考公
您的当前位置:首页正文

Java 内存区域的另一种描述

2024-12-15 来源:化拓教育网

JVM的区域总体分为两类:

  • 堆区(Heap)
  • 非堆区

Heap

堆区又分为:

  • Young Gen
    • Eden Space
    • Survivor Space
      • From Space
      • To Space
  • Old Een(老年代)

非Heap

非堆区又分为:

  • Code Cache(代码缓存区)
  • Perm Gen(永久代)
  • Jvm Statck(虚拟机栈)
  • Local Method Statck(本地方法栈)

年轻代

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之后被元空间替代

显示全文