Java面试那点事——基础200110

1. 说一下 jvm 有哪些垃圾回收算法?

标记是通过 可达性分析法,以GC Roots 对象为根节点 把引用链上的对象标记

  • 标记-清除 算法:分标记和清除两个部分,清除就是把未标记的对象清除掉。效率不高,并且产生空间碎片。
  • 复制算法:将内存分成两个部分,一个用于存储对象,一个不使用。回收的时候,把使用的内存中的对象全部复制到不使用的内存中,然后清除使用的内存,并交换二者的角色。不会产生空间碎片但是浪费一半内存。不适用对象存活较多的情况。
  • 标记-整理 算法:先把对象标记处理,再把对象全部压缩到内存的边界,再把边界外的内存清空。适用于对象存活较多的情况。

补充:
Hotspot虚拟机优化了复制算法的内存结构:
在新生代,分为Eden和两个survivor,Eden和survivor的比例默认是8:1,先存往Eden存对象,满了在存到survivor中,两个survivor一定有一个是空的。回收的时候,Eden和使用的survivor的对象复制到空闲的survivor中,清空Eden和使用的survivor,然后两个survivor交互角色,如果复制的时候survivor满了就移动到老年代中。


2. 说一下 jvm 有哪些垃圾回收器?

1.serial 回收器
单线程回收器,回收的时候会暂停所有用户线程stop the world,复制算法,新生代

2.parnew 回收器
serial的多线程版,其他的跟serial一致,复制算法,新生代

3.parallel scavenge 回收器
多线程版,对CPU资源敏感,注重吞吐量,复制算法,新生代

4.serial old 回收器
serial的老年代版本,标记-整理 算法,老年代

5.parallel old 回收器
parallel的老年代版本,标记-整理算法,老年代

6.CMS 回收器
注重用户体验,以获取最短回收停顿时间为目的,第一款并发收集器。采用标记-清除算法,老年代

7.G1 回收器
面向服务器。低停顿,可预测的停顿时间模型,作用整个堆,把内存区域划分为一个个region,不会产生空间碎片


3. 详细介绍一下 CMS 垃圾回收器?

注重用户体验,以获取最短回收停顿时间为目的,第一款并发收集器。采用标记-清除算法,老年代

运行过程:

  • 初始标记:直接与GC Roots连接的对象,暂停其他用户程序
  • 并发标记:并发进行,GC Roots追踪引用链与用户程序一起执行
  • 重新标记:修正因程序运行而导致的对象标记的变化,暂停其他用户程序
  • 并发清除:清除标记的对象,与用户程序一起执行

优点:并发、低停顿

缺点:对CPU资源敏感;无法处理浮动垃圾;产生空间碎片。


4. 新生代垃圾回收器和老生代垃圾回收器都有哪些?有什么区别?

  • 新生代收集器:Serial、ParNew、Parallel Scavenge

  • 老年代收集器:CMS、Serial Old、Parallel Old

  • 整堆收集器:G1

  • 区别:算法、单线程多线程、侧重方面(吞吐量、停顿时间、效率)


5. 简述分代垃圾回收器是怎么工作的?

  • 新生代和老年代采用不同的垃圾回收算法和不同的垃圾回收器,新生代使用复制算法,老年代使用标记-整理和标记清除算法。

6. G1 为什么能建立可预测的停顿时间模型?

  • 把Java堆划分为不同的region区,根据不同region的大小和价值,建立一个优先队列,优先回收价值最大的region,在根据用户期望的停顿时间建立停顿时间模型,获得最高的回收效率。

下面对补充题目:

7. Minor Gc 和 Full GC 有什么不同呢?

minor GC是针对新生代,major GC是清理老年代,Full GC是清理整个堆


8. 什么对象会进入老年代

  • 大对象直接进入老年代
  • 长期存活的对象直接进入老年代

9. 如果对象的引用被置为null,垃圾收集器是否会立即释放对象占用的内存?

不会立刻进行垃圾回收,而是在下一次进行回收,因为垃圾回收是优先度比较低的线程,设置为null之后不会立即执行垃圾回收,而是在垃圾回收执行到的时候,进行回收。

10. 反射中,Class.forName() 和ClassLoader.loadClass()区别

  • Class.forName() 执行的是类加载过程的 连接和初始化 。
  • ClassLoader.loadClass() 执行的只是类加载过程中的第一步,加载过程。

JVM 调优和参数

11.堆参数
在这里插入图片描述


12.回收器参数

在这里插入图片描述


13.回收器常用组合
在这里插入图片描述


【Java 面试那点事】

这里致力于分享 Java 面试路上的各种知识,无论是技术还是经验,你需要的这里都有!

这里可以让你【快速了解 Java 相关知识】,并且【短时间在面试方面有跨越式提升】

面试路上,你不孤单!
在这里插入图片描述

发布了147 篇原创文章 · 获赞 835 · 访问量 27万+

猜你喜欢

转载自blog.csdn.net/qq_33945246/article/details/103933516