对象优先在Eden分配
大对象直接进入老年代
长期存活的对象将进入老年代
动态对象年龄判断
如果Survivor空间中相同年龄所有对象的总和大于Survivor空间的一般,年龄大于或等于该年龄的对象就可以直接进入老年代
空间分配担保
分析对象动态作用域,当一个对象在方法中被定义后,它可能被外部所引用,例如作为调用参数传递到其他方法中,这种称为方法逃逸,甚至还有可能被外部线程访问到,比如赋值给可以在其他线程中访问得到实例变量,这种称为线程逃逸
如果确定一个对象不会逃逸出线程之外,那么就可以让这个对象在栈上分配内存,对象所占用的内存空间就会随栈帧出栈而销毁
标量:若一个数据已经无法分解成更小的数据来表示,例如基本数据类型,那么这些数据就被称为标量
如果把一个Java对象拆散,根据程序访问的情况,将其用到的成员变量恢复为原始类型来访问,这个过程就被称为标量替换,不允许对象逃逸出方法范围
线程同步本身是一个相对耗时的过程,如果逃逸分析能够确定一个变量不会逃逸出线程,无法被其他线程访问,那么这个变量的读写肯定不会有竞争,那么对这个变量实施的同步措施就可以被安全的消除掉
原文:https://www.cnblogs.com/gszixin/p/13598542.html