`
wakin2003
  • 浏览: 67439 次
  • 性别: Icon_minigender_1
  • 来自: 长春
社区版块
存档分类
最新评论

Java对象如何杀死自己?

阅读更多

在java一个对象如何才能撤销自己呢?就是标注上自己可以被垃圾收集器回收。

写了如下一个测试类

public class Test {

	public static void main(String[] args) {
		TestGC t1 = new TestGC();
		t1.destroyClass(t1);
		//t1 = null;
		System.gc();
	}

}

class TestGC {

	public void destroyClass(TestGC tg){
		tg = null;
	}
	/* (non-Javadoc)
	 * @see java.lang.Object#finalize()
	 */
	@Override
	protected void finalize() throws Throwable {		
		System.out.println("GC is start");
		super.finalize();
	}	
	
}

 结果无输出,证明finalize方法没有被调用。

但是把t1 = null;的注释去掉后再运行。

结果输出: "GC is start"

 

问题解决了,还是自己对java的内存机制理解的不到位.

t1.destory(t1),是把2个指向TestGC对象的引用(t1和tg)其中的tg赋为null了,但是目前还有一个t1引用指向这个对象,所以jvm并不会调用gc。

而t1 = null 是把唯一指向TestGC对象的那个引用赋为null了。之后没有任何引用指向这个对象了,所以jvm会调用gc来回收这块内存。

   

分享到:
评论

相关推荐

    2013java面试题搜集

    27、linux杀死进程的方式: 28、linux中查看当前线程的方式: 29、说出jdbc的具体实现步骤: 30、 你知道事务吗,说一下事务级别: 31、. js中如何获得doctment的对象的? 32、 谈谈你来我们公司应聘...

    java多线程下载

    4.为了杀死线程还能继续下载的情况下,从本地文件上读取已经下载文件的开始位置 a)创建保存记录结束位置的文件 b)读取文件 c)将流转换为字符 d)获取记录位置 e)把记录位置赋给开始位置 5.当你的n个线程都下载完毕的...

    java版斗地主源码-HuluBattle:葫芦大战

    一对一战斗后,进行以阵营为单位的厮杀,活着的成员一同合作杀死对方阵营。胜负的判断不依据存活的人数而依据成员的总武力值。最后武力值高的阵营胜利,失败的一方全员死亡。 界面 开始界面 说明文档 游戏过程 选择...

    TextGame:我的测试游戏,用java编写

    文字游戏我的测试游戏,由java编写。 回顾java面向对象的开发,有一些设计模式。 并且地图生成算法是深度优先的。怎么玩只需运行 app class ,然后输入诸如“m ... 可以移动和击杀怪物,当然,如果你的血不够,你会死的

    基于Socket套接字消息推送系统

    所以demo重点介绍客户端的一些代码,包括Socket的TCP长连接及发消息,Service如何不被轻易杀死,通过aidl实现界面实时与Service的通信,可以在界面上控制Socket的连接与断开以及发消息,并采用了Parcelable对象实现...

    Chess:Java国际象棋学习游戏

    当任一队的国王被杀死时,棋子将不再移动,必须重新开始游戏才能再次进行。 编码 此存储库是来自FORK。 原版已经实现了图形界面,只对国际象棋的玩法进行了改动。 添加了什么 计件类在原始版本中,碎片只是包含图像...

    MySQL 5.1中文手冊

    8.15. mysql_zap:杀死符合某一模式的进程 9. 语言结构 9.1. 文字值 9.1.1. 字符串 9.1.2. 数值 9.1.3. 十六进制值 9.1.4. 布尔值 9.1.5. 位字段值 9.1.6. NULL值 9.2. 数据库、表、索引、列和别名 9.2.1. 识别符...

    eclipse ide 变得如此热门

    拥挤的工具条,臃肿的菜单,以及配置对话框都让我想起了拉比林特斯迷宫(译者注:minotau’s labyrinth,希腊神户中的人身牛头怪,住在labyrinth迷宫中,吃人们供奉的童男童女,最后被theseus杀死)(尽管配置对话框...

    Trabalho3-POO:为面向对象编程学科的工作 3 创建的游戏源代码

    在两队之间的回合战斗之前,每个角色面对两个生物,进行攻击直到杀死它们。 根据击杀所需的攻击次数,角色获得成比例的 XP。 “upar”字符的每个操作都发生在一个线程上,即它们都同时、并发地执行此操作。 为...

    新版Android开发教程.rar

    � Google 提供了一套 Java 核心包 (J2SE 5,J2SE 6) 的有限子集,尚不承诺遵守 Java 任何 Java 规范 , 可能会造 成J ava 阵营的进一步分裂。 � 现有应用完善度不太够,需要的开发工作量较大。--------------------...

    Predojo:Predojo-阿米尔

    2013/4/23 3:34:22 PM-新比赛11348965已开始2013/4/23下午3:36:04-罗马人使用M16杀死了尼克23/04/2013 15:36:33-被DROWN杀死了Nick 2013/4/23 3:39:22 PM-比赛11348965已结束 预期结果 设置每场比赛的排名,以及每...

    pre-dojo:候选人selection选的初始项目结构

    问题给定以下第一人称射击游戏的日志: 2013/4/23 3:34:22 PM-新比赛11348965已开始2013/4/23下午3:36:04-罗马人使用M16杀死了尼克4/23/2013 3:36:33 PM-被DROWN杀死了Nick 2013/4/23 3:39:22 PM-比赛11348965已结束...

    neo-ogm-embedded-bolt

    要构建和运行: mvn clean install && java -jar target/neo-ogm-embedded-... 项目运行后,它将一直闲置直到被杀死( ctrl + c ),并且可以通过将Bolt URI设置为localhost:17688 ,由Neo4j浏览器客户端连接至该项目。

    MYSQL中文手册

    8.15. mysql_zap:杀死符合某一模式的进程 9. 语言结构 9.1. 文字值 9.1.1. 字符串 9.1.2. 数值 9.1.3. 十六进制值 9.1.4. 布尔值 9.1.5. 位字段值 9.1.6. NULL值 9.2. 数据库、表、索引、列和别名 9.2.1....

    newbould-game:由Christine Hu和Gregory Zhu为CSC505创建的桌面游戏

    玩家使用箭头键移动Newbould,然后按空格键从Newbould的长号中拍摄音符,该长号会在接触时杀死大多数熊。 我们使用JavaFX编写游戏代码,并使用Quadtree来有效地检测弹丸,熊和Newbould的碰撞。 为了实现四叉树,...

    dungeons:地下城

    ####不同类型的房间出口:*玩家希望时可以看到并可以采取的常规出口*隐藏的出口,只有在操作(例如按下按钮)后才可见*始终可见的锁定出口但必须解锁:例如用钥匙或杀死怪物后) ####玩家携带的不同物品:*钥匙*...

    SimpleDynamo:这是 Amazon Dynamo 样式键值存储的简化版本

    我们不会通过杀死整个模拟器实例来模拟失败。 所有的失败都是暂时的; 您可以假设故障节点将很快恢复,即它不会在运行期间永久不可用。 当一个节点恢复时,它应该复制它在故障期间错过的所有对象写入。 这可以通过...

    项目5:CSC 203 2019年Spring的最终项目

    一个外星人已经腐败并且可以杀死莫蒂,如果发生这种情况,您就会输掉,除非您先获胜,否则莫蒂会死。 其余的外星人都逃离了瑞克。 演示版 .mp4文件包含在回购中 目的 通过将游戏设计抽象为可管理的部分来演示面向...

    网管教程 从入门到精通软件篇.txt

    网管教程 从入门到精通软件篇 ★一。★详细的xp修复控制台命令...JAVA:Java源文件 JFF,JFIF,JIF:JPEG文件 JPE,JPEG,JPG:JPEG图形文件 JS:javascript源文件 JSP:HTML网页,其中包含有对一个Java servlet...

    mysql官方中文参考手册

    8.15. mysql_zap:杀死符合某一模式的进程 9. 语言结构 9.1. 文字值 9.1.1. 字符串 9.1.2. 数值 9.1.3. 十六进制值 9.1.4. 布尔值 9.1.5. 位字段值 9.1.6. NULL值 9.2. 数据库、表、索引、列和别名 9.2.1. 识别符...

Global site tag (gtag.js) - Google Analytics