据小编所知,很多人都在了解Java的GC机制,甚至够买了很多这种类型的书籍,也并没有弄明白,今天小编讲的则是对Java的GC机制进行了总结,希望能帮助大家,接下来让我们一起浏览的进行大脑记忆吧。
1.finalize() 用来回收非new申请的内存区域。GC只知道回收由new申请的内存空间。(JAVA并不是只是对new可以申请空间。因为JAVA提供了对C和C++的支持,当使用类似C中的申请空间方法的时候,这些空间需要由finalize进行释放。这种申请空间方法叫native method)。finalize()不应当被显示的调用。在GC准备释放资源的时候,都会先去调用finalize(),并且只有在下一次GC发生时候,才会真正的释放资源。finalize()使你可以在垃圾回收时,做一些重要的清理工作。有以下需要注意的点:
(1)对象可能并为没有被垃圾回收;
(2)GC并不是析构
(3)GC只负责清理内存的功能
2.自适应的垃圾回收机制。包含了两种方法:停止-拷贝(stop-copy)和标记-清除(mark-sweep)。
停止-拷贝将堆中的活动的对象拷贝到新的堆中,垃圾被留在老的堆中。此时,将新堆中的活动对象“紧凑”,使其空间连续的挨在一起。
标记-清除的方式则是将整个栈和静态存储空间扫描一遍,当找到存在活动的引用的时候,就标记它,知道扫描完所有的栈和静态存储空间,则对没有标记的对象进行释放。
当对象变得稳定的时候,停止-拷贝就会变得低效。JVM中内存按照块(block)来分配。当创建一个大的对象的时候,它就会独自得到一块内存。严格的停止-拷贝需要将久堆中的东西拷贝到新的堆中,这会动用大量的内存。正常情况下,完全的清扫会被周期性的执行,其中大对象不会被拷贝。JVM会见识GC的效率。当GC由于对象长期存活而变得效率低下的时候,JVM就会切换到标记-清除模式。同样的,JVM也会类似的监视标记-清除的执行。如果由于堆中空间变得琐碎时,则又会切换回停止-拷贝模式来整合琐碎的内存。这就是所说的“自适应”。
最后,什么是GC机制?
GC是垃圾收集的含义,内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收,会导致程序或系统的不稳定甚至崩溃的难题,Java提供的GC功能是可以自动监测对象,是否超过作用域从而达到自动回收内存的一个目的,Java语言未提供释放已分配内存的显示操作方法。Java程序员不需要担心内存管理,因为垃圾收集器会自动进行管理。要请求垃圾收集,可以使用一下的方法:System.gc() 或者Runtime.getRuntime().gc() ,但JVM可以屏蔽掉显示的垃圾回收调用。 垃圾回收可以有效的防止内存泄露的问题,有效的使用可以使用的内存。垃圾回收器通常是作为一个单独的低优先级的线程运行,不可预知的情况下对内存堆中已经死亡的或者长时间没有使用的对象进行清除和回收,程序员不能实时的调用垃圾回收器对某个对象或所有对象进行垃圾回收。在Java诞生初期,垃圾回收是Java最大的亮点之一,因为服务器端的编程需要有效的防止内存泄露问题,现在Java的垃圾回收机制已经成为被诟病的东西。移动智能终端用户通常觉得iOS的系统要比Android系统有更好的用户体验,其中一个深层次的原因就在于Android系统中垃圾回收的不可预知性。
以上就是今天小编对Java的GC机制进行的总结,希望小编所讲的java一些知识问答对大家能够帮助,想要了解更多,请继续关注本网站吧。