先标记,标记完毕之后再清除,效率不高,会产生碎片
- 复制算法:分为 8:1 的
Eden 区
和survivor 区
,就是上面谈到的YGC
- 标记整理:标记完毕之后,让所有存活的对象向一端移动
问题五:GC 收集器有哪些?CMS 收集器与 G1 收集器的特点。
- 并行收集器:串行收集器使用一个单独的线程进行收集,GC 时服务有停顿时间
- 串行收集器:次要回收中使用多线程来执行
- CMS 收集器是基于“标记—清除”算法实现的,经过多次标记才会被清除
G1 从整体来看是基于 “标记—整理”算法 实现的收集器,从局部(两个 Region
之间)上来看是基于“复制”算法实现的
问题六:Minor GC 与 Full GC 分别在什么时候发生?
新生代内存不够用时候发生
MGC
也叫YGC
,JVM 内存不够的时候发生FGC
问题七:简述 java 垃圾回收机制?
在 java 中,程序员是不需要显示的去释放一个对象的内存的,而是由虚拟机自行执行。在 JVM 中,有一个垃圾回收线程,它是低优先级的,在正常情况下是不会执行的,只有在虚拟机空闲或者当前堆内存不足时,才会触发执行,扫面那些没有被任何引用的对象,并将它们添加到要回收的集合中,进行回收。
问题八:类加载器双亲委派模型机制?
当一个类收到了类加载请求时,不会自己先去加载这个类,而是将其委派给父类,由父类去加载,如果此时父类不能加载,反馈给子类,由子类去完成类的加载。
问题九:什么是类加载器,类加载器有哪些?
实现通过类的权限定名获取该类的二进制字节流的代码块叫做类加载器。
主要有一下四种类加载器:
- 启动类加载器(Bootstrap ClassLoader) 用来加载 java 核心类库,无法被 java 程序直接引用。
- 扩展类加载器(extensions class loader) :它用来加载 Java 的扩展库。Java 虚拟机的实现会提供一个扩展库目录。该类加载器在此目录里面查找并加载 Java 类。
- 系统类加载器(system class loader):它根据 Java 应用的类路径(
CLASSPATH
) 来加载 Java 类。一般来说,Java 应用的类都是由它来完成加载的。可以通过ClassLoader.getSystemClassLoader()
来获取它。 - 用户自定义类加载器,通过继承
java.lang.ClassLoader 类
的方式实现。
问题十:简述 java 内存分配与回收策率以及 Minor GC 和 Major GC
- 对象优先在堆的 Eden 区分配。
- 大对象直接进入老年代.
- 长期存活的对象将直接进入老年代.
当 Eden 区没有足够的空间进行分配时,虚拟机会执行一次 Minor GC.Minor Gc
通常发生在新生代的 Eden 区,在这个区的对象生存期短,往往发生 Gc 的频率较高,回收速度比较快;Full Gc/Major GC
发生在老年代,一般情况下,触发老年代 GC 的时候不会触发 Minor GC
,但是通过配置,可以在 Full GC
之前进行一次 Minor GC
这样可以加快老年代的回收速度。
写在最后
以上就是本资料的部分内容,由于篇幅原因就不全部展示了,希望大家在金三银四都能够找到一份自己满意的工作岗位!
最后在重复一次!
由于资料内容太多,平台篇幅限制,小编就展现了以上部分面试专题与资料,如需获取以下全部面试资料,可以关注我私信**【JVM面经】**免费获取。
最后求一个点赞关注,不过分吧!
最后
由于篇幅原因,就不多做展示了
05935663)]
[外链图片转存中…(img-IAb7MApM-1714805935664)]
由于篇幅原因,就不多做展示了