java的垃圾回收机制不具备什么特点

Python013

java的垃圾回收机制不具备什么特点,第1张

java的内存垃圾是JRE在后台自动进行回收。通常JRE会在后台创建一个后台线程进行检测和控制,一般在CPU空闲或者内存不足时进行垃圾回收,而程序员无法精确控制垃圾回收的时间和顺序。

垃圾回收器的工作目标是回收无用对象的内存空间,这些空间都是堆内存中的空间。垃圾回收器只能回收内存资源,对于数据库链接,磁盘IO等无能为力

可以为对象赋值为null,使垃圾回收器更快的回收不再使用的对象

垃圾回收具有不可预知性,不同的JVM采用了不同的垃圾回收机制,它可能是定时发生的,可能是CPU空闲时发生的,也有可能是内存出现极限消耗时发生的。程序员可以通关Runtime对象的gc或者 System.gc等方法来建议系统进行垃圾回收,但这些建议仅仅是建议,也无法精确控制系统垃圾回收。

垃圾回收具有精确性:主要体现在垃圾回收机制可以精确标记活着的对象,并且可以精确的定位对象间的引用关系

现在jvm有多种的垃圾回收机制

有的在垃圾回收运行时,就停止应用程序的运行

有的在垃圾回收运行时,允许应用程序的线程运行

有的允许垃圾回收机制多线程运行

垃圾回收器更迭历史

GC的工作原理:引用计数,标记复制"引用计数"是一种简单但速度很慢的垃圾回收技术.所有对象都有一个引用计数器,当有引用连接时计数器加1,当引用离开作用域时或者被置于NULL时,计数器-1,垃圾回收器会在所有包含对象引用的列表上进行遍历,当发现某个对象的引用计数为0时,就释放占用的空间."标记复制"的运行机制,垃圾回收器遍历包含所有引用的列表,当发现存活的对象引用时做上标记,这样当遍历完所有对象引用并做上标记的时候,执行垃圾回收,将没有标记的对象堆空间释放.

垃圾回收机制的优点:Java的垃圾回收机制使得java程序员不用担心内存空间的分配,减少了内存溢出.但同时也牺牲了一定的性能.