首页 > 垃圾回收 > JAVA垃圾回收的工作原理是什么?
2020
02-20

JAVA垃圾回收的工作原理是什么?

  可选中1个或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个问题。

  展开全部Java的垃圾回收机制是Java虚拟机提供的能力,用于在空闲时间以不定时的方式动态回收无任何引用的对象占据的内存空间。

  需要注意的是:垃圾回收回收的是无任何引用的对象占据的内存空间而不是对象本身,很多人回答的含义是回收对象,实际上这是不正确的。

  上面的方法调用时用于显式通知JVM可以进行一次垃圾回收,但真正垃圾回收机制具体在什么时间点开始发生动作这同样是不可预料的,这和抢占式的线程在发生作用时的原理一样。

  程序员只能通过上面的方法建议JVM回收垃圾,但是JVM是否回收,同样是不可预料的。

  停止-复制:先暂停程序(它不属于后台回收模式),然后将所有存活的对象从当前的堆中复制到另一个堆中,没有复制的对象就是垃圾,而被复制到新堆中的对象会紧凑的排列。

  标记-清扫:遍历所有引用,进而找出多有存活的对象。当没找到一个存活的对象,就会给对象标记,这个过程中不会清理任何对象。只有全部标记完成之后,才会清理垃圾。

  在Java虚拟机运行过程中,如果所有对象稳定,垃圾回收器效率降低的话,就会切换到标记-清扫;同意,Java虚拟机会跟踪标记-清扫效果,要是堆空间出现很多碎片,就会切换到”停止-复制“;

  因为C++的话,new之后一定要delete,才能回收内存。而JAVA能够自动回收。

  其实现原理,是每当跑一个JAVA程序,他会启动一个用户不知道的优先级别低的线程来时刻监控你代码中申请的内存。

  java垃圾回收的原理: 垃圾回收器通常是作为一个单独的低级别的线程运行,不可预知的情况下对内存堆中已经死亡的或者长时间没有使用的对象进行清除和回收,程序员不能实时的调用垃圾回收器对某个对象或所有对象进行垃圾回收。

  java垃圾回收的优点:它使得Java程序员在编写程序的时候不再需要考虑内存管理。由于有个垃圾回收机制,Java中的对象不再有作用域的概念,只有对象的引用才有作用域。


本文》有 0 条评论

留下一个回复