java的垃圾收集器能不能信任?

zone2000 2003-03-27 10:06:18
rt,哎,我的程序三天就能把1G的内存用尽,可我实在找不到问题所在呀....
...全文
44 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
mem_fox 2003-03-28
  • 打赏
  • 举报
回复
应该是你程序的问题,最简单的就是流文件用了不关
hui_hui_lin 2003-03-28
  • 打赏
  • 举报
回复
关键还是在所编写代码的质量
xiaohaiz 2003-03-28
  • 打赏
  • 举报
回复
kinhope(java兵) 误解了,"实时"和"定时"是两个概念.
spyer 2003-03-27
  • 打赏
  • 举报
回复
支持楼上的意见。
xiaohaiz 2003-03-27
  • 打赏
  • 举报
回复
语言之间的优劣在这些问题上不是关键因素.关键是人为的原因.再好的语言教到不会用的人手中,也写不出好程序.这点道理大家都明白啊.所以关键还是检查自己的设计和编码.
flyingbugs 2003-03-27
  • 打赏
  • 举报
回复
还是C#好

xiaohaiz 2003-03-27
  • 打赏
  • 举报
回复
Java的垃圾回收机制是一种可靠的机制,这点我们首先不怀疑.
其次,对于Java语言编写的程序是否存在MLK(Memory Leak)呢?答案是肯定的,严格的说,Java中不叫内存泄漏,更准确点叫做"无意识的对象保留".意思就是一些本来应该生命周期结束的对象确一直有引用保存,那么GC当然不会回收这些对象了.
再回头看看你的例子,1G的内存被渐渐吃光,所以我觉得存在这种MLK的情况可能存在.
下面我们来看看一些建议如何来解决你的问题.
问题最容易出在什么地方?是在内存由你自己来管理的地方,比如你自己做的推栈,缓存或者对象池这类自己维护内存的地方是非常容易出错的.所以建议你先检查程序的这些地方.看看是否存在应该释放的对象而没有释放.
其次,还有一种情况也是经常容易发生的.从你的描述来看,你的程序连续运行3天,我们可以认为是连续运行的,如果在连续运行的程序中你不断创建大量的细粒度的对象也会导致内存的不断消耗.对于这样的情况,你可以参见Flyweight Pattern,把对象internal state和external state区分开,使用共享的方式就可以解决这类的问题.
这些意见仅供参考.
boymice 2003-03-27
  • 打赏
  • 举报
回复
如果java中设仆个手动的垃极回收就好了。
hellomartin 2003-03-27
  • 打赏
  • 举报
回复
可能大一点的程序就不能满足要求了!不知可不可以定期调用垃圾收集!?
Patrick_DK 2003-03-27
  • 打赏
  • 举报
回复
用JProbe对你的程序进行监测,看看问题出在哪个地方
lazywolf 2003-03-27
  • 打赏
  • 举报
回复
当然可以
rhj_2001 2003-03-27
  • 打赏
  • 举报
回复
考虑到多用一些设计模式了,比如Singleton模式,MVC模式等,注意尽量少的new对象,有些对象是无状态对象,其实可以反复利用的,而不用去新建,减少内存开支。
kinhope 2003-03-27
  • 打赏
  • 举报
回复
java 是多线程的,每个程序一旦开始,至少有两个线程在运行,一个是main 入口,一个就是垃圾回收,
所以 垃圾回收 是实时的。
xiaohaiz 2003-03-27
  • 打赏
  • 举报
回复
定时收集何解?Java的GC线程本身就是定时收集.正常情况下,不推荐做手工的垃圾回收.
关键还是在程序本身的原因.我们曾经经历过一个项目,优化之后的情况下,垃圾回收线程每天才运行一次.另外也有一个反例,至今未解,GC在1分钟之内运行了1500次.
所以还是信任Java自己的GC,把主要的精力放在code review上面吧.
shine333 2003-03-27
  • 打赏
  • 举报
回复
定时收集

62,614

社区成员

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

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