当前位置: 首页 > news >正文

Java源文件的执行过程

目录

1.JVM

2.字节码

3.Java源文件执行的过程

4.JIT(Just In Time Compilation)

5.AOT(Ahead Of Time Compilation)

6.AOT破坏Java动态性

7.编译型语言与解释型语言

8.Java-编译与解释并存的语言

9.Java和C++的相同点与不同点

10.Oracle JDK 和 Open JDK


1.JVM

1.定义:Java虚拟机

2.作用:运行Java字节码文件

3.实现方式:针对不同的操作系统(Windows、MacOS、Linux)存在不同的实现方式。目的是运行相同的Java字节码文件,在不同系统中给出相同的结果

4.自定义JVM:只要满足JVM规范,就可以自定义自己的JVM

2.字节码

1.定义:字节码就是JVM能够处理的代码,是面向虚拟机

2.优点:由于字节码是面向虚拟机的,因此在不同操作系统可以无需重新编译;并且执行效率高

3.Java源文件执行的过程

过程:Java源文件--->javac编译--->.class文件(字节码文件)--->解释运行--->机器码

重点:字节码文件到机器码这一过程中,Java的类的加载器需要先将字节码文件加载到内存中,然后解释器开始逐行解释执行,这样做效率低。引入JIT(just in Time Compilation)运行时编译器,能够在编译后将字节码文件对应的机器码保存下来,机器码的运行效率是比较高的。

4.JIT(Just In Time Compilation)

1.定义:运行时编译器;在对字节码文件解释运行时边运行边编译,并将编译后字节码文件对应的机器码保存下来,从而提高程序运行效率

2.优点:根据内存中实际情况调整代码;根据运行情况生成最优机器指令序列

   缺点:需要占用运行时资源,导致程序卡顿;编译准备和识别时会占用时间,使得初始编译不能达到最高性能

5.AOT(Ahead Of Time Compilation)

1.定义:提前编译器对字节码文件在执行前就编译为机器码;可以减少JIT初始编译时无法达到最高性能的问题 

2.优点:在程序编译前编译,避免在运行中占用系统资源;在程序运行初期就达到最高性能

   缺点:提前编译会占用更多外存;牺牲了Java的动态性

6.AOT破坏Java动态性

Java中的反射机制是动态获取运行时类的对象及调用运行时类的方法,此时只能采用JIT进行编译;若采用AOT,则全部已经提前编译,无法动态的修改运行时类的属性

7.编译型语言与解释型语言

编译型:通过编译器将源代码一次性翻译为可以被平台执行的机器码

        优点:执行速度快

        缺点:开发效率低

        实例:C、C++、Go

解释型:通过解释器将代码逐行解释为机器码后,被平台执行

        优点:开发效率高

        缺点:执行速度慢

        实例:Python、JavaScript

8.Java-编译与解释并存的语言

为改善编译语言的效率,将编译和运行相结合,使得具有编译语言和解释语言二者的优点。在Java中,先将程序源代码编译为字节码文件;在执行时,再将字节码文件解释为机器码

9.Java和C++的相同点与不同点

相同点:都是面向对象的语言;都支持封装、继承、多态

不同点:

        Java不提供指针直接访问内存,程序更安全

        Java类是单继承,C++的类支持多继承

        Java存在GC垃圾自动回收,无法手动释放无用内存

        C++支持方法重载和操作符重载Java只支持方法重载

        

10.Oracle JDK 和 Open JDK

Sun公司2006将Java开源,因此有了Open JDK

Oracle公司2009年收购了Sun公司,在Open JDK基础上整理出Oracle JDK,Oracle JDK不开源

二者区别:

        是否开源:Oracle JDK是不完全开源的,Open JDK是开源的

        是否免费:Oracle JDK仅仅3年免费,Open JDK免费

        功能性:Oracle JDK相比于Open JDK添加了特有的功能和工具

        

http://www.lryc.cn/news/93297.html

相关文章:

  • 10个ai算法常用库java版
  • 怎么看服务器带宽大小 103.219.179.X
  • 图形编辑器开发:最基础但却复杂的选择工具
  • apk签名-signapk.jar
  • 【100个高大尚求职简历】简历模板+修改教程+行业分类简历模板 (涵盖各种行业) (简历模板+编辑指导+修改教程)
  • Nginx平滑升级版本或添加模块
  • 高阶复杂网络重建:从时间序列中重建高阶网络
  • Day05 03-MySQL主从-主主原理与搭建详解
  • STL之vector
  • 2020年CSP-J认证 CCF非专业级别软件能力认证第一轮真题-单项选择题解析
  • vscode Delete `␍⏎·····`
  • 读书笔记-《ON JAVA 中文版》-摘要16[第十六章 代码校验]
  • SQL Server:打造高效数据管理系统的利器
  • 代码随想录二刷day20 | 二叉树之 654.最大二叉树 617.合并二叉树 700.二叉搜索树中的搜索 98.验证二叉搜索树
  • python基础知识(十三):numpy库的基本用法
  • 【SA8295P 源码分析】16 - TouchScreen Panel (TP)线程函数 tp_recv_thread() 源码分析
  • Python3数据分析与挖掘建模(13)复合分析-因子关分析与小结
  • 【stable diffusion】图片批量自动打标签、标签批量修改(BLIP、wd14)用于训练SD或者LORA模型
  • TCP可靠数据传输
  • Python 私有变量和私有方法介绍
  • Kotlin Lambda表达式和匿名函数的组合简直太强了
  • uniapp 小程序 获取手机号---通过前段获取
  • 面板安全能力持续增强,新增日志审计功能,1Panel开源面板v1.3.0发布
  • k8s学习-CKS考试必过宝典
  • jmeter如何将上一个请求的结果作为下一个请求的参数
  • JAVA如何学习爬虫呢?
  • 距离保护原理
  • 从微观世界的RST包文视角助力企业网络应用故障排查和优化
  • 企业微信开发,简单测试。
  • element日期选择设置默认时间el-date-picker