jvm的out of memory和GC

来源:互联网 发布:淘宝美工的发展前景 编辑:程序博客网 时间:2024/06/01 01:33

java的GC 垃圾回收,就是内存中用过的区域给回收,不然就占满了,完了程序就死掉!这就叫“内存溢出”。

 

jvm的内存分“heap内存(HM)”和“持久内存(PM)”。hm存的是对象们,pm存的是一些代码一些方法代码等。hm分:新生代和老生代,新生代中又分eden和救生区,对象刚生成时在eden中,如果eden满了就把eden中的垃圾删掉并把eden中有用的对象copy到救生区,有两块救生区(两块之间交替着像eden似的回收几次如果对象还没变垃圾就拷到老生代),老生代到一定值了也就回收。

 

之前我把系统中的内存都设置到近30G了,这个设置太大了不好,不断的出out of memory,虽然没提示也知道是out of memory,因为内存监控都要满了。程序也不动了。为什么太大了不好呢?因为它太大(到头才回收),那么垃圾的总量也就多,回收时间就相对多,这样慢慢的就回收不过来了(产生和回收同时),溢出了。把它设置小了呢,一个对象都盛不开(那连启动都启动不了)。所以这得合适。还有什么垃圾收集器的种类设置(并发,并行,串行)

 

最后专家来了,就留了堆内存4g和持久内存0.5g两个参数启动,其它的让jvm自己动态智能确定用什么值,就不OOM了。

原创粉丝点击