导读

将源代码翻译为目标代码的过程,称为编译过程。

在这里再次把JDK、JRE、JVM三者是什么解释一下:

JDK是java开发工具包,包括: bin、db、include、jre、ilb文件。其中:

bin是JDK的编译器(javac.exe);db是自带的数据库;Include是java和JVM交互的的头文件;Jre是java运行的环境,jre文件里面的bin文件可以看成jvm,lib文件则是jvm工作时所需要的的类库,jvm和lib一起称为jre.

1.前端编译

java前端编译是指:通过javac编译器(JDK的bin文件)把*.java文件转换为*.class文件的过程 。

优点:

许多Java语法新特性("语法糖":泛型、内部类等等),是靠前端编译器实现的,而不是依赖虚拟机;

编译成的Class文件可以直接给JVM解释器解释执行,省去编译时间,加快启动速度;

缺点:

对代码运行效率几乎没有任何优化措施;

解释执行效率较低,所以需要结合下面的JIT编译;

前端编译器:Oracle javac、Eclipse JDT中的增量式编译器(ECJ)等;

前端编译过程如下图:

2.后端编译

后端编译也称为及时编译(just-in-time compiler), 通过Java虚拟机(JVM)内置的即时编译器(Just In Time Compiler,JIT编译器),在运行时(文件加载内存中运行)把Class文件字节码编译成本地机器码的过程;

2.1 为什么需要后端编译(及时编译)呢?

Java程序最初都是通过解释器进行执行,解释一句,执行一句,效率很低。当发现某个方法或者代码块被运行得非常频繁,即多次执行字节码需要重复翻译为本地代码时,我们可以这些代码就被认为是热点代码,为了提高这些热点代码得运行效率,虚拟机会把热点代码编译成本地机器码,并进行优化,当再次需要执行只写代码时,直接调用就行了,而不需要再次编译或者解释了。所以出现了及时编译。

2.2 怎么样才被认为是热点代码呢?

JVM中会设置一个阈值,当方法或者代码块的在一定时间内的调用次数超过这个阈值时就会被编译,存入codeCache中。当下次执行时,再遇到这段代码,就会从codeCache中读取机器码,直接执行,以此来提升程序运行的性能。整体的执行过程大致如下图所示:

后端编译描述如下图:

参考文章链接地址:

Java | 聊一聊编译过程(编译前端 & 编译后端) - 知乎

基本功 | Java即时编译器原理解析及实践 - 美团技术团队

java前端编译和后端编译理解相关推荐

  1. java前端传时间范围, 后端处理

    二.java前端传时间范围, 后端处理 String timeRange = tcActivity.getTimeRange();if (StringUtils.isNotEmpty(timeRang ...

  2. Java编译分类:前端编译和后端编译

    ava程序代码需要编译后才能在虚拟机中运行,编译涉及到非常多的知识层面:编译原理.语言规范.虚拟机规范.本地机器码优化等:了解编译过程有利于了解整个Java运行机制,不仅可以使得我们编写出更优秀的代码 ...

  3. Java 前端加密传输后端解密以及验证码功能

    1. 加密解密 1.1 前端js加密概述 对系统安全性要求比较高,那么需要选择https协议来传输数据.当然很多情况下一般的web网站,如果安全要求不是很高的话,用http协议就可以了.在这种情况下, ...

  4. java前端怎么和后端连接_web后端和前端是怎么连接的

    展开全部 网站数据处理主要分为三层.32313133353236313431303231363533e4b893e5b19e31333365643662 第一,表示层,这部分可以用HTML代码,CSS ...

  5. java前端传值,后端接收值为null

    后端接收的userIp结果为null 是因为没有加 @RequestBody注解 解决了点个赞呗

  6. 深入理解Java虚拟机(周志明第三版)- 第十一章:后端编译与优化

    系列文章目录 第一章: 走近Java 第二章: Java内存区域与内存溢出异常 第三章: Java垃圾收集器与内存分配策略 从计算机程序出现的第一天起,对效率的追逐就是程序员天生的坚定信仰,这个过程犹 ...

  7. java反编译工具_漫话:如何给女朋友解释什么是编译与反编译

    戳蓝字"CSDN云计算"关注我们哦! 来源 | 漫话编程 某天下班后,我在家里进行电话面试,问到面试者这样一个问题:"你知道使用哪些办法可以反编译Java代码吗?&quo ...

  8. Java——编译与反编译

    ** 一.基础知识 ** 1.1 编程语言 在介绍编译和反编译之前,我们先来简单介绍下编程语言(Programming Language).编程语言(Programming Language)分为低级 ...

  9. Java基础04 编译与反编译

    1. 编译 编译: 把所写的高级语言所写作的源代码程序,转换成计算机能直接识别.执行的低级语言的程序,也就是可执行文件. Java语言的编译: Java语言作为一种高级语言,想要被执行就要通过编译将其 ...

  10. 编译器之后端原理(三十六)

    一.编译器的后端技术 1. 编译器的前端技术,重点是让编译器能够读懂程序,无结构的代码文本经过前端的处理以后,就变成了Token.AST和语义属性.符号表等结构化的信息,基于这些信息,可以实现简单的脚 ...

最新文章

  1. 中gcd函数_欧拉函数φ(n)的计算及欧拉定理
  2. PHP自动加载上——spl_autoload_register
  3. 深入理解C#:编程技巧总结(二)
  4. 解决:java.io.IOException: invalid constant type: 15
  5. FCN-Fully Convolutional Networks
  6. Java Web学习总结(41)——Java EE 8 新功能展望
  7. js实现表格配对小游戏
  8. vmlinux vmlinuz zimage uimage 区别
  9. 高精度乘法———列表法
  10. 【第一篇】Qt学习与使用---将数字转换成中文大写的形式
  11. 联想笔记本如何重启计算机,联想电脑总是自动重启怎么处理
  12. 推荐两个在线代理服务器
  13. 【无标题】UBUNTU22.04 WIFI图标显示
  14. 博弈游戏之三大博弈---bashWythoffNimm
  15. 电脑插上扩展坞后会有显示的空盘符
  16. Android 如何获取唯一性ID实践
  17. 常见的数组及对象常用方法
  18. Ubuntu 16.04 LTS 安装libvips出现”Package vips was not found in the pkg-config search path”
  19. 数据库事务的四大特性和四个隔离级别
  20. 喵帕斯之天才算数少女

热门文章

  1. ubuntu下txt文件中文显示乱码的方法【转载】
  2. 将文件夹下所有csv文件转换成所有txt
  3. simplex字体下载cad_CAD字体大全【资料下载】
  4. Oracle创建约束语句,约束 comment 创建语句
  5. 获取Linux 2.6.x sys_call_table
  6. 现在无法停止通用卷设备_济宁变压器油道设备
  7. mysql统计和程序统计_Mysql之统计数据
  8. mysql 存储过程 查询语句怎么写_mysql 查询数据库中的存储过程与函数的语句
  9. c++中char类型在内存中的表示以及取值范围
  10. 车牌识别代码学习笔记