Java面试之JVM复习(二)

衔接上篇,这篇继续介绍JVM的内存分布

方式/步骤

  1. 1

    虚拟机栈(线程私有)

  2. 2

    堆(Heap线程共享)运行时数据区

  3. 3

    方式区/永远代(线程共享)

  4. 4

    java堆内存从GC的角度还可以细分为:新生代和老年月。下图为堆内存的划分

  5. 5

    新生代: 用来存放新生的对象。一般占有堆的1/3的空间。因为频仍建立对象,所以新生代会频仍的触发minorGC进行垃圾收受接管。新生代又分为Eden 、Form

    survivor、To survivor三个区

    Eden 区:java新对象的出生地(若是新建立的对象占用内存很大,会直接分派到老年月)。当Eden 区内存不敷的时辰会触发Minor GC,对新生代进行一次垃圾收受接管。

    Form survivor区 :上一次GC的幸存者,作为这一次GC的被扫描者。

    To survivor区:保留了一次Minor GC过程中的幸存者。

  6. 6

    老年月:本家儿要存放应用程序中生命周期长的内存对象。

    元数据区(元空间):在JAVA8中,永远代已经被移除,被元空间所替代。元空间的素质和永远代相似,元空间和永远代之间的区别在于元空间不在虚拟机中,而是利用当地内存。是以,默认环境下,元空间的大小仅受当地内存限制。

    类的元数据放入native memory,字符串池和类的静态变量放入java堆中,这样加载几多类的元数据就不再由MaxPermSize节制,而由系统的现实可用空间来节制。

  • 发表于 2020-04-30 19:00
  • 阅读 ( 79 )
  • 分类:其他类型

相关问题

0 条评论

请先 登录 后评论