JVM虚拟机:你是如何理解Java中的垃圾?

什么是垃圾?

垃圾就是内存中不再被使用到的空间,当一个对象不再被引用后那么久成为垃圾可以回收了,但是线程计算没有引用也可以独立运行,因此线程和对象不同。如果一个对象没有任何一个引用指向它了,那么这个对象就是垃圾。还有一种情况可以产生一堆垃圾:JVM虚拟机:你是如何理解Java中的垃圾?_第1张图片

如上所示,三个对象相互指向,而没有一个引用指向他们,那么他们三个就是垃圾。

如何找到垃圾?

  1. 引用计数RC(不常用):记录某个对象有多少个引用指向了它,当引用数为0的时候,它就成为了垃圾了。但是引用计数无法解决上面的三个对象互相指向的问题,找不到这个垃圾就会发生内存泄漏的问题。
  2. 根可达算法(常用):根据程序找到一些根对象(线程栈的局部变量,静态变量,常量池、JNI指针引用的那些变量),从根对象开始进行遍历,遍历到的就不是垃圾,否则就是垃圾。JVM虚拟机:你是如何理解Java中的垃圾?_第2张图片

主动通知JVM进行垃圾回收?

我们不能主动实时地调用垃圾回收器对某个对象或所有对象进行垃圾回收,我们所能做的就是通过调用System.gc()方法来通知垃圾回收器运行,但是JVM并不会马上保证垃圾回收器运行。

你可能感兴趣的:(深入了解JVM虚拟机,jvm,java,开发语言,虚拟机,垃圾回收)