
目录一、JDK二、字节码文件三、JVM一、JDKJDKJava Development Kit是Java开发工具包用于创建和编译Java程序包括API类库编译器javacJava虚拟机首先使用JDK的API类库编写.java程序。JDK的编译器javac将.java文件编译成字节码文件.class。.class文件会被打包成jar包或者war包。JVM中的解释器逐行解释.class文件为当前OS可执行的用于操作硬件的机器码由OS执行机器码。因此编写、编译、运行Java程序都需要JDK。二、字节码文件.class文件是.java源代码通过javac编译器后生成的字节码文件。在Java源代码和JVM之间加入.class文件的原因我理解的有2点防止源代码泄露。可以在运行文件前预编译并打包成jar包直接在客户机上运行防止运行时检查语法提高执行速度。高级编程语言可分为两种编译型语言在编译阶段将源代码一次性翻译成可被该平台执行的机器码例如C、Go由于编译阶段直接翻译成机器码了所以运行阶段可以直接运行速度快。缺点是对于不同的操作系统应使用各自的编译器进行编译不然OS无法识别、修改代码后必须重新编译才能看到效果开发周期长。解释型语言无需编译直接执行源代码在运行阶段通过解释器一句一句的将代码解释为机器码执行解释器会针对不同的OS翻译成不同的机器码所以这类代码在运行时要首先解析语法然后翻译成机器码执行速度慢。Java语言属于编译解释型语言由于JVM内部实现了对象内存的分配和回收所以相比于编译型语言来说不用手动分配和回收内存使得内存对程序员不可见编写简单。但使用JVM后源代码和机器码之间就不可避免要加JVM因为JVM在运行阶段所以要使用JVM的优势就不可避免在运行阶段翻译源代码为机器码编译阶段不知道内存地址运行速度就会变慢这是所有解释型语言的通病。所以Java语言在源代码和机器码之间加了一个javac编译器对源代码进行检查语法编译成与平台无关的字节码解耦了传统解释型语言在运行阶段检查语法等操作提高运行时速度。三、JVMJava虚拟机Java Virtual Machine, JVM是在运行阶段执行Java字节码.class的虚拟操作系统。JVM出现的原因我的理解是JVM内部实现了对象内存的分配和回收不用向C一样手动分配和回收内存编码更简单。不同OSWindows、Mac、Linux可执行的机器码规则是不同的所以相同的.class文件要能够在不同OS上执行就需要翻译成不同的机器指令JVM可以根据不同OS将.class文件逐行解释成该OS能够执行的机器码。