JAVA面试必备题(垃圾回收专题)

1. java中会存在内存泄漏吗,请简单描述

       所谓内存泄漏就是指一个不再内程序使用的对象或者变量一直被占据在内存中。java中有垃圾回收机制,它可以保证一对象不再被使用的时候,即对象变成了孤儿的时候,对象将自动被垃圾回收器冲内存中清除掉。由于Java使用有向图等等方式进行垃圾回收管理,可以消除引用循环的问题,例如有两个对象,互相吸引,只要它们和根进程不可达的,那么 GC 也是可以回收它们的


2. 能不能自己写个类,也叫 java.lang.String

   可以,但在应用的时候,需要用自己的类加载器去加载,否则,系统的类加载器 永远只是去加载 jre.jar 包中的那个 java.lang.String。由于在 tomcat 的 web 应用 程序中,都是由 webapp 自己的类加载器先自己加载 WEB-INF/classess 目录中 的类,然后才委托上级的类加载器加载,如果我们在 tomcat 的 web 应用程序中 写一个 java.lang.String,这时候 Servlet 程序加载的就是我们自己写的 java.lang.String , 但 是 这 么 干 就 会 出 很 多 潜 在 的 问 题 , 原 来 所 有 用 了 java.lang.String 类的都将出现问题。


3.垃圾回收器的基本原理是什么?垃圾回收器可以马上回 收内存吗?有什么办法主动通知虚拟机进行垃圾回收?

   对于 GC 来说,当程序员创建对象时,GC就开始监控这个对象的地址、大小以及使用情况。通常,GC 采用有向图的记录方式和管理堆(heap)中的所有对象。通过这种方式确定哪些对象是"可达的",哪些对象是"不可达的"。当 GC 确定一些对象为 "不可达" 时, GC 就有责任回收这些内存空间。可以。程序员可以手动执行 System.gc(), 通知 GC 运行,但是 Java 语言规范并不保证 GC 一定会执行。


4. GC 是什么?为什么要有 GC?

   GC 是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问题的地方,忘记或者错误的回收会导致程序或者系统的不稳定甚至崩溃,Java 提供的 GC 功能可以自动监测对象是否超过作用域从而达到自动回收内存的目 的,Java 语言没有提供释放已分配内存的显示操作方法。


5.垃圾回收器的基本原理是什么?垃圾回收器可以马上回 收内存吗?有什么办法主动通知虚拟机进行垃圾回收?

   对于 GC 来说,当程序员创建对象时,GC 就开始监控这个对象的地址、大小以 及使用情况。通常,GC 采用有向图的方式记录和管理堆(heap)中的所有对象。 通过这种方式确定哪些对象是"可达的",哪些对象是"不可达的"。当 GC 确定一 些对象为"不可达"时,GC 就有责任回收这些内存空间。可以。程序员可以手动 执行 System.gc(),通知 GC 运行,但是 Java 语言规范并不保证 GC 一定会执 行。

posted @ 2021-10-18 22:49  hnkjdx_react  阅读(372)  评论(0编辑  收藏  举报