java程序运行步骤 如何运行java

JDK的构成
java开发工具包
JDK:JDK是Java开发工具包,是Sun Microsystems针对Java开发员的产品 。JDK中包含JRE(在JDK的安装目录下有一个名为jre的目录,里面有两个文件夹bin和lib,在这里可以认为bin里的就是jvm,lib中则是jvm工作所需要的类库,而jvm和 lib合起来就称为jre)和一堆Java工具(javac/java/jdb等)和Java基础的类库(即Java API 包括rt.jar) 。Java Runtime Environment(JRE):是运行基于Java语言编写的程序所不可缺少的运行环境 。也是通过它,Java的开发者才得以将自己开发的程序发布到用户手中,让用户使用 。JRE中包含了Java virtual machine(JVM),runtime class libraries和Java application launcher,这些是运行Java程序的必要组件 。JVM(java virtual machine):就是我们常说的java虚拟机,它是整个java实现跨平台的最核心的部分,所有的java程序会首先被编译为.class的类文件,这种类文件可以在虚拟机上执行 。
JVM架构JVM是运行在操作系统上的一个软件 。
JVM架构
JVM的组成:
类加载子系统 Class loader运行时数据区 JVM 内存模型执行引擎
Java为什么要在虚拟机中运行?简单来说,Java作为一种高级编程语言,语法复杂,抽象度高,直接在硬件上运行这种复杂的程序是不现实的 。因此,Java的设计者设计了一个面向Java语言特点的虚拟机,通过编译器将Java程序转换成虚拟机可以识别的指令序列(JAVA字节码) 。Java字节码会被虚拟机翻译成机器可以识别的机器码,这也实现了Java的跨平台(同一代码可以在不同操作系统的JVM中运行) 。
虚拟机的第二个好处是它带来了一个托管的环境,可以替代我们代码中多余的、容易出错的部分,比如自动内存管理、垃圾回收、动态监控比如数组越界、动态类型、安全权限等 。
JVM如何运行Java字节码?要执行Java代码,首先需要将其编译后的类文件加载到JVM虚拟机中 。加载的Java类将存储在方法区域 。运行时,虚拟机执行方法区的代码;Java虚拟机在内存中划分堆和栈来存储运行时数据 。JVM会把栈细分为Java方法的Java方法栈,本地方法的本地方法栈(C语言写的原生方法),以及存储每个线程执行位置的PC寄存器 。
JVM加载字节码
在运行过程中,每当进入一个Java方法,Java虚拟机就会在当前线程的Java方法栈中生成一个栈帧,用来存储局部变量和字节码操作数 。这个栈帧的大小是预先计算好的,Java虚拟机并不要求栈帧在内存中不断分配空 。在退出当前执行的方法时,JVM会弹出当前线程的当前堆栈帧并丢弃,无论是正常返回还是异常返回 。
当然,Java字节码不能直接在硬件上执行,所以JVM需要把字节码翻译成机器码 。
【java程序运行步骤 如何运行java】在HotSpot中,上述翻译过程有两种形式:第一种是解释和执行,即将字节码逐个翻译成机器码并执行;第二种是实时编译(JIT),即将一个方法中包含的所有字节码在执行前编译成机器码 。
JVM执行字节码
解释执行:无需等待编译,在运行的过程中,需要的时候编译然后执行即时编译:JVM先将字节码编译为机器码,然后在执行,所以在实际运行中速度更快 。
HotSpot默认采用混合模式,它结合了解释执行和即时编译的优点 。它会先解释执行字节码,然后用方法实时编译其中重复执行的热代码 。

    推荐阅读