java有没有"析构"函数呢? 没有有很多用public void destroy()释放资源 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 没有,有释放资源的方法。如finalize()方法,垃圾回收过程中被系统自动调用。 析构除了可被用来释放内存资源之外,还可以用来释放其他资源,如socket资源,thread资源/同步信号资源,文件资源,硬件资源等。好象只有finalize()方法会在该object被GCed的时候被系统自动调用。但何时不保证(比如GC很晚才发生或根本没发生),由哪个线程出手来调用finalize()也不规定,故finalize()不是非常可靠的方法。比较可靠的方法是自己写close方法,并在把该object设为null之前,自己主动地在一个合适的线程里调用这个close方法 重载finalize()方法,之后在想要释放时或者超出作用域的时候调用System.gc() 谢谢各位的指点,我是想释放一个类实例占用的资源。但是又不想调用其中的方法,而是要自动释放,所以想到了"析构".现在已经找到了一个方法,可以先调用system.runFinalization(),再调用system.gc()来触发重载了finalize()方法的类方法来释放资源,相当于"析构"。但是不知道,如果一个线程起来后,隔一段时间这样运行一次,对系统性能有什么影响? java的垃圾收集是虚拟机管理的。调用system.gc()只是提醒jvm做垃圾收集,并不是一定会实现。这还引起了java高手的一场论战。所以没有必要隔一段时间运行一次System.gc。因此finalize()并不一定会被调用。就象hahaha88兄说的一样。 但是我使用system.runFinalization(),再调用system.gc()每次都成功啊, 我现在是想知道这样对系统性能有什么影响,谢谢. thinking in java 中对这个问题有非常详细的描述,可以参看! 没有!JAVA有垃圾收集器,如果要自己来做可以用finialize() 当你的程序有大量耗时运算,或主机环境有别的程序抢占cpu资源,以使你的jvm没有cpu时间片来运行垃圾收集线程(该线程优先级最低),就会有我和hahaha88兄的情况。你的程序没有大量计算,或你的计算机较快所以每次都成功。因为system.gc()并不是直接启动垃圾收集,所以就算有影响,也不会有很多的性能损失。本来finialize()就是用来给你释放某些外部资源的。比如,你用jni,其中分配了内存,那么内存的释放就可以放在finialize()(参见thinking in java)。 谢谢 hahaha88、lusxiao 以及各位的指点,那么说来在cpu被占用的情况下先调用system.runFinalization(),再调用system.gc(),也并不能保证它一定会成功,问题是如果这么调用了,只要cpu空闲下来就会处理吗?还有,如果我在一个线程里频繁做system.runFinalization()和system.gc(),对机器性能影响不大,是吗?谢谢~! equals和== 请教关于线程的一个问题 如何用java获得网页里隐藏的音乐文件的真实地址? 哪有CVS源代码?急!!!! 如何判断一个字符变量是否为换行符(\n)啊 swt 托盘 mysql-connector-java-3.1.7-bin.jar要拷贝到什么地方?(mysql连接jdbc) 如何写和用icmp的ping命令一样的程序。 如何才能做到不被别人复制页面中的内容和查看源代码?? 谁有Jbuilder8的破译文件吗?其它的也可以. 关于JAR文件和JDBC JBUILDER 高手的责任!!!
thread资源/同步信号资源,文件资源,硬件资源等。好象只有finalize()方法会在该object被GCed的时候被系统自动调用。但何时
不保证(比如GC很晚才发生或根本没发生),由哪个线程出手来调用finalize()
也不规定,故finalize()不是非常可靠的方法。比较可靠的方法是自己写close方法,并在把该object设为null之前,自己主动地在
一个合适的线程里调用这个close方法
但是又不想调用其中的方法,而是要自动释放,所以想到了"析构".
现在已经找到了一个方法,
可以先调用system.runFinalization(),再调用system.gc()来触发重载了finalize()方法的类方法来释放资源,相当于"析构"。
但是不知道,如果一个线程起来后,隔一段时间这样运行一次,对系统性能有什么影响?
那么说来在cpu被占用的情况下先调用system.runFinalization(),再调用system.gc(),也并不能保证它一定会成功,问题是如果这么调用了,只要cpu空闲下来就会处理吗?
还有,如果我在一个线程里频繁做system.runFinalization()和system.gc(),对机器性能影响不大,是吗?谢谢~!