首页 > 编程语言 >JAVA面试中,面试官最爱问的问题。

JAVA面试中,面试官最爱问的问题。

时间:2024-06-17 18:00:52浏览次数:23  
标签:面试官 JAVA 标记 对象 回收 GC 内存 最爱问 垃圾

解释Java中的垃圾回收机制。

Java中的垃圾回收(Garbage Collection, GC)机制是指Java虚拟机(JVM)自动管理内存的过程,负责回收不再使用的对象所占用的内存空间,以避免内存泄漏和提升程序的内存利用效率。垃圾回收机制的核心是自动检测哪些对象不再被引用,然后释放它们所占用的内存。

### 垃圾回收机制的工作原理

1. **根集合(Root Set)**:垃圾回收从根集合开始。根集合包括所有的静态变量、活动线程栈中的局部变量和JNI引用等。

2. **引用计数法(Reference Counting)**:
   - 每个对象维护一个引用计数器,当有一个引用指向它时,计数器加1,当引用被移除时,计数器减1。
   - 当计数器为0时,表示对象可以被回收。
   - 这种方法无法处理循环引用问题,因此在Java中较少使用。

3. **可达性分析法(Reachability Analysis)**:
   - 通过根集合(Root Set)开始遍历对象图,所有能被根集合直接或间接引用的对象是可达的,不可达的对象即为垃圾,可以被回收。
   - Java使用这种方法来确定对象是否可以被回收。

4. **标记-清除算法(Mark-and-Sweep)**:
   - **标记阶段**:从根集合开始,标记所有可达的对象。
   - **清除阶段**:遍历整个堆,将所有未标记的对象回收。
   - 缺点是可能会导致内存碎片。

5. **复制算法(Copying)**:
   - 将对象分为两个区域:From空间和To空间。
   - 活动对象从From空间复制到To空间,然后清空From空间。
   - 这种方法适用于年轻代(Young Generation),能够有效地减少内存碎片。

6. **标记-整理算法(Mark-Compact)**:
   - **标记阶段**:标记所有可达的对象。
   - **整理阶段**:将所有存活的对象移动到堆的一端,然后清理掉端边界外的内存。
   - 适用于老年代(Old Generation),能够有效减少内存碎片。

### 垃圾回收器

JVM提供了多种垃圾回收器,每种都有不同的特点和适用场景:

1. **Serial GC**:使用单线程执行垃圾回收,适用于单处理器机器或小型应用。
2. **Parallel GC**:使用多线程执行垃圾回收,适用于多处理器机器,能提高吞吐量。
3. **CMS(Concurrent Mark-Sweep)GC**:主要目标是减少垃圾回收的暂停时间,适用于响应时间敏感的应用。
4. **G1(Garbage-First)GC**:适用于大内存和多处理器机器,能均衡地回收垃圾,减少停顿时间。

### 垃圾回收过程

以G1 GC为例,垃圾回收过程如下:

1. **初始标记**:标记从根集合直接可达的对象,这个阶段会暂停所有应用线程。
2. **并发标记**:从根集合开始并发地标记可达的对象,不需要暂停应用线程。
3. **最终标记**:在并发标记阶段结束后,完成剩余的标记工作,这个阶段会短暂地暂停应用线程。
4. **筛选和清理**:根据标记结果,选择回收收益最大的区域进行回收,这个阶段会暂停应用线程。

### 示例

以下是一个简单示例,展示如何使用JVM选项来指定垃圾回收器:

```sh
# 使用Serial GC
java -XX:+UseSerialGC MyApplication

# 使用Parallel GC
java -XX:+UseParallelGC MyApplication

# 使用CMS GC
java -XX:+UseConcMarkSweepGC MyApplication

# 使用G1 GC
java -XX:+UseG1GC MyApplication
```

### 总结

- **自动内存管理**:Java的垃圾回收机制自动管理内存,避免手动释放内存的复杂性。
- **可达性分析**:通过可达性分析确定哪些对象可以被回收。
- **多种算法和回收器**:不同的垃圾回收算法和回收器适用于不同的应用场景。
- **配置灵活**:可以通过JVM选项配置不同的垃圾回收器,以优化应用性能。

