JVM优化之路-1

转眼间已经过去一年了,感觉时间过的好快,在这些时间里认识到了java的强大,也感觉到了自己的不足,还是那句话,成功没有一蹴而就,我们需要不断地努力,

互联网这个行业本来就是一个属于年轻人的行业,在这里一代又一代的人前仆后继

 

为什么需要优化GC

或者说的更确切一些,对于基于Java的服务,是否有必要优化GC应该说,对于所有的基于Java的服务,并不总是需要进行GC优化,但前提是所运行的基于Java的系统,包含了如下参数或行为:

  • 已经通过 -Xms 和–Xmx 设置了内存大小
  • 包含了 -server 参数
  • 系统中没有超时日志等错误日志

换句话说,如果你没有设定内存的大小,并且系统充斥着大量的超时日志时,你就需要在你的系统中进行GC优化了。

但是,你需要时刻铭记一条GC优化永远是最后一项任务。

 

但是,我们知道有些情况会让我们束手无策,我们眼睁睁的看着XML以及JSON解析占用了大量的内存。即便我们已经尽可能少的使用String以及尽量少的输出日志,大量的临时内存被用于XML或者JSON解析,例如10-100MB。但是,舍弃XML和JSON是很难的。我们只要知道,他会占用很多内存。

如果应用内存使用量经过几次重复调整之后有所改善,你就可以开始GC优化了。

我为GC优化归纳了两个目的:

  1. 一个是将转移到老年代的对象数量降到最少
  2. 另一个是减少Full GC的执行时间

1GC优化需要考虑的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

伊甸园空间和幸存者空间的占比

 

posted @ 2017-11-15 16:41 奋斗,坚持 阅读(...) 评论(...)  编辑 收藏