首页 > 编程语言 >java的三种编译(JAVAC,JIT,AOT)

java的三种编译(JAVAC,JIT,AOT)

时间:2024-05-08 09:57:19浏览次数:25  
标签:java JAVAC 对象 编译 JIT 逃逸 线程

1.javac把java代码编译成字节码(中间代码),然后由java虚拟机解释执行
2.jit(运行时编译)把java代码直接编译成机器码,然后由java虚拟机直接运行(缓存)。有对客户端的C1和对服务器端的C2编译器
缓存
代码优化
逃逸分析,是否超出范围。对不同逃逸状态做优化
全局逃逸
对象超出了方法或线程的范围,比如被存储在静态字段或作为方法的返回值。

            参数逃逸
                对象被作为参数传递或被参数引用,但在方法调用期间不会全局逃逸。

            无逃逸
                对象可以被标量替换,意味着它的内存分配可以从生成的代码中移除。


        锁消除
            借助逃逸分析来判断同步块所使用的锁对象是否只能够被一个线程访问而没有被发布到其他线程。
            编译这个同步块的时候就会取消对这部分代码的同步

        标量替换&栈上分配
            经过逃逸分析,发现一个对象不会被外界访问的话,那么经过JIT优化,就会把这个对象拆解成若干个其中包含的若干个成员变量来代替。这个过程就是标量替换。
            某一个局部对象没有逃逸到线程和方法外的话,那么这个对象就可能不会在堆上分配内存,而是进行栈上分配。用完直接删

        锁膨胀
        方法内联
            方法内联意味着将一个方法的代码直接插入到调用它的地方,从而避免了方法调用的开销。

3.aot编译就生成机器码,是静态编译技术(深入理解JVM 1.5.3)

    java程序之所以能做静态编译,就是因为封闭性假设,要求所有运行时内容必须在编译时可见,并且可以被编译到native image。
    编译后平台相关性,不会再run anywhere

但是aot编译尽管没有编译时间的压力,效果不一定比JIT效果好

标签:java,JAVAC,对象,编译,JIT,逃逸,线程
From: https://www.cnblogs.com/liang302/p/18179014

相关文章

  • 「Java开发指南」如何用MyEclipse搭建GWT 2.1和Spring?(一)
    本教程将指导您如何生成一个可运行的GoogleWebToolkit(GWT)2.1和Spring应用程序,该应用程序为域模型实现了CRUD应用程序模式。在本教程中,您将学习如何:安装GoogleEclipse插件为GWT配置一个项目搭建从数据库表到一个现有的项目GWT编译部署应用程序注意:自定义Spring代码......
  • java异常报警
    `@Component@Aspect@Slf4jpublicclassServiceExceptionHandler{@ResourceExceptionWarnSendsend;//Service层切点@Pointcut("@annotation(mrh.com.modules.app.annotation.ServiceJobExcepCatch)")publicvoidserviceAspect(){}//全局异常注解@Around(&......
  • IDEA多版本Java
    过程到官网下载不同版本的JDK解压到指定的路径在IDEA中添加其他版本的JDK,使用时只需要进行切换就可以。JDK下载JDK下载地址:http://jdk.java.net/JDK8下载地址:https://www.oracle.com/java/technologies/downloads/archive/先将java安装到指定的文件路径F:\JavaEnviron......
  • [JS] idea中javascript显示无背景色,不能点击大括号收起代码
    idea idea安装组件File->Settings->pluginsmarketplace搜索安装javascriptandtypescript插件(如果marketplace搜素搜索不到,搜索下installed里是否已经安装过了;如果已经安装过了且勾选框是选中的,去勾选插件,保存。然后重新再勾选上,保存) 效果如下: ......
  • 解决远程调用三方接口:javax.net.ssl.SSLHandshakeException:sun.security.validator.Va
    一、前言最近在对接腾讯会议API接口,在鉴权完成后开始调用对方的接口,在此过程中出现调用报错:javax.net.ssl.SSLHandshakeException。二、出现原因当你在进行https请求时,JDK中不存在三方服务的信任证书,导致出现错误javax.net.ssl.SSLHandshakeException:sun.security.validator.Va......
  • java 两个列表的元素是否相等且各自元素数量相等
    示例如下:importjava.util.*;publicclassMain{publicstaticvoidmain(String[]args){List<String>list1=Arrays.asList("深圳攀峰运","深圳攀峰运","广州博纳德","广州博纳德","广州博纳德","广州博纳德");......
  • java容器化项目改造
    dockerjava项目容器化改造前后端分离项目前端https://gitee.com/yuco/eladmin-web.git后端https://gitee.com/yuco/eladmin.git要素:vuenpmspringbootmysqlredisjava后端容器化思路:了解在物理机虚拟机的部署流程,然后编写dockerfile进行容器化部署。java项目,使用mv......
  • Java测试框架Junit5基础知识点
    Junit5测试框架一:创建一个测试用例junit5的测试依赖:<!--junit5新的编程和扩展模型--><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter</artifactId><version>5.8......
  • java代码审计-某酒店管理系统
    java代码审计-某酒店后台管理系统目录java代码审计-某酒店后台管理系统1、简介2、文件上传漏洞3、CSRF漏洞4、存储型XSS1、简介文章只作研究学习,请勿非法渗透测试;该系统是使用SpringMVC+Mysql搭建开发的一套中小型企业酒店后台管理系统;这里只对源代码进行审计,第三方依赖中还......
  • JavaScript 流程控制语句详解:if语句、switch语句、while循环、for循环等
    JavaScript,作为一种广泛使用的编程语言,它的流程控制语句是构建逻辑和实现功能的基础。流程控制语句包括条件语句、循环语句和转向语句,它们是编程中不可或缺的部分。接下来,我们将一一解析这些语句,带你走进JavaScript的世界。一、什么是流程控制语句流程控制语句是用来控制程序中......