关于Object o = new Obejct() 过程中都发生了什么~~~
感谢大佬的录屏,延迟看一下JVM的视频课程,记一下笔记:
开篇这玩意儿我暂时也看不懂,先放在这里:
接下来给了一段创建对象的代码,以及它的java汇编码
字节码:
0.new ->申请内存。堆里有了一个新的内存。(半初始化。成员变量设置默认值)
3 dup 因为invokespecial会消耗一份,所以必须先复制一份
4 invokespecial T initlize 初始化,调用他的构造方法
7 astore_1 把t与T建立关联
8 return
那么上图的第一个问题就解决了。看第二个问题。DCL与violatile
设计模式:单例:new Class时候,只要求内存中只能new出一个对象。
里面调getInstance永远只有一个对象
或者:
上来先判断,if instance为空再new出来。(多线程访问的时候并不安全,多线程可能会new多个instance)
所以如果有多线程访问时:在方法加synchronize。永远只有一个线程访问:
如果为空,再上锁。