Code前端首页关于Code前端联系我们

Java研发面试题:JVM内存模型VS垃圾回收机制?

terry 2年前 (2023-09-25) 阅读数 65 #后端开发
Java研发面试题集:JVM内存模型VS垃圾回收机制?

4. JVM

1。内存模型和分区。您需要详细定义每个区域中要放置的内容。

JVM分为堆空间和栈空间以及方法空间。初始化的对象移至堆,引用移至栈,类信息常量集(静态常量和静态变量)移至方法区 new:

  • 方法区:主要存放类信息、常量集合(静态常量和静态变量)、翻译后的代码(字节码)和其他数据
  • 堆:初始化的对象、成员变量(非静态变量),所有对象实例和数组都必须保留在堆中
  • 堆栈:栈的结构由栈帧组成。当调用一个方法时,会发送一个帧。局部变量表、操作数栈和方法驻留在帧上。导出等信息,局部变量表存储了8种基本类型和1种应用类型,所以还是有一个指向该地址的指针
  • 本地方法栈:主要服务于native方法
  • 程序计数器:记录当前执行的线程序列编号

2。堆中的分区:伊甸园、生存(from+to)、老年代,各有各的特点。

堆在新生代和老生代之间进行分割(java8删除了永久代并接管了Metaspace)。新一代包括Eden+Survivor区域。它被分为来自和朝向幸存区域的区域。回收内存时,如果使用复制算法,从这里复制到这里。经过一次或多次GC后,幸存的对象被移至旧区。如果JVM内存不足,会触发full GC,清理旧的JVM空间。当新区域满后,YGC启动后,首先将幸存的物品放入其中一个服务区,然后清理垃圾。因为如果只清理需要删除的对象,会造成内存碎片,所以Eden通常会被彻底清理干净,然后再组织内存。然后下次执行GC的时候,就使用下一个Survive,并且循环使用。如果有特别大的物品无法放入新一代,则使用老一代的保修,直接转移到老一代。因为JVM认为大对象往往有更长的生存时间。

3。简单描述一下Java的垃圾回收机制?

在Java中,程序员不需要专门释放对象的内存,虚拟机会自己做。JVM有一个垃圾收集线程,优先级较低,正常情况下不执行。仅当虚拟机空闲或当前堆内存不足时才会激活。检查尚未被任何东西使用的线程。引用的对象并将它们添加到要回收的集合中。

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

热门