jstat命令查看系统gc运行状态
java -XX:PrintFlagsFinal查看运行参数
根据获得的运行参数调整jvm启动参数达到优化的目的
jvm主存与线程工作内存之间有读与写的同步时间,使用volatile关键字可以使线程之间共享直接从主存获取数据
由于使用了volatile关键字后,对于普通变量来说,不必再在自己线程工作栈中创建副本,所以节省了一定的栈空间,可以增大如递归等方法的深度
jvm为优化执行效率,存在指令重排现象如下
class Test {
private void stop = false;
private int i = 0;
private void changeI() {
i++;
stop = true;
}
private void showI() {
if(stop) {
System.out.println(i);
}
}
}
ThreadA:执行changeI方法
TheradB:执行showI方法
打印出来的i有可能输出0,也有可能输出1,因为jvm不保证线程间的指令是有序的,在保证同一线程内的指令逻辑正确情况下,线程内可能先执行stop=true,再执行i++