`

Java关于JIT的原理和相关知识

阅读更多
今天在读java.awt.Toolkit类时,遇到了JIT,代码如下:
/**
     * Gets the default toolkit.
     * <p>
     * If a system property named <code>"java.awt.headless"</code> is set
     * to <code>true</code> then the headless implementation
     * of <code>Toolkit</code> is used.
     * <p>
     * If there is no <code>"java.awt.headless"</code> or it is set to
     * <code>false</code> and there is a system property named
     * <code>"awt.toolkit"</code>,
     * that property is treated as the name of a class that is a subclass
     * of <code>Toolkit</code>;
     * otherwise the default platform-specific implementation of
     * <code>Toolkit</code> is used.
     * <p>
     * Also loads additional classes into the VM, using the property
     * 'assistive_technologies' specified in the Sun reference
     * implementation by a line in the 'accessibility.properties'
     * file.  The form is "assistive_technologies=..." where
     * the "..." is a comma-separated list of assistive technology
     * classes to load.  Each class is loaded in the order given
     * and a single instance of each is created using
     * Class.forName(class).newInstance().  This is done just after
     * the AWT toolkit is created.  All errors are handled via an
     * AWTError exception.
     * @return    the default toolkit.
     * @exception  AWTError  if a toolkit could not be found, or
     *                 if one could not be accessed or instantiated.
     */
    public static synchronized Toolkit getDefaultToolkit() {
        if (toolkit == null) {
            try {
                // We disable the JIT during toolkit initialization.  This
                // tends to touch lots of classes that aren't needed again
                // later and therefore JITing is counter-productiive.
                java.lang.Compiler.disable();
                
                java.security.AccessController.doPrivileged(
                        new java.security.PrivilegedAction() {
                    public Object run() {
                        String nm = null;
                        Class cls = null;
                        try {
                            nm = System.getProperty("awt.toolkit", "sun.awt.X11.XToolkit");
                            try {
                                cls = Class.forName(nm);
                            } catch (ClassNotFoundException e) {
                                ClassLoader cl = ClassLoader.getSystemClassLoader();
                                if (cl != null) {
                                    try {
                                        cls = cl.loadClass(nm);
                                    } catch (ClassNotFoundException ee) {
                                        throw new AWTError("Toolkit not found: " + nm);
                                    }
                                }
                            }
                            if (cls != null) {
                                toolkit = (Toolkit)cls.newInstance();
                                if (GraphicsEnvironment.isHeadless()) {
                                    toolkit = new HeadlessToolkit(toolkit);
                                }
                            }
                        } catch (InstantiationException e) {
                            throw new AWTError("Could not instantiate Toolkit: " + nm);
                        } catch (IllegalAccessException e) {
                            throw new AWTError("Could not access Toolkit: " + nm);
                        }
                        return null;
                    }
                });
                loadAssistiveTechnologies();
            } finally {
                // Make sure to always re-enable the JIT.
                java.lang.Compiler.enable();
            }
        }
        return toolkit;
    }

1.JIT的工作原理图

工作原理
当JIT编译启用时(默认是启用的),JVM读入.class文件解释后,将其发给JIT编译器。JIT编译器将字节码编译成本机机器代码。

通常javac将程序源代码编译,转换成java字节码,JVM通过解释字节码将其翻译成对应的机器指令,逐条读入,逐条解释翻译。很显然,经过解释执行,其执行速度必然会比可执行的二进制字节码程序慢。为了提高执行速度,引入了JIT技术。

在运行时JIT会把翻译过的机器码保存起来,已备下次使用,因此从理论上来说,采用该JIT技术可以,可以接近以前纯编译技术。

2.相关知识
JIT是just in time,即时编译技术。使用该技术,能够加速java程序的执行速度。

JIT并不总是奏效,不能期望JIT一定能够加速你代码执行的速度,更糟糕的是她有可能降低代码的执行速度。这取决于你的代码结构,当然很多情况下我们还是能够如愿以偿的。

从上面我们知道了之所以要关闭JITjava.lang.Compiler.disable(); 是因为加快执行的速度。由于JIT对每条字节码都进行编译,造成了编译过程负担过重。为了避免这种情况,当前的JIT只对经常执行的字节码进行编译,如循环等。
分享到:
评论

相关推荐

    java的JIT 工作原理简单介绍

    以下是对JIT工作原理和相关知识的详细解释: 1. **JIT编译过程**: 当Java程序运行时,JVM首先会解释执行字节码。这个过程类似于读取一个指令集,然后逐条执行。然而,解释执行的效率相对较低,因为它需要在运行时...

    java现代编译原理.rar_java 编译_现代编译原理_编译_编译原理_编译原理 java

    Java现代编译原理是计算机科学中的一个重要领域,它涉及到如何将高级编程语言,如Java,转换为机器可...《Java现代编译原理》一书可能涵盖了这些主题,并提供了实用的案例和指导,对于深化Java编程知识是极好的资源。

    Java虚拟机实现原理分析.pdf

    Java虚拟机(JVM)是实现Java程序跨平台运行的关键技术,它的实现原理和工作过程是Java语言能够运行在各种不同硬件平台的基础。JVM的存在使得Java程序员可以编写一次代码,到处运行,这得益于JVM提供的一套平台无关...

    Android Framework介绍 Dalvik原理 JIT介绍

    ### Android Framework介绍与...了解这些基础知识对于深入理解和开发Android应用程序至关重要。未来随着技术的发展,Android系统可能会继续进化,但其核心思想——提供高效、灵活且易于开发的环境——将始终保持不变。

    揭秘Java虚拟机-JVM设计原理与实现

    《揭秘Java虚拟机-JVM设计原理与实现》这本书深入探讨了Java虚拟机(JVM)的工作原理及其在Java编程中的核心地位。Java虚拟机是Java平台的核心组成部分,它负责执行字节码,为开发者提供了跨平台的运行环境。以下是...

    JAVA JVM原理资料

    ### JAVA JVM原理资料知识点 #### 一、语言处理器的基本结构 **语言处理器**是指能够处理某种编程语言的工具,常见的包括编译器、解释器、IDE等。 1. **编译器的基本结构**: - **词法分析器**:将源代码分割成...

    编译原理 虎书Java及C版

    因此,Java的编译原理需要涵盖虚拟机、字节码和JIT优化等额外概念。 在“虎书-C语言描述.pdf”中,读者可以深入理解C语言编译器的实现细节,包括词法和语法分析的具体算法,以及如何生成和优化C语言的目标代码。而...

    Java 虚拟机原理教程

    以下是关于Java虚拟机的一些详细知识点: 1. **JVM的构成**: JVM包含以下几个主要组件: - **类装载器(Class Loader)**:负责查找并加载Java类文件。 - **运行时数据区(Runtime Data Areas)**:包括方法区...

    现代编译原理Java语言描述_虎书

    《现代编译原理Java语言描述》是一本深入探讨编译器设计的专著,它以Java语言为背景,系统地阐述了编译器构造的基本概念、技术和方法。编译原理是计算机科学的重要分支,它涉及如何将高级编程语言转换为机器可理解的...

    JAVA基础知识概述

    ### JAVA基础知识概述 #### 一、Java语言特点与体系结构 **Java** 是一种广泛使用的高级编程语言,因其强大的功能性和灵活性,在企业级应用、移动应用(尤其是Android平台)、Web应用等多个领域都有着不可替代的...

    深入理解Java虚拟机(jvm性能调优+内存模型+虚拟机原理).zip

    《深入理解Java虚拟机》是一本深度探讨Java虚拟机(JVM)的著作,涵盖了JVM性能调优、内存模型以及虚拟机原理等多个关键领域。本文将基于这些主题,详细阐述其中的重要知识点。 首先,我们要了解Java虚拟机(JVM)...

    Java运行原理 javap命令运行结果

    ### Java运行原理与javap命令运行结果解析 #### 一、Java运行原理概述 Java是一种广泛使用的编程语言,它的程序可以在...以上就是关于Java运行原理及javap命令运行结果的相关知识点的详细介绍。希望对你有所帮助!

    java知识管理.pdf

    Java知识管理是一个广泛的领域,它涵盖了使用Java编程语言进行软件开发、维护和优化时所需的各种技术和实践。在Java的世界里,知识管理不仅涉及到语法、类库、框架,还包括设计模式、并发处理、内存管理、性能优化等...

    java高级进阶知识

    理解JIT的工作原理和优化手段,可以提升程序性能。 8. **并行与并发**:JVM支持多线程并发,理解锁、同步、原子操作、线程池等概念,是构建高效并发程序的关键。 9. **字符串常量池**:理解字符串在JVM中的存储...

    深入Java 2 SDK

    无论你是Java初学者还是经验丰富的开发者,了解JDK的内部机制和运作原理都将使你在编程道路上更加得心应手。随着Java技术的不断演进,Java 2 SDK虽已成为历史,但它留下的经验和教训,依然值得我们去学习和借鉴。

    《Java虚拟机规范》

    标题《Java虚拟机规范》主要关注点是Java虚拟机(JVM)的设计与工作原理,这包括对Java字节码的理解以及它如何在不同硬件和操作系统平台上实现跨平台的特性。规范中详细介绍了class文件的格式,这是Java源代码编译后...

    JAVAJAVA游戏论文

    本文将主要聚焦于“JAVAJAVA游戏论文”这一主题,深入探讨Java在游戏开发中的应用,以及相关的技术知识。 首先,Java 2 Micro Edition (J2ME) 是Java平台的一个子集,特别设计用于资源有限的嵌入式设备,如移动电话...

    推荐一些JVM原理,JVM调优,JVM内存模型,JAVA并发 电子书1

    标题中提到了JVM原理、JVM调优、JVM内存模型和JAVA并发,这些都是Java虚拟机(JVM)相关的核心概念。JVM是运行Java字节码的虚拟计算机,为Java提供了一个跨平台的环境,确保Java程序可以在不同的操作系统上运行而...

    java2023年初级面试题java概念面试题java基础面试题持续更新中

    这些知识点对于Java初级面试者和初学者至关重要,涵盖了Java的基础概念、与其他语言的区别、平台特性、JVM的工作原理和内存管理,以及性能优化等方面。理解这些内容是成为一名合格的Java开发者的基础。

    jvm虚拟机,数据库,java基本知识

    了解JVM的工作原理,包括内存管理(堆、栈、方法区)、垃圾收集机制(GC)、类加载器和优化策略(比如即时编译JIT),对于提高应用程序性能至关重要。JVM调优是每个Java开发者必备的技能,包括调整堆大小、设置GC...

Global site tag (gtag.js) - Google Analytics