打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
面试 尚硅谷
  1. volatile

    1)可见性。不能保证原子性。

    2)禁止指令重排序。编译器,cpu,指令之间没有依赖关系的话,会将指令重新排序。

    例如:Product p = new Product();这行代码分为以下3个步骤(伪代码)。

    memory=allocate() 1.开内存空间

    initialize(memory)   2.初始化

    instance=memory   3.将instance指向memory内存地址,到这一步instance!=null

    步骤2和步骤3没有依赖关系,会有指令重排。多线程下,单例模式需要注意这一点。

private static Product product;

public static Product getInstance(){

      if(product == null)

             product = new Product();

      return product;

}

  1. javap

    1)const,load。在class中,这两步是对栈顶进行改值的操作。没有这两步,栈顶的值没变,用的是之前的值。

    这可以解释为什么i=i++为什么是0,i=++i则是1。详细如下。

    https://blog.csdn.net/junsure2012/article/details/7099222

    https://blog.csdn.net/luckyp/article/details/4255353

    store是将栈顶的值给变量,例如下面最后两步

    例如:

int i=10;

i=i+3;

int j=i;


bipush        10

istore_1

iload_1

iconst_3

iadd

istore_1

iload_1     加载到栈顶

istore_2    给第2个变量

return


.....

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
pthread
重排序
Oracle 如何 查看 sid?
挑战性的RMAN问题 在线等待 小女子先感谢了
催眠术入门:催眠事实很简单
关于java栈与堆深入了解 对一些错误认识的纠正
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服