怎么去配置一个新生代和一个老年代的一个比例,新生代的比列和老年代的比例怎么配,基本原则是遵循什么原则,遵循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];
		}

	}

}