`
wakin2003
  • 浏览: 67987 次
  • 性别: 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来回收这块内存。

   

分享到:
评论

相关推荐

    Java通过进程名称杀进程

    ### Java通过进程名称杀进程 在日常开发与运维过程中,我们常常需要对系统中的特定进程进行管理和控制。本文将详细介绍如何使用Java代码实现基于进程名称的进程终止功能,特别是针对Windows操作系统下的`java-test....

    Java对象的生命周期[参照].pdf

    在大型应用程序中,如WebLogic服务器,不直接杀死进程而是通过特定命令退出,这是因为这样可以让JVM有机会清理资源,确保正在执行的线程得以优雅地结束。 JVM的终止还可以涉及到JVM的异常退出和自然退出,这涉及到...

    java管理windows进程

    - 接受进程名称作为参数,搜索并杀死指定的进程。 - 提供一个命令行界面,允许用户输入进程ID或名称来操作进程。 - 使用Windows API(通过Java的`jna`库)来获取更详细的进程信息,如内存使用、CPU占用等。 - 实现...

    Java堆外内存的使用Java开发Java经验技巧共5页

    - 注意系统级别的内存限制,防止进程被操作系统杀死。 6. **优化实践**: - 对于大数据处理,如Hadoop MapReduce,可以通过调整配置利用堆外内存提高性能。 - 分析性能瓶颈,确定是否适合使用堆外内存,例如在I/...

    java创建进程,及根据命令行、pid删除进程

    在Java中,直接删除进程并不像创建那样简单,因为Java的标准库并不提供直接的API来终止或杀死进程。通常,我们需要通过进程的PID来操作。然而,Java的`Process`对象并没有提供获取PID的方法。因此,如果你想根据PID...

    java 为php写的自增序号服务

    `start.sh`可能包含启动Java应用的命令,如`java -jar sequence.jar`,而`stop.sh`则可能用于发送停止信号,或者通过查找Java进程并杀死它来关闭服务。这些脚本使得管理和控制Java服务变得更加简单。 这个系统的...

    基于Java的Socket客户端实现,可以直接用于Android平台

    此外,Android系统可能会在长时间无操作时杀死应用,因此需要处理好连接中断的恢复逻辑。 5. **异常处理**: 在实际开发中,Socket编程中必须处理各种可能的异常,如连接失败、数据传输错误等。合理的异常处理能...

    JAVA作业1小李打怪物.docx

    循环结束后,会根据小李和怪物的生命值输出游戏结果,即小李是否成功杀死怪物。 这个简单的游戏模拟展示了面向对象编程的基本元素,如类、对象、属性、方法和构造函数的使用,以及如何通过对象间的交互来实现游戏...

    2013java面试题搜集

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

    干干净净杀死进程

    在IT行业中,"干干净净杀死进程"通常指的是在操作系统层面,通过合适的手段终止一个运行中的程序或进程,同时确保其资源得到适当的释放,不会留下任何残留或导致系统不稳定。这个过程涉及到进程管理、内存管理和资源...

    java多线程下载

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

    Java实现传教士过河问题

    规则规定,任何时候,如果野人的数量超过传教士,野人可能会攻击并杀死传教士。因此,目标是找到一种策略,确保传教士和野人在整个过程中都安全。 在提供的代码中,`CrossRiver` 类可能是用于存储和操作传教士和...

    progresshtysym_java_android_

    Android系统为了优化电池使用和用户体验,可能会在必要时暂停或杀死后台应用。然而,对于需要持续运行的任务,如音乐播放、下载或上传文件,开发者需要利用特定机制来保持任务执行,这就是前台服务的作用。 **一、...

    超级马里奥 java.doc

    游戏开始时,马里奥会有 3 条生命,消灭敌人或顶一些物品可以得到分数,每到 500 分会增加一条生命,如果马里奥被敌人杀死或是掉下悬崖,会失去一条生命,并从该版面重新开始游戏,如果马里奥的生命数为 0,则游戏...

    Linux-taskmanager.zip_Java操作系统_操作系统

    此外,这个任务管理器还可以作为进一步扩展的基础,例如添加进程控制功能(如启动、停止、杀死进程),或者集成系统日志分析等。 总的来说,"Linux-taskmanager.zip"是一个将理论与实践结合的优秀示例,它将Java...

    让Android应用不被杀死(killer)的方法

    在Android系统中,保持应用不被系统杀死是开发者在某些特定场景下可能需要考虑的问题,例如后台服务持续运行、重要任务处理等。本篇文章将详细探讨两种主要的策略来实现这一目标。 首先,我们可以通过将服务...

    java学习笔记

    - 杀死父进程时,其子进程也会被杀死;后台作业不依赖于任何终端,会继续运行。 6. **常用命令**: - `man`:查看命令的手册页。 - `ls`:列出目录中的文件和目录。 - `cp`:复制文件或目录。 - `rm`:删除...

    storm集群搭建Java客户端测试代码.zip

    - **监控与管理**:Java客户端还可以用于监控Topology的运行状态,如获取拓扑信息、杀死或重新调整Topology等。 3. **Java API使用详解**: - ** Nimbus Client**:Java客户端通过Nimbus接口与Storm集群交互,...

    Android_Java经典笔试题及答案

    - **Service**: 在后台运行的服务,没有用户界面,可以长时间运行而不会被系统轻易杀死。 - **ContentProvider**: 提供跨程序共享数据的方法,用于访问数据库等数据源。 3. **java.io包中的** **...

Global site tag (gtag.js) - Google Analytics