对象成为垃圾的条件
1.对于非线程对象来说 当所有的活动线程都不可能访问到这对象时,变成垃圾
2.对于线程对象来说 除了上一条之外,还要求吃线程本身已经死亡或者还处于新建状态,才是垃圾,才能被回收
千万不要片面的认为“没有引用指向的对象就是垃圾,有引用指向的就不是垃圾”是对的
孤岛垃圾就是个反驳的例子
class Island{
public Island brother;
String name;
public Island(){
}
public Island(String name){
this.name = name;
}
public void finalize(){
System.out.println(this.name + "对象成为垃圾,被收集");
}
public void testIsland(){
Island i1 = new Island("孤岛中的 O1");
Island i2 = new Island("孤岛中的 O2");
Island i3 = new Island("孤岛中的 O3");
i1.brother = i2;
i2.brother = i3;
i3.brother = i1;
i1 = null;
i2 = null;
i3 = null;
// 这样 三个对象循环指向 但他们形成了孤岛 所以已经成为垃圾
System.gc();//可以看到 三个对象很快被收集,但程序过了10s才结束
try{
Thread.sleep(10000);
}catch(Exception e){
e.printStackTrace();
}
}
}
但线程上的孤岛又不点不同了
class RubbishThread extends Thread{
RubbishThread brother;
String rtName;
public RubbishThread(){
}
public RubbishThread(String name){
this.rtName = name;
}
public void run(){
System.out.println(this.rtName + "线程启动了");
try{
Thread.sleep(1000);
}catch(Exception e){
e.printStackTrace();
}
System.out.println(this.rtName + "线程结束");
}
public void finalize(){
System.out.println(this.rtName + "成为垃圾被收集");
}
public static void testThreadIsland(){
RubbishThread rt1 = new RubbishThread("孤岛中的rt1线程");
RubbishThread rt2 = new RubbishThread("孤岛中的rt2线程");
RubbishThread rt3 = new RubbishThread("孤岛中的rt3线程");
rt1.brother = rt2;
rt2.brother = rt3;
rt3.brother = rt1;
rt1.start();
rt1 = null;
rt2 = null;
rt3 = null;
System.out.println("--------对无引用但活着的线程进行垃圾收集-------------");
System.gc();
try{
Thread.sleep(2000);//主线程休眠2s
}catch(Exception e){
e.printStackTrace();
}
System.out.println("---------对无引用死亡的线程进行垃圾收集--------------");
System.gc();
try{
Thread.sleep(1000);//主线程休眠1s
}catch(Exception e){
e.printStackTrace();
}
}
// 执行结果
// ---------对无引用但活着的线程进行垃圾收集--------------
// 孤岛中的rt1线程线程启动了
// 孤岛中的rt1线程线程结束
// ---------对无引用死亡的线程进行垃圾收集--------------
// 孤岛中的rt3线程成为垃圾被收集
// 孤岛中的rt2线程成为垃圾被收集
// 孤岛中的rt1线程成为垃圾被收集
//解释:执行第一次垃圾收集由于线程rt1还没有死亡,虽然形成了孤岛垃圾
// 但其中的对象可以被活动的进程访问到,整个孤岛不是垃圾
// 执行第二次垃圾收集时rt1已经死亡 整个孤岛成为垃圾,3个线程都被收集
// 没有启动的线程与死亡的线程一样,只要满足普通对象成为垃圾的条件就是垃圾
}
分享到:
相关推荐
而在这棵树之外的孤岛对象或者由于循环引用形成的孤岛对象集合被标记为“无效”,垃圾收集器会在合适的时间销毁这些无效对象,完成一次垃圾收集。而垃圾收集器是运行在虚拟机中的一个低优先级的守护进程,为了不影响...
孤岛效应正向偏移法仿真图及s函数 可以用,能仿真
能实现孤岛检测,功能良好,能具体完成项目的内容,十分梁海阿松大
光伏并网逆变器 储能变流器PCSAFD孤岛检测仿真,matlab源码
单相光伏并网发电系统电压前馈控制和有源频率偏移(AFD)孤岛检测法的simulink仿真模型AFD孤岛检测方法采用S函数给出
根据孤岛煤柱上覆岩层能否形成离层结构,提出孤岛煤柱支承压力的"有源"和"无源"计算模型,以应力准则和挠度准则判定孤岛煤柱上覆岩层离层位置,进而求得孤岛煤柱所承受地层重力并定义孤岛煤柱整体冲击失稳率,最后结合...
能实现孤岛检测,功能良好,能具体完成项目的内容,十分梁海阿松大
主动孤岛检测,主动孤岛检测方法,matlab源码.zip
针对光伏电站独立防孤岛保护装置现有的被动式孤岛检测方法
并网光伏发电系统的孤岛效应及反孤岛策略PPT课件.pptx
基于Matlab的微电网孤岛运行仿真研究.pdf
基于双重判据的微电网快速孤岛检测技术
孤岛疾病问题的探讨.doc
教育网络系统之间的兼容性差,导致一些高校教育资源网点被孤立为“信息孤岛”。传统的高校教育资源优化方法不能有效去除信息孤岛问题,造成高校教育资源分配不均衡,导致高校教育资源利用率低的问题。为解决这一问题...
防孤岛保护是对分布式光伏电站是有着要求的。即当电网出现电压高、电压低、频率高、频率低故障时,光伏并网开关及时跳闸。当电网恢复供电并且电压和频率达到允许值时,并网开关要自动合闸。这样的目的是在保证国家...
介绍了当前流行的微电网孤岛检测原理和具体实施方法。
为了改善孤岛工作面的应力集中现象,以正利煤业14-1102工作面为研究对象,对其孤岛工作面进行了FLAC3D数值模拟分析。分析结果显示,当形成孤岛工作面之后,采空区侧形成了较为明显的应力集中现象;通过模拟工作面留煤柱沿...
孤岛模式下的并联线路下垂控制仿真,可以实现有功无功的能量均分,自动配置。
通过理论分析、现场矿压观测等手段初步得到3下510运输巷错开煤柱的距离大于5 m,并根据冲击地压防治原则和利于资源回收原则,最终确定了3下510运输巷位置(错开煤柱的距离约7 m)。现场实施效果良好,并且验证了孤岛煤柱...
基于光伏并网发电系统的孤岛效应仿真检测模型