JAVA程序的执行【JVM,JDK,JRE】

JAVA代码的执行

  1. Java源码 在Java编译器中 经过一系列的加工称.classs文件。
  2. 将.class文件放置到java虚拟机【JVM】。
  3. Java续集你使用类加载器加载class文件。
  4. 类加载器加载完成之后,对字节码进行校验,字节码校验通过后JVM吧字节码翻译成机器码交给操作系统执行。

Java编译器 .java源码 在Java编译器中【词法分析、语法分析、语义分析、字节码生成器】变成.class文件
Java虚拟机 .class文件放入JVM中【类加载器、字节码校验、翻译机器码,编译执行】

所以JVM是java实现跨平台的关键。

字节码

如果某个程序因为不同硬件平台需要编写多套代码,是十分领人崩溃的,而Java可以一次编写,到处执行。Java的跨平台是通过增加一个中间层来解决,字节码"Bytecode"就是该中间层.Java所有执行有200个左右,一个字节(8位)可以存储256种不同的指令信息,一个这样的字节称之为"字节码"。JVM可以将字节码编译执行,如果是热点代码,或通过JIT动态的编译为机器码,提高执行效率。

热点代码:JVM虚拟机判定热点代码的方式有两种:

  • 采样热点判定
    主要是虚拟机周期性检查各个线程的栈顶,若某个方法经常出现在顶,那么这个方法就是热点方法。
  • 计数器热点判定
    虚拟机给每个方法甚至代码块简历一个计数器,统计方法的执行次数,超过一定阀值标记此方法为热点方法。【在Client模式下阀值1500,Server是10000】

在Java编译器中此法解析是通过空格分割出的单词、操作符、控制符等信息,将其形成token信息流,传递给语法解析器,语法解析器把token信息流按照Java语法规范组装成一颗语法树,在语义分析阶段,需要检查关键字使用的是否合理、类型是否匹配、作用域是否正确,当语义解析完成后即可生成字节码。

字节码必须经过类加载器加载到JVM环境后才可以执行。执行有三种模式:

  • 解释执行
  • JIT编译执行
  • JIT编译与解释混合执行

类加载

ClassLoader是提前加载.class文件到CPU中执行,在加载类时,使用的是"双亲委派模式"。

  1. Load阶段读取类文件,产生二进制流,并转换为特定的数据结构,然后创建对应类的java.lang.Class实例。
  2. Link阶段包括验证,准备,解析三个步骤。验证是更加详细的校验,比如final是否合规,数据类型是否正确。
  3. Init阶段执行类构造器。

垃圾回收机制

Java会对内存进行自动分配与回收管理,是上层业务更加安全。垃圾回收(Garbage Collection GC)。垃圾回收主要是清除不在使用的对象,自动释放内存。

  1. 判断对象是否存活。
    JVM引入了GC Roots。如果一个对象与GC Roots之间没有直接或间接的引用关系(某个失去任何引用的对象,或者两个相互引用的对象)判决这些对象的状态是准备回收尚未回收。
    垃圾回收器是实现垃圾回收算法并且应用在JVM环境中的内存管理模块。
    实现垃圾回收器可以参考
    https://www.cnblogs.com/jalja365/archive/2020/01/12/12182064.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值