jvm内存调优经验总结

要很好得对jvm进行内存优化,首先需要了解jvm内存得结构,也就是java相关对象,class,常量,静态变量等所存储得地方,至于如何存储得不是本篇文章重点说的,如果想学习的同学可以https://www.cnblogs.com/1024Community/p/honery.html#%E4%BA%94gc%E6%98%AF%E4%BB%80%E4%B9%88%E6%97%B6%E5%80%99%E8%A7%A6%E5%8F%91%E7%9A%84%E9%9D%A2%E8%AF%95%E6%9C%80%E5%B8%B8%E8%A7%81%E7%9A%84%E9%97%AE%E9%A2%98%E4%B9%8B%E4%B8%80到这个网址看一下。那么我们如何进行优化呢?我们接下来进行如下分析步骤:

1,jvm的GC是一个守护线程。

2,jdk提供了7种垃圾收集器,他们根据不同的特性针对不同的jvm存放的数据进行回收。

3,我们如何知道我们在实际开发中用到了哪些类型的数据,比如我们使用spring框架,那么由于spring框架特性需要在服务器启动的时候加载很多类到spring容器中,这个时候我们需要合理的设置新生代的初始大小,以满足创建bean的个数(-Xmn),再比如我们使用hibernate框架,由于hibernate的特性会有很多动态代理的类,这些类都是存放在方法区种,这个时候需要合理设置方法区大小。(-XX: PermSize=128m 设置持久代初始内存大小128M,-XX:MaxPermSize=512m 设置持久代最大内存大小512M)

4,具体如何选择垃圾收集器需要具体情况具体分析,比如我们这个系统需要大的吞吐量也就是访问量很大的情况,这个时候我们可以选用Parallel Scavenge收集器和ParNew收集器,对新生代进行快速回收。如果追求短时间内高并发,我们可以采用cms收集器,它是对老年代进行回收。缺点是CPU占用比较高。

5,由于年老代满了的话会触发fullgc,我们需要分析年老代满的原因,主要原因是一些对象的生命周期太长,一直无法被回收,所以我们在开发的时候需要注意对对象的引用之类的处理,一些IO流是否关闭等。

你可能感兴趣的:(java)