转眼间已经过去一年了,感觉时间过的好快,在这些时间里认识到了java的强大,也感觉到了自己的不足,还是那句话,成功没有一蹴而就,我们需要不断地努力,
互联网这个行业本来就是一个属于年轻人的行业,在这里一代又一代的人前仆后继
为什么需要优化GC
或者说的更确切一些,对于基于Java的服务,是否有必要优化GC?应该说,对于所有的基于Java的服务,并不总是需要进行GC优化,但前提是所运行的基于Java的系统,包含了如下参数或行为:
- 已经通过 -Xms 和–Xmx 设置了内存大小
- 包含了 -server 参数
- 系统中没有超时日志等错误日志
换句话说,如果你没有设定内存的大小,并且系统充斥着大量的超时日志时,你就需要在你的系统中进行GC优化了。
但是,你需要时刻铭记一条:GC优化永远是最后一项任务。
但是,我们知道有些情况会让我们束手无策,我们眼睁睁的看着XML以及JSON解析占用了大量的内存。即便我们已经尽可能少的使用String以及尽量少的输出日志,大量的临时内存被用于XML或者JSON解析,例如10-100MB。但是,舍弃XML和JSON是很难的。我们只要知道,他会占用很多内存。
如果应用内存使用量经过几次重复调整之后有所改善,你就可以开始GC优化了。
我为GC优化归纳了两个目的:
- 一个是将转移到老年代的对象数量降到最少
- 另一个是减少Full GC的执行时间
表1:GC优化需要考虑的Java参数
定义 | 参数 | 描述 |
堆内存空间 | -Xms | Heap area size when starting JVM 启动JVM时的堆内存空间。 |
-Xmx | Maximum heap area size 堆内存最大限制 | |
新生代空间 | -XX:NewRatio | Ratio of New area and Old area 新生代和老年代的占比 |
-XX:NewSize | New area size 新生代空间 | |
-XX:SurvivorRatio | Ratio ofEdenarea and Survivor area 伊甸园空间和幸存者空间的占比 |