java 的GC是如何辨别“对象不会在被引用的”?
如题~
java虚拟机的那档子事,只是肤浅的知道一些
jvm通过垃圾收集算法来检测出垃圾对象,并回收它的内存空间
垃圾检测通常是通过建立一个跟对象的集合,并检查从这些跟对象开始的可触及性来实现的。如果正在执行的程序可以访问到的根对象和某个对象之间存在引用路径,那么这个对象就是可触及的。
区分活的对象和垃圾的基本方法是引用计数和跟踪,引用计数收集器为堆中的每一个对象保存一个计数,该计数记录每个对象的引用次数,当有新的引用的时候计数加一,当计数为0的时候当作垃圾收回,就是LZ说的不会再被引用。
跟踪垃圾收集器追踪从根节点开始的对象引用图,当追踪结束后,未被标记的对象就是不可达的,即也不会再被引用。
对象成为垃圾的条件
对于非线程对象来说 当所有的活动线程都不可能访问到这对象时,变身垃圾
对于线程对象来说 除了上一条之外,还要求吃线程本身已经死亡或者还处于新建状态
楼主可能不太了解 垃圾回收 这个本人暑假刚学 Java也不太了解就把自己知道的说一说
LZ 知道什么是 多个对象的孤岛情况吗
知道的话就不会认为 “没有引用指向的对象就是垃圾,有引用指向的就不是垃圾” 这句号称是被误解很多的
其实不然 有引用的一样可能是垃圾 关键看这些对象能不能被活动的线程访问到
例如
Java code:
class Island{
public Island brother;
}
//运行下面代码片段
Island il = new Island();
Island i2 = new Island();
Island i3 = new Island();
il.brother = i
相关问答:
我目前在本地的linux上写了一个swing的界面,想通过这个界面来控制其它电脑的linux重启。
我知道用Runtime.getRuntime().exec("shutdown -r");可以控制本机Linux重启,但是怎么控制远程的linux重启呢? ......
jsp学习前要了解那些知识?学了java了。不知道还要学习些什么知识才可以很好的学习jsp
HTML、JavaScript
直接学就可以了,遇到不会就现学就行。
Html css servlet
去了解浏览器与web服务器的简单交 ......
现在遇到这样一个问题:
在java 中编写swing程序, 添加按钮jbServerStart,目的是当点击jbServerStart时,程序会自动创建两个与其他终端通信的对象,代码如下:
private Container createButtonPane ......
Java code:
public static void main(String[] args)throws Exception {
String json="{\"installer_id\":\"00000003\",\"installer_name\":\"王五\& ......