java 怎样规避full gc

 我来答
我不是他舅
推荐于2016-02-25 · TA获得超过138万个赞
知道顶级答主
回答量:29.6万
采纳率:79%
帮助的人:34.8亿
展开全部
据我观察JAVA程序,一般在命令行模式下运行JAVA任务,JDK可以承受的内存上限大概是机器物理内存的1/4。
比如我的服务器是16G的内存,那么JAVA程序可以占用的最大内存是4G左右,超出就报溢出。

所以在一般程序运行中,JAVA内存逐渐从
100MB 200MB, 300...1G...2G...... 膨胀到4G,在这个过程中,我的循环都设置了System.gc(),偶尔有占用内存减少的时候,但是基本下降都很有限,然后过一会儿又继续上升。直到上升到4G的时候,如果此时系统没有明确的数据持续写进内存,只是大量进行新建变量,赋值,然后生命周期结束待回收的过程,系统会大量进行GC的操作,保证JAVA内存不超过4G,但我似乎感觉一旦在内存在4G上下游动的时候,JAVA程序的性能就开始走低。

所以我的理解是,GC直到不得不执行的时候才会被执行,而且效果并不好。。。。
PS,如果是8G内存的服务器,GC频繁执行是在JAVA占用内存到达2G的时候。
同不知道如何进行高效的内存回收。本来没有任何写入内存操作的程序,但是程序处理问题一大了,占有内存就很多。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式