垃圾回收机制是Java平台的重要特性之一,通过自动化内存管理,提高了程序的可靠性和开发效率。

标签:面试官,JAVA,标记,对象,回收,GC,内存,最爱问,垃圾
From: https://blog.csdn.net/heye0910032/article/details/139664683

相关文章

  • JAVA面试中,面试官最爱问的问题。
    什么是JVM,JRE和JDK?JVM(JavaVirtualMachine)、JRE(JavaRuntimeEnvironment)和JDK(JavaDevelopmentKit)是Java开发和运行环境中的三个重要组件。它们分别扮演不同的角色,共同支持Java程序的开发和运行。###JVM(JavaVirtualMachine)JVM是Java虚拟机,它是Java程序的运行时环境。J......
  • Java数组 详解(初始化 格式 索引 地址值 遍历 …)
    数组什么是数组?数组指的是一种容器可以用来存储同种数据类型的多个值小结:数组指的是一种容器可以用来存储同种数据类型的多个值//数组容器在存储数据的时候需要结合隐式转换考虑//例如int类型的数组容器( byte short int )//例如double类型的数组容器......
  • 基于springboot的南门桥社区疫情防疫系统-48138(免费领源码+数据库)可做计算机毕业设计J
    Springboot南门桥社区疫情防疫系统的设计与实现摘 要信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题。针对南门桥社区疫情防疫系统等问题,对南门桥社区......
  • Java JSON组成和解析
    本框架JSON元素组成和分析,JsonElement分三大类型JsonArray,JsonObject,JsonString。JsonArray:数组和Collection子类,指定数组的话,使用ArrayList来add元素,遍历ArrayList再使用Array.newInstance生成数组并添加元素即可.JsonObject:带有泛型的封装类,给带有泛型的字段赋......
  • java构造器
    构造器分为无参构造与有参构造每一个类都有一个隐藏起来的无参构造这个午餐构造没有返回值和返回类型,且方法名必须与类名相同,且必须是public1.使用new关键字必须要有构造器2.构造器用来初始化alt+insert快捷键快速创建构造器当有有参构造,却想调用无参构造时,必须有一个显示......
  • Java入门:02.java中数据的类型转换
    上两篇文章,大家了解到了常量与变量。以此为基础,我们引入了数据和数据类型的概念,今天我就和大家一起来更加深入的了解一下数据之间的类型转换吧。还是这张图,我们可以看到,各个类型之间,每个关键字所占用得内容空间大小也是各不相同的,而在Java中,一些数据类型是可以进行转换的。......
  • Linux上java-jar Spingboot项目
    百度的,后面再补一个Linux文档操作手册,是不是很大胆?准备工作1、首先得有两个软件Xftp(用来上传文件到)和XShell(连接服务器执行命令)2、Linux上有JDK(怎么安装可以转到Linux安装JDK流程)3、项目的JAR包项目jar包导jar<build><plugins><plugin><groupId......
  • Javaweb实现简易记事簿 jdbc实现Java连接数据库
    //相关代码packageUserAct;importjakarta.servlet.;importjakarta.servlet.annotation.WebServlet;importjakarta.servlet.http.;importjava.io.;importjava.sql.;//登出@WebServlet("/UserAct.DeleteEvent")publicclassDeleteEventimplementsServlet{......
  • [javascript]何为变量提升?
    【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权)https://www.cnblogs.com/cnb-yuchen/p/18252500出自【进步*于辰的博客】关于编译与解释,详述可查阅博文《[Java]知识点》中的【编译与解释】一栏。参考笔记二,P43.3、P46.1、P9.3。目录1、什么是“变量提升?2、va......
  • Java速成笔记 2024.6.17版
    变量:可以变化的容器不同变量可以存储不同类型的值变量声明方法:变量类型变量名=初始值;E.G.inta=1;变量类型:整型:intlong浮点数:floatdouble布尔:boolean字符串:String字符:char变量命名注意事项:不能重名不能以数字开头常量:关键字:final语法:finalfl......