感谢大佬的录屏,延迟看一下JVM的视频课程,记一下笔记:

开篇这玩意儿我暂时也看不懂,先放在这里:
关于Object o = new Obejct() 过程中都发生了什么~~~

接下来给了一段创建对象的代码,以及它的java汇编码
关于Object o = new Obejct() 过程中都发生了什么~~~
字节码:
0.new ->申请内存。堆里有了一个新的内存。(半初始化。成员变量设置默认值
关于Object o = new Obejct() 过程中都发生了什么~~~
3 dup 因为invokespecial会消耗一份,所以必须先复制一份
4 invokespecial T initlize 初始化,调用他的构造方法
关于Object o = new Obejct() 过程中都发生了什么~~~
7 astore_1 把t与T建立关联
关于Object o = new Obejct() 过程中都发生了什么~~~
8 return

那么上图的第一个问题就解决了。看第二个问题。DCL与violatile

设计模式:单例:new Class时候,只要求内存中只能new出一个对象。
关于Object o = new Obejct() 过程中都发生了什么~~~
里面调getInstance永远只有一个对象

或者:
上来先判断,if instance为空再new出来。(多线程访问的时候并不安全,多线程可能会new多个instance)
关于Object o = new Obejct() 过程中都发生了什么~~~
所以如果有多线程访问时:在方法加synchronize。永远只有一个线程访问:

如果为空,再上锁。
关于Object o = new Obejct() 过程中都发生了什么~~~

相关文章:

  • 2022-02-27
  • 2021-10-19
  • 2022-12-23
  • 2021-06-14
  • 2022-12-23
  • 2021-07-12
  • 2022-12-23
猜你喜欢
  • 2021-08-07
  • 2022-01-20
  • 2022-12-23
  • 2018-07-29
  • 2022-12-23
  • 2022-12-23
  • 2021-08-27
相关资源
相似解决方案