有关GC每40秒运行一次的思考

用JProfiler测试项目的性能,发现GC大概每40秒就运行一次,不知道是好是坏!在网上搜索并和朋友讨论:
HeyFamily168(158865140) 16:51:20
垃圾回收由虚拟机自己的机制进行调度,不同的jdk实现的算法不同。程序无法控制它什么时候进行回收,只能建议。进行垃圾回收一般在系统资源比较空闲的时候。
江城月(345622936) 16:52:58
这个跟CPU空闲什么关系
HeyFamily168(158865140) 16:55:31
如果你的CPU一直运行在100%的时候,它忙自己的活都没有资源,那有空闲帮你回收垃圾,
江城月(345622936) 16:56:10
你这个是极端的假设
江城月(345622936) 16:56:23
再说当你new的时候不需要cpu吗?
广州---三寿<[email protected]> 16:56:25
我觉得有道理!
江城月(345622936) 16:56:54
哪个有道理
广州---三寿<[email protected]> 16:58:22
168的有道理!

江城月(345622936) 16:59:02
刚找到一个解释,感觉很不错
江城月(345622936) 16:59:13

经验之谈:
1 Server JVM 最好将 -Xms -Xmx 设为相同值。为了优化 GC ,最好让 -Xmn 值约等于 -Xmx 1/3[2]
2 .一个 GUI 程序最好是每 10 20 秒间运行一次 GC ,每次在半秒之内完成 [2]
HeyFamily168(158865140) 16:59:13
这个结论是是搞笑点。
不过确定是存在因为系统繁忙而导致无法回收的情况。
HeyFamily168(158865140) 16:59:27
其实我不知道你那个测试,想问什么问题
江城月(345622936) 16:59:39
10到20秒运行一次GC
江城月(345622936) 17:00:14
原因是这个
江城月(345622936) 17:00:16
注意:
1.增加Heap的大小虽然会降低GC的频率,但也增加了每次GC的时间。并且GC运行时,所有的用户线程将暂停,也就是GC期间,Java应用程序不做任何工作。
江城月(345622936) 17:00:49
GC运行时,所有的用户线程将暂停

要是暂停时间太久,那看着像什么,呵呵

HeyFamily168(158865140) 17:03:53
要是游戏引擎的话,给它停这么一停,按你说的还要10~~20s停一下,就算是0.x~1s之间,你就会知道痛苦。呵呵。。。
江城月(345622936) 17:04:18
对的
好学份子<[email protected]> 17:04:35
听你们谈这些,长学问哪
江城月(345622936) 17:04:47
所以说我的40秒来一次GC,应该还好
江城月(345622936) 17:05:05
毕竟现在的硬件什么的也不错

 

你可能感兴趣的:(jvm,游戏,算法,虚拟机,搜索引擎)