java的gc问题:

第一次fullgc之后,老年代的占用率还是上升,此时java进程的CPU占用也变高;当第二次fullgc之后,老年代的占用率才下降,CPU占用变低。并且这两次fullgc... 第一次full gc之后,老年代的占用率还是上升,此时java进程的CPU占用也变高;当第二次full gc之后,老年代的占用率才下降,CPU占用变低。并且这两次full gc的时间间隔很短。
经过一段时间后,再第三次gc,紧接着又第四次gc,与第一次、第二次的现象一致。以上的现象循环出现。
请哪位大神解答一下啊。
展开
 我来答
hugo_lian
推荐于2016-01-09 · TA获得超过1.4万个赞
知道小有建树答主
回答量:212
采纳率:0%
帮助的人:67.4万
展开全部
我也有类似的问题,PS,你是怎么检测gc被执行的?
据我观察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的时候。
同不知道如何进行高效的内存回收。本来没有任何写入内存操作的程序,但是程序处理问题一大了,占有内存就很多。
cxzucc
2014-03-26 · TA获得超过1317个赞
知道小有建树答主
回答量:1735
采纳率:79%
帮助的人:589万
展开全部
虚拟机启动参数配置和gc日志贴出来看下,还有jvm的版本等信息。
CPU高的时候的线程堆栈打出来看下,结合top命令看下是哪个线程占用CPU高。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
月亮风度
2014-03-27 · TA获得超过386个赞
知道小有建树答主
回答量:391
采纳率:87%
帮助的人:154万
展开全部
gd只是提醒jvm该回收垃圾了,并不是立刻就去回收的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式