54.垃圾回收概述
GC
很重要,大厂面试都会问。下面是面试的一些题目。
1.什么是垃圾?为什么需要GC?
1.没有任何指针指向的对象就是垃圾。
2.垃圾需要及时被清理,如果一直不对其进行清理,这些垃圾对象所占用的空间和会一直保留到应用程序结束,被保留的空间无法被其他对象使用,甚至导致内存溢出。
3.为什么需要进行垃圾回收?
a) 如果不进行垃圾回收,内存迟早要被消耗完。
b) 垃圾回收除了释放没有用的对象,还可以清除内存里的记录碎片,碎片整理将堆内存已到堆的一端,以便JVM将整理出的内存分配给新的对象
c)随着应用程序越来越复杂,用户越来越多,没有GC就不能保证应用程序的正常进行。
2.了解早期的垃圾回收机制
1.早期c/C++
的垃圾回收是开发人员自己进行控制的。使用new
关键字申请内存,使用delete
关键字进行内存释放。
2.这种方式给开发人员带来了申请释放内存的负担。
3.有时候开发人员会忘记使用delete
释放内存,导致内存泄漏
4.现在,除了Java
以外,许多语言都使用了自动垃圾回收机制,是未来的发展趋势。
3.Java
内存回收机制
1.好处:Java自动管理内存,可以降低内存泄漏和内存溢出的风险。程序员可以更加专注于业务开发。
2.弊端:会弱化开发人员在程序出现内存溢出时定位问题和解决问题的能力。
3.垃圾回收可以对年轻代、老年代甚至是全堆和方法区进行回收。
堆区是垃圾回收的重点。
从次数上讲,频繁搜集Young
区;较少收集Old
区;基本不动Perm
区(或元空间)