荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: servlet (nick), 信区: Java
标  题: Re: JAVA里促进垃圾回收有多少种方法?
发信站: 荔园晨风BBS站 (Fri Nov 24 23:23:25 2006), 站内

    题目说得有点不清楚。
    促进垃圾回收是指提高gc运行的频率还是指
让gc有效地回收程序不需要的对像,还是让gc在
不影响应用程序的情况下运行?而gc指的是jvm规范
里的gc,还是某jvm实现里的gc或某jvm实现里的一个
运行实例里的gc?上面这些任意组合起来,这题目都有很不相同
的答案。
     如果gc是指jvm规范里的gc。能影响gc工作的,大概
有两种途径,1,就是调用System.gc()/
Runtime.gc()。2,调整jvm的堆的大小 -Dxmx……
如果调用.gc。jvm规范里只要求具体实现能尽快回收没效的
对像,但如何回收,什么时候回收,没有明确指定。
而调整jvm堆大小,当程序占用的内存快到堆的最大值时,jvm
会大规模(占用大部份计算机知源)地回收无效对像。
    但要说明的是,没到必要时刻,最好不要用上面的手段。
这些手段会影响java的跨平台性。若真的需要使用,最好要
在具体jvm实现里做足够的测试。举个例子,在开发平台jvm实现中,
当应用程序占用的堆的大小接按最大值,jvm会运行gc,或许
这个jvm实现回收无效对像的速度比你程序建立新对像的速度快。
所以程序能一直很好运行。但当布置到真实的环境时,由于平台
变了,jvm实现变了,而jvm回收实现也变了,本来能很好运行的
程序,但在新的jvm实现里是一大堆"outOfMemoryError"。而.gc一
般在se或ee中,最好不要碰。但在某些me中,考以小心地用,但
要经过足够的测试。
    总的来说,写程序时,最好忘记gc的存在。不要直觉得认为
调用gc或调整堆大小有帮助。调用gc或调整堆大小的最合理时该,
我觉得是在布置调优阶段。因为在布置阶段,具体的jvm实现已经确定,
jvm实现确定了就可以进行测试,确定碰胫所在,有针对地调整。


【 在 slight (生命不息,奋斗不止) 的大作中提到: 】
: 好多种啊.
: 1.设置为null,当然咯,不null就不被回收了。
: 2.程序调用Runtime.gc()(貌似)
: 3.调整jvm heap的分配:
:   jvm heap分为young及tenured:
:      young又分为eden,survivor,virtual.
:      tenured分为virtual及perm(永久).
:   垃圾回收主要会三个阶段
:   1.eden空间的回收:
:        对象在eden空间中创建,该空间满后,垃圾回收开始工作,回收无效对象所占用的空
间.并将该带中存活的对象拷贝到survivor
: ...................

--
什么是轻量级框架?
轻量级框架就是轻到你感觉不到它的存在,
而又能起到应用容器作用的一类神奇物体.


※ 修改:·servlet 于 Nov 24 23:27:03 修改本文·[FROM: 61.141.86.81]
※ 来源:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 61.141.86.81]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店