设置新生代与老年代比例关系
生活随笔
收集整理的這篇文章主要介紹了
设置新生代与老年代比例关系
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
怎么去配置一個新生代和一個老年代的一個比例,新生代的比列和老年代的比例怎么配,基本原則是遵循什么原則,遵循1:2,為什么要遵循1:2,1:2是大致的,你們也不能說完全是1:2,這個你們要看什么公司,什么項目,你們可以把老年代設大一點,新生代設小一點,基本原則是讓新生代設置盡量小一點,讓垃圾回收在新生代回收多一點,老年代因為比例比較大,空間比較足,他的回收次數會稍微少一點,使用示例: -Xms20m -Xmx20m -XX:SurvivorRatio=2 -XX:+PrintGCDetails -XX:+UseSerialGC-XX:NewRatio=2,說明:堆內存初始化值20m,堆內存最大值20m,新生代最大值可用1m,eden空間和from/to空間的比例為2/1新生代和老年代的占比為1/2,這個其實已經有個說明了,堆內存的初始值是20M,堆內存的最大值也是20M,-XX:SurvivorRatio=2這個參數我就不說了,剛才已經講過了,新生代的eden區和from/to的比例是1:2的關系,-XX:NewRatio=2這個是新生代和老年代的比例是1:2,我們之前的是多少G的嗎,8G內存的,現在服務器標配是8G,也有32G的,那說明是很有錢了,有一臺32G的服務那就很好了那非常非常貴的,基本上都是好幾萬的,我是按照8G的內存來配,這個時候一比二的時候怎么辦呢
package com.learn.test;/*** 配置新生代和老年代* 一般很少用4G服務器的* 基本上服務器標配都是8G的* 我之前的項目都是8G內存* 很少有4G內存的* Redis有的人去買阿里云的緩存* 這樣運維就不用管了* 這個看場景* -XX:NewRatio=2這個參數表示一比二的關系* -Xms20m -Xmx20m -XX:SurvivorRatio=2 -XX:+PrintGCDetails -XX:+UseSerialGC -XX:NewRatio=2* 這個參數配置一下然后運行一遍* [GC (Allocation Failure) [DefNew: 3261K->1664K(5120K)* 這個時候你會發現怎么回收次數怎么這么多* 回收了3次* 你們把參數給看一下* 這次GC回收回收了3次* 新生代與老年代占比 1/2 13696K* 這個時候大家可以算筆賬* 老年代現在是13696K* eden space 3456K,from space 1664K,to space 1664K,把這個總和乘以2* 如果大致等于13696K那說明是對的* 是不是大致等于這個數了* 13568是不是快接近13696K* 我們來看一下默認的新生代和老年代的占比關系* -XX:+PrintGCDetails -XX:+UseSerialGC* 我們去掉一些參數,然后運行如上參數* 你們知道現在的新生代和老年代的占比是多少嗎* 這個時候我們可以把這個計算一下* eden space 34944K,from space 4352K,to space 4352K,* the space 87424K,* 34944K+4352K+4352K=43648K* 87424K/43648K=2* 1:2,新生代占1/3,老年代占2/3* 不同的JVM其實是有很大的差別的* 6之前到現在其實是有非常大的變化的* 垃圾收集器開始的時候只有串行和并行* 現在都是G1和CMS收集器* 技術總監一般不會做這個事情的,* 一般是架構師做的* 我們生產環境不是配置在eclipse里面* 而是配置在TOMCAT里面的* * @author Leon.Sun**/
public class Test003 {public static void main(String[] args) {byte[] b = null;for (int i = 0; i < 10; i++) {b = new byte[1 * 1024 * 1024];}}}
?
總結
以上是生活随笔為你收集整理的设置新生代与老年代比例关系的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 配置jvm堆最大内存eden区与s0或者
- 下一篇: jvm解决堆内存溢出问题