14.1 什么是垃圾(Garbage)
垃圾是指在运行程序中没有任何指针指向的对象,这个对象就是需要被回收的垃圾
如果不及时对内存中的垃圾进行清理,那么这些垃圾对象所占的内存空间会一直保留到应用程序结束,被保留的空间无法被其他对象使用,可能导致内存溢出
大厂面试题
蚂蚁金服:
知道哪几种垃圾回收器,各自的优缺点,重点讲一下cms和g1
JVM GC算法都有哪些,目前JDK版本采用什么回收算法
G1回收器下回收过程
GC是什么,为什么会有GC
GC的两种判定方法,CMS收集器和G1收集器的特点
百度:
GC算法,分代回收
垃圾收集策略和算法
天猫:
JVM GC原理,JVM怎么回收内存
CMS特点,垃圾回收算法有哪些,各自的优缺点
滴滴:
java垃圾回收器都有哪些,G1的应用场景,平时如何搭配使用垃圾回收器的
阿里:
什么情况下触发垃圾回收?
如何选择合理的垃圾收集算法
JVM有哪三种垃圾回收器
字节:
system.gc()和runtime.gc()会做什么事情
GC Roots有哪些
CMS回收停顿了几次,为什么要停顿两次
14.2 早期垃圾回收
在早期C/C++早期,垃圾回收基本上是手工进行的。开发人员使用new关键字进行内存申请,并使用delete关键字进行内存释放
MibBridge *pBridge= new cmBaseGroupBridge();
//如果注册失败,使用Delete释放该对象所占内存区域
if(pBridge->Register(kDestroy)!=NO_ERROR)
delete pBridge;
有了垃圾回收机制后,代码变为:
MibBridge *pBridge=new cmBaseGroupBridge();
pBridge->Register(kDestroy);
14.3 Java垃圾回收机制
优点
自动内存管理,无需开发人员手动参与内存的分配和回收,降低内存泄漏和内存溢出的风险
oracle关于垃圾回收的介绍https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/toc.html
担忧
黑匣子,弱化了Java开发人员在程序出现内存溢出时定位问题和解决问题的能力
我们必须对这些“自动化”的技术实施必要的监控和调节
GC主要作用在方法区和堆区
垃圾回收器可以对年轻代回收,也可以对老年代回收,甚至时全堆和方法区的回收,Java堆时垃圾收集器的工作重点
- 频繁收集Young区
- 较少收集Old区
- 基本不动Perm区(元空间)