对象在JVM中的创建步骤
- new :开辟JVM堆中的内存空间
- 将内存空间初始化(指的是就是对象的成员变量为0值)
- 将内存空间地址(引用地址)赋值给栈空间的引用类型的变量
在new对象的时候,JIT即时编译器会根据运行情况,将对象创建的过程进行指令重排序
线程执行代码的时候需要通过竞争CPU时间片去执行
Volatile关键字
public class Student {
private volatile static Student student=null;
private Student() {
}
public static Student getSingletonInstance() {
if (student==null) {
student=new Student();
}
return student;
}
public void sayHello(String name) {
System.out.println("hello,"+name);
}
}
- 作用一:禁止被它修饰的变量发生指令重排操作。是通过内存屏障去完成的禁止指令重排序
- 作用二:禁止CPU缓存使用,其实被volatile关键字修饰的变量,在修改之前,都需要将最新CPU缓存中的数据刷新到主内存中