美文网首页
JIT和可见性

JIT和可见性

作者: zombie11 | 来源:发表于2018-06-27 14:38 被阅读0次

名词解释

JIT是just in time,即时编译技术。使用该技术,能提高JAVA程序的执行效率。可见性是一个线程对共享变量值的修改,能够及时被的被其他线程看到。

例子

public class Zuo {
    private static boolean flag = true;

    public static void main(String[] args) throws InterruptedException {
        new Thread(() -> {
            print();
        }).start();
        Thread.sleep(2500);
        flag = false;
        System.out.println("flag set to false");
    }

    private static void print() {
        while (flag) {
        }
    }
}

上面这段代码在JVM默认参数下会一直执行下去,但是如果在VM options中加上-Xint参数则不会。-Xint这个参数的作用是让JVM在解释器的模式下执行。那么这里的区别就是是否进行了JIT优化。

image.png

使用hids查看JIT后的汇编码后发现只在进入循环之前读取的flag变量,后面JMP指令无条件跳转了无论flag怎么变都不管了。JAVA内存模型中不能保证没有线程安全的字段将会看到更新。这个规定允许JIT进行这样的优化。
通过这个例子发现,在解释执行模式下不修改共享变量的值的情况下共享变量不加volatile关键字的变量也是具有多线程的可见性的。本地内存只是JAVA内存模型(JMM)的一个抽象概念,并不真实存在。

相关文章

  • JIT和可见性

    名词解释 JIT是just in time,即时编译技术。使用该技术,能提高JAVA程序的执行效率。可见性是一个线...

  • 7.线程安全之可见性

    可见性问题 代码 说明:在java运行参数加上server时候,为提高性能,会执行jit然后指令重排,导致实际上执...

  • Dart 基础

    JIT 与 AOT Dart 是少数同时支持 JIT(Just In Time,即时编译)和 AOT(Ahead ...

  • JIT和AOT

    前端编译、JIT、AOT简单解释JIT详细解释编译技术探讨 JVM中涉及JIT编译的参数大方法执行效率低的原因--...

  • JIT和AOT

    字面意思:JIT:Just In TimeAOT:Ahead of Time含义:目前,程序主要有两种运行方式:静...

  • JIT和AOT

    程序主要有两种运行方式:静态编译与动态解释。 1. 静态编译 的程序在执行前全部被翻译为机器码,通常将这种类型称为...

  • JIT 和 AOT

    程序主要有两种运行方式:静态编译 与 动态解释 AOT (静态编译) 静态编译的程序在执行前程序会被提前编译为机器...

  • volatile

    原理 volatile是如何来保证可见性的呢?在X86处理器下通过工具获取JIT编译器生成的汇编指令,有volat...

  • Android Art里的Jit&AOT

    简单介绍一下Art里的jit和aot.本文分成三个部分: JIT Introduction AOT Introdu...

  • 第八周-前端性能优化(二)

    JIT(Just In Time) • A crash course in just-in-time (JIT) ...

网友评论

      本文标题:JIT和可见性

      本文链接:https://www.haomeiwen.com/subject/wxibyftx.html