社区
Java SE
帖子详情
java有没有"析构"函数呢?
lgb0532
2001-11-06 07:32:44
对于一个java类,可以使用其构造函数来初始化其参数,
一个类实例出了在其作用范围后系统将释放其资源,
请问java可不可以写一个函数让类实例被销毁时系统自动调用呢?
就象C++中的"析构"函数一样? 谢谢.
...全文
3117
17
打赏
收藏
java有没有"析构"函数呢?
对于一个java类,可以使用其构造函数来初始化其参数, 一个类实例出了在其作用范围后系统将释放其资源, 请问java可不可以写一个函数让类实例被销毁时系统自动调用呢? 就象C++中的"析构"函数一样? 谢谢.
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
17 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
lgb0532
2001-11-08
打赏
举报
回复
谢谢 hahaha88、lusxiao 以及各位的指点,
那么说来在cpu被占用的情况下先调用system.runFinalization(),再调用system.gc(),也并不能保证它一定会成功,问题是如果这么调用了,只要cpu空闲下来就会处理吗?
还有,如果我在一个线程里频繁做system.runFinalization()和system.gc(),对机器性能影响不大,是吗?谢谢~!
hahaha88
2001-11-07
打赏
举报
回复
析构除了可被用来释放内存资源之外,还可以用来释放其他资源,如socket资源,
thread资源/同步信号资源,文件资源,硬件资源。。。等。
好象只有finalize()方法会在该object被GCed的时候被系统自动调用。但何时
不保证(比如GC很晚才发生或根本没发生),由哪个线程出手来调用finalize()
也不规定,。。。故finalize()不是非常可靠的方法。
比较可靠的方法是自己写close方法,并在把该object设为null之前,自己主动地在
一个合适的线程里调用这个close方法
lgb0532
2001-11-07
打赏
举报
回复
谢谢各位的指点,我是想释放一个类实例占用的资源。
但是又不想调用其中的方法,而是要自动释放,所以想到了"析构".
现在已经找到了一个方法,
可以先调用system.runFinalization(),再调用system.gc()来触发重载了finalize()方法的类方法来释放资源,相当于"析构"。
但是不知道,如果一个线程起来后,隔一段时间这样运行一次,对系统性能有什么影响?
hy_yxj
2001-11-07
打赏
举报
回复
重载finalize()方法,之后在想要释放时或者超出作用域的时候调用System.gc()
lusxiao
2001-11-07
打赏
举报
回复
当你的程序有大量耗时运算,或主机环境有别的程序抢占cpu资源,以使你的jvm没有cpu时间片来运行垃圾收集线程(该线程优先级最低),就会有我和hahaha88兄的情况。
你的程序没有大量计算,或你的计算机较快所以每次都成功。因为system.gc()并不是直接启动垃圾收集,所以就算有影响,也不会有很多的性能损失。
本来finialize()就是用来给你释放某些外部资源的。比如,你用jni,其中分配了内存,那么内存的释放就可以放在finialize()(参见thinking in java)。
54sunboy
2001-11-07
打赏
举报
回复
没有!JAVA有垃圾收集器,如果要自己来做可以用finialize()
kfx
2001-11-07
打赏
举报
回复
finialize()
win_sharp
2001-11-07
打赏
举报
回复
thinking in java 中对这个问题有非常详细的描述,可以参看!
lgb0532
2001-11-07
打赏
举报
回复
但是我使用system.runFinalization(),再调用system.gc()每次都成功啊, 我现在是想知道这样对系统性能有什么影响,谢谢.
lusxiao
2001-11-07
打赏
举报
回复
java的垃圾收集是虚拟机管理的。调用system.gc()只是提醒jvm做垃圾收集,并不是一定会实现。这还引起了java高手的一场论战。所以没有必要隔一段时间运行一次System.gc。
因此finalize()并不一定会被调用。就象hahaha88兄说的一样。
lgb0532
2001-11-07
打赏
举报
回复
各位,来讨论一下吧,必定送分!
lgb0532
2001-11-07
打赏
举报
回复
各位,来讨论一下吧,必定送分!
waao
2001-11-06
打赏
举报
回复
没有,有释放资源的方法。如finalize()方法,垃圾回收过程中被系统自动调用。
hello_wyq
2001-11-06
打赏
举报
回复
内存管理都没有了,你要析够干什么?
yuppy_lew
2001-11-06
打赏
举报
回复
析构函数用不着你操心编译器会替你做这些繁琐的事的
totkid
2001-11-06
打赏
举报
回复
finalize()
Altair
2001-11-06
打赏
举报
回复
没有
有很多用public void destroy()释放资源
C#系列课程面向对象篇
这个是继《C#系列课程之基础知识入门篇》的篇,主要讲解的是C#中面向对象的有关知识,主要有类,接口,继承,多态,构造
函数
,
析构
函数
,密封类,属性,抽象,结构体,枚举,静态类,部分类等等有关面向对象的专业知识。
Java
到底
有没有
析构
函数
呢?
Java
到底
有没有
析构
函数
呢?
Java
到底
有没有
析构
函数
呢?我没能找到任何有关找个的文档。如果没有的话,我要怎么样才能达到一样的效果? 为了使得我的问题更加具体,我写了一个应用程序去处理数据并且说明是有一个重置的按钮会使得应用程序重新回到启动前的状态的。但是所有数据都必须是存活着的除非这个应用程序已经关闭了,或者重置的按钮被按下了。 如果是一个C/C++程序员,我认为这个是很容易实现的(因此我计划后面去实现它)我设计我的程序的结构,使得所有可以被重置的对象都在同一个类里
java
中的
析构
函数
乍一看,
java
里面怎么还有这样的词语。其实:
析构
函数
(destructor) 与 构造
函数
相反,当对象结束其 生命周期时(例如对象所在的
函数
已调用完毕),系统自动执行
析构
函数
。
析构
函数
往往用来做“清理善后” 的工作(例如在建立对象时用new开辟了一片内存空间,应在退出前在
析构
函数
中用delete释放)。
java
中有
析构
函数
,但我们一般用不到它,因为
java
有自动内存回收机制,无需程序员来释放...
java
怎么调用
析构
函数
_
析构
函数
何时被调用
析构
函数
何时被调用
析构
函数
在下边3种情况时被调用:对象生命周期结束,被销毁时;主动调用delete ;对象i是对象o的成员,o的
析构
函数
被调用时,对象i的
析构
函数
也被调用。第一种情况#include using namespace std;class A{public:A(){cout << "constructing A" << endl;}~A(){cout <&...
Java
写
析构
函数
_
Java
是否有
析构
函数
?
Java
是否有
析构
函数
? 我似乎无法在此找到任何文档。 如果没有,我怎么能达到同样的效果?为了使我的问题更具体,我正在编写一个处理数据的应用程序,规范中说应该有一个“重置”按钮,以将应用程序恢复到其最初的启动状态。 但是,除非关闭应用程序或按下重置按钮,否则所有数据都必须处于“活动”状态。我通常是C / C ++程序员,所以我认为这是微不足道的。 (因此,我计划最后实现它。)我对程序进行了结构设计...
Java SE
62,614
社区成员
307,319
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章