1.简述java垃圾回收机制
java中是虚拟机自行执行垃圾回收。在JVM中,有一个垃圾回收线程,是低优先级的。在虚拟机空闲或者当前内存空间不足的时候,扫描没有被引用的对象,并将其添加到要回收的集合中,进行垃圾回收。
2.GC是什么?为什么要GC
GC是垃圾回收的意思。java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的。垃圾回收机制有效的防止了内存泄漏,可以有效的使用内存。
垃圾回收器通常作为一个单独的低级别的线程运行,在不可预知的情况下对内存堆中已死亡的或者很长时间没有用过的对象进行清理和回收。但不能实时的对某个对象或者所有对象调用垃圾回收器进行垃圾回收。
3.java中都有哪些引用类型
强引用:发生GC时不会被回收
软引用:有用但不是必须的对象,在发生内存溢出之前回收
弱引用:有用但不是必须的对象,下次GC时被回收
虚引用:无法通过虚引用获得对象,用途是在gc时返回的一个通知。
4.怎么判断对象是否被回收
引用计数法:有对象引用时,计数器+1;引用被释放时,计数器-1。不能解决循环引用的问题
可达性分析:GC root 开始向下搜索,搜索的路径被称为引用链。
GCroot:
1>虚拟机栈(局部变量表)中引用的对象
2>方法区中类静态属性引用的对象
3>方法区中常量引用的对象
4>本地方法栈中JNI引用的对象(程序中native本地方法引用的对象)
5.JVM中的永久代中会发生垃圾回收吗?
垃圾回收不会发生在永久代中。如果永久代满了,或者超过了临界值,会发生fullGC。正确的永久代大小对避免FullGC是非常重要的原因。一般堆的分类比是8:1:1。