注意:
伊甸园和S0/S1区默认大小比例为8:1
新生代最大年龄默认为15
查询特定参数
C:\Users\lianlei>jps
18900 Solution3
9604
10968 Launcher
20760 Jps
C:\Users\lianlei>jinfo -flag suvivorRatio 18900
no such flag 'suvivorRatio'
C:\Users\lianlei>jinfo -flag SurvivorRatio 18900
-XX:SurvivorRatio=8
C:\Users\lianlei>
关于设置分配空间担保
堆是分配对象的唯一选择吗?
当然是,不一定,因为随着逃逸分析技术成熟,栈上分配以及标量替换优化技术会将一部分对象放在堆内存之外。
什么是逃逸分析?
逃逸分析参数设置
逃逸分析以后,可以对堆内存进行优化
- 栈上分配 如果不是发生逃逸,会在栈内存中分配空间。
- 同步省略 如果发现一个对象只能一个线程访问,对于这个对象就不考虑线程同步操作。
- 分离对象与标量替换 如果一个对象不需要作为一个连续的内存结构存在也可以被访问到,那么也可以全部或者部分放在cpu寄存器上。
同步省略
标量替换
啥子是个标量?
标量是无法在分解成更小的数据的数据,java当中的原始类型就是标量。相应的,可以在进行分解的是数据称为聚合量,java对象就是聚合量。
就是为了减少堆内存的使用,尽量使用标量替代Java对象,如下:
class A{
int num ;
int size ;
}
public static void main(String[] args) {
A a = new A();
a.num = 1;
a.size = 3;
}
替换为
public static void main(String[] args) {
int num =1 ;
int size =12;
}