java 的几个问题

xiaofish 2003-10-15 02:07:50
1. 当java程序被kill掉的时候, 程序如何捕捉到这个kill消息。
2. 当java程序运行很长一段时间后, 发现系统内存会被占用的越来越多, 如何改变这种情况。
谢谢大家!
...全文
32 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
truezerg 2003-10-15
  • 打赏
  • 举报
回复
你的内存总是再长的问题,我怀疑你是因为没有了解java的回收机制引起的,当你写 aObject = null; (对不起,上面我写错了,不是:= 是 = ,可能最近又写delphi 写多了^_^)
这个对象并不一定会被释放。有可能其它地方还有引用指向它。所以你必需保证所有的引用都解除了才行。检查你的程序,如果你弄明白了这个道理,看看是不是程序写的有问题。祝你好运
truezerg 2003-10-15
  • 打赏
  • 举报
回复
to: xiaofish()

你要弄明白在什么情况下java的垃圾回收才能回收对象所占用的空间。那就是只有当一个对象没有被任何引用指向它的时候,这时java的垃圾回收程序才能够回收这个对象所占用的内存空间。 这种机制是非常好的,你不必为担心何时释放一个对象而举棋不定。比C++的机制强好很多。
从表面上看当你不用一个对象时,在java里和在C++里的操作好像都差不多比如
aObject := null; //java
aObject.delete; //C++
表面上好像都差不多,其实一点也不一样。C++里要复杂的多,这种情况存在于多个指针(引用)指向一个对象时,比如在C++中,如果有二个引用(C++里叫指针? 我不知道叫什么,就都叫引用吧)指向了一个对象,当你delete掉这个对象后,而其它的引用并不知道这个对象已经被delete掉了,所以当你通过其它的引用再使用这个对象时就会出错。 而java不是。当你写 aObject := null; 这句话时,那个对象并没有被释放掉。只是当前的这个引用不再指向它而已。 所以不会影响其它也指向这个对象的引用。 不会引起向C++里的问题。而当指向这个对象的所有的引用都不再指向这个对象时,它才会被归入到垃圾回收器待回收的对象列表里。等待回收。

所以我们没有垃圾回收机制的程序语言里所面对的困难不是 "忘记释放掉对象",真正的难点是“何时释放对象”。
alienbat 2003-10-15
  • 打赏
  • 举报
回复
楼上的,只有没有任何变量指向对象的时候,此对象才会被回收。
C++的方式需要程序员自己管理内存,是非常麻烦的,而且很容易造成内存空洞。
xiaofish 2003-10-15
  • 打赏
  • 举报
回复
伙计, 我觉得把全世纪的内存都加到上面,也会用光的, 呵呵!
我曾经用过 gc()的方式进行内存的回收,但是没效果!
我不知道,是否当变量new过以后,是否要赋null才能被及时回收掉!
如果是这样的话,我倒觉得c++的自己管理内存的机制还要可取得多,
想用就new,不用就delete掉!

关于第一个问题的解决方法,我去try一下先!

欢迎大家踊跃发言哦!
wyhgg 2003-10-15
  • 打赏
  • 举报
回复
1涉及进程监测
xieweibbs 2003-10-15
  • 打赏
  • 举报
回复
JAVA的垃圾收集机制会自动处理
realzealy 2003-10-15
  • 打赏
  • 举报
回复
JAVA程序的运行本身是就是多线程的,有垃圾回收的线程回收那些不用资源,但是它的优先级很低,很多时候你是感觉不到的,但是如果资源非常少的情况下,也会强制回收一些资源,但是通常自己动手回收更有效就是用System.gc(),或者重写finalize()方法
mortal 2003-10-15
  • 打赏
  • 举报
回复
第一个不知道,第二个是因为JAVA的垃圾收集机制的原因,因为垃圾收集的优先级非常的低,当你程序在不断运行时,没用的东西还会一直在内存中(没机会清除),有一种方法是自己手动的进行收集,可以用System.gc(),或者重写finalize()方法
ervinlj 2003-10-15
  • 打赏
  • 举报
回复
你说的kill掉,可是强行kill掉这个程序,这我不知道!如果是程序正常退出的话,你只要覆盖finalize方法就可以了,你试试看kill掉这个程序,会调用这个方法的吗?
第2个问题吗?运行Java程序应该不会出现这样的情况的,因为Java有Garbage Collection的机制的吗!如果实在系统内存会被占用的越来越多的话,关掉几个程序,再不行,伙计还是多加点内存把!!!

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