程序计数器、虚拟机栈、本地方法栈三个区域随线程而生,随线程而灭。栈中的栈帧随着方法的进入和退出进行出栈和入栈。
java堆和方法区不一样,只有程序运行期间才能知道创建了哪些对象,这些对象的分配和回收是动态的。
对象已死的判断方法:
1.引用计数器算法:给对象添加一个引用计数器,当引用时计数器加1 ,引用失效时减1
缺点:难以解决对象之间循环引用问题。
2.根搜索算法(java采用)
在根搜索算法中不可达的对象不一定必死,宣告一个对象死亡要经过两次标记:
1.第一次标记并进行执行finalize方法
2.如果在finalize方法成功拯救自己,第二次标记时将它移出“即将回收”的集合
来看下面一段代码:
public class FinalizeGC {
public static FinalizeGC SAVE_HOOK=null;
public void isAlive(){
System.out.println("yes, i am still alive:");
}
@Override
protected void finalize() throws Throwable{
super.finalize();
System.out.println("finalize method executed!");
FinalizeGC.SAVE_HOOK=this;
}
public static void main(String[] args) throws InterruptedException
{
SAVE_HOOK=new FinalizeGC();
SAVE_HOOK=null;
System.gc();
Thread.sleep(500);//暂停500ms等待执行finalize方法
if(SAVE_HOOK!=null){
SAVE_HOOK.isAlive();
}else{
System.out.println("i am dead!");
}
//自救失败 ,代码和上面一样
//原因:任何一个对象的finalize方法都只会被系统调用一次,
//如果对象面临下一次回收,它的finalize方法不会被再次执行
SAVE_HOOK=null;
System.gc();
Thread.sleep(500);
if(SAVE_HOOK!=null){
SAVE_HOOK.isAlive();
}else{
System.out.println("i am dead!");
}
}
}
分享到:
相关推荐
Java垃圾收集器使用小诀窍,告诉你如何写出高效的Java程序。
Java垃圾收集器
主要整理内容为:分析了垃圾收集的算法和JDK1.7中提供的7款垃圾收集器的特点以及运作原理。以及内存分配策略
如何使用java垃圾收集器
关于Java垃圾收集器的毕业设计论文外文翻译,3000字左右,有英文原文与中文翻译。
Java垃圾收集器参考.pdf
Java垃圾收集器推荐.pdf
Java垃圾收集器知识.pdf
JAVA 垃圾收集器与内存分配策略.rar
计算机专业外文翻译(Java垃圾收集器).doc
Java的垃圾收集器
关于Java垃圾收集器的概述(一)(csdn)————程序
计算机科学与技术-外文翻译-外文文献-英文文献-Java垃圾收集器的工作方式.doc
深入理解JVM垃圾收集算法与垃圾收集器
项目背景分析解决方法总结参考资料在系统的性能测试过程中,当系统的处理能力有某种变化趋势时,除了关于等待队列、执行线程,EJB池以及数据库连接池和StatementCache方面的调优外,还要考虑到Java垃圾收集器...
java 垃圾整理收集 1垃圾收集器如何做 2垃圾的基本要求
介绍了JAVA垃圾收集器与内存分配策略,需要了解的朋友可以参考下
经典的Java虚拟机(垃圾收集器和算法)文档,需要深入了解Java虚拟机的原理的人员可以观看,可以升入了解Java虚拟机(垃圾收集器和算法)
垃圾收集器线程是一种低优先级的线程,在一个Java程序的生命周期中,它只有在内存空闲的时候才有机会运行。它有效地防止了内存渗漏体的出现,并极大可能地节省了宝贵的内存资源。但是,通过Java虚拟机来执行垃圾收集...