这是我参与更文挑战的第2天,活动详情查看: 更文挑战
我们为什么要了解垃圾回收机制呢?
如果你已经学过C/C++等传统的编程语言,你会知道回收已经分配的内存是如何的痛苦,因为你不知道 什么时候需要回收内存。
而且,更痛苦的是,如果你不及时回收内存,就会导致系统的运行速度下降,甚至导致系统瘫痪,这种现象称为内存泄漏。
这类传统的编程语言的显示垃圾回收机制主要有一下两个缺点:
1.程序忘记及时回收垃圾造成内存泄漏,使系统的性能下降。
2.程序错误地回收系统核心内存,导致系统崩溃。
java语言的垃圾回收机制的一个显著的优点就是不需要程序员手动进行垃圾回收,JAVA虚拟机会自动帮你进行垃圾回收!(是不是很爽)
说了这么多那什么是垃圾回收呢?
垃圾回收是一种动态的存储管理技术,它自动释放不再被程序引用的对象,按照特定的垃圾回收算法来实现内存资源的自动回收功能。
事实上,垃圾回收除了释放不再使用的对象,也会整理碎片内存。由于创建对象和垃圾回收器释放丢弃对象所占用的内空间外,内存会出现碎片,而java的垃圾回收机制会把这些碎片进行整理到堆的另一侧,将整理出来的内存分配给新的对象。
但是java垃圾回收机制也有缺点,它会影响系统的性能,因为java虚拟机必须要跟踪程序中有用的对象来,才可以确定对象什么时候是无用的,然后进行回收。
最后一点是java程序员不能强制进行垃圾回收,你可以将对象的引用设置为null,暗示java虚拟机这是个无用的对象,还可以调用System.gc()来建议系统进行垃圾回收,但是系统什么时候进行垃圾回收就不是java程序员能控制的了(这是考点哦!)
所以编写java的一个原则就是:当你不再需要这个对象时就不要再保持这个对象的引用,否则就会导致内存越来越少,造成系统的性能越来越低。
注:本文的部分定义来自于李刚老师的《疯狂java讲义》
以上内容如有不对,欢迎大家评论指正。