首页 > 编程语言 >java JIT优化

java JIT优化

时间:2024-04-16 21:00:13浏览次数:35  
标签:java 对象 方法 JIT 逃逸 线程 标量 优化 表达式

JIT优化

1.公告子表达式消除

如果一个表达式的出现多次,并且每次的参数值没有改变,那只需要计算一次,接下来的碰到这个表达式,都会直接取上一次计算的结果

如:int x = a*b+c+d*(a*b);   // a*b是一个公共子表达式,计算了一遍以后,第二次的时候,这个子表达式的参数值都没有变化,所以直接使用上一次这个子表达式的结果

 

2.方法内联

很多时候,为了代码简洁易读等等原因,我们一段逻辑抽成了一个方法,如果运行过程中,这段代码频繁被调用,JVM会把方法替换成方法的内容,就能减少方法调用的压栈操作,节约时间和栈空间,尤其是循环和递归的时候

 

3.逃逸分析之对象的栈上内存分配

如果要创建的对象只会在方法内部使用,不会被外部引用,那么就有可能直接在栈上分配内存来创建这个对象,栈内存是线程私有的,不会涉及到垃圾回收(非常耗费性能),而且栈上的对象只包含实例数据(堆上分配要对象头+实例数据+对齐填充),空间也占得少

 

4.逃逸分析之标量替换

标量:已经是最小单位的数据,比如int,char,long等等

如果一个对象确定不会逃逸,即只会在方法内部使用,不会被别的地方引用,则这个对象会被拆成他的成员变量(标量), 猜测:对象都不存在,标量存在于栈上

 

5.逃逸分析之同步锁消除

synchornized锁住的对象是一个线程私有的,不会被其他线程访问到,那这个锁其实是多余的,JVM会自动帮你去掉锁,加锁和释放锁是耗性能和资源的。

 

逃逸分析有多种,

  • 全局变量赋值逃逸
  • 方法返回值逃逸
  • 实例引用发生逃逸
  • 线程逃逸

 

标签:java,对象,方法,JIT,逃逸,线程,标量,优化,表达式
From: https://www.cnblogs.com/huainanyin/p/17152182.html

相关文章

  • Java开发小白入门前的工具安装
    学习过程是痛苦的,我们要学会苦中作乐!关于java语言的基本介绍百度上都有,拉出来的都很详细,不做过多的介绍,我想写的主要是以干活为主,大家一起学习java的知识。编程的学习主要还是要靠自己勤劳的双手------敲代码,一遍又一遍的把代码敲出来,直到它成为你本能的知识储备。准备,上菜了......
  • Java SE模块 面试知识整理
    基础概念与常识Java语言特点:面向对象(封装、继承、多态)平台无关性(Java虚拟机实现平台无关性,不同版本的操作系统中安装有不同版本的Java虚拟机,Java程序的运行只依赖于Java虚拟机)WriteOnce,RunAnywhere(一次编写,随处运行)支持多线程可靠性(具备异常处理和自动内存管理机制)安全......
  • Java 常用笔记
    问题1org.springframework.beans.factory.BeanCreationException:Errorcreatingbeanwithname'jobConfParser'definedinclasspathresource[com/cxytiandi/elasticjob/autoconfigure/JobParserAutoConfiguration.class]:Initializationofbeanfailed;n......
  • JAVA语言学习-Day13
    参考教学视频:秦疆JVM概述JVM位置:操作系统之上JVM的体系结构.java->ClassFile->类加载器Classloader<-->运行时数据区RuntimeDataArea<-->本地方法接口<-本地方法库运行时数据区RuntimeDataArea<-->执行引擎方法区:MethodAreaJava栈:Stack本地方......
  • React性能优化手册
    此文章属于笔记总结。对应的课程地址:https://www.pluralsight.com/courses/react-performance-playbook相关网站:https://web.developers.google.cn/?hl=zh-cn性能审查检测指标CoreWebvitals:衡量网站是否运行正常的基本指标LCP,LargestContentfulPaint最大内容绘制......
  • mysql sql优化
    1select*杜绝使用不会走索引增加资源消耗2小表驱动大表大表不仅仅是现在大更可能是以后大的表一直新增数据的表3提升groupby效率给groupby字段设置索引4一行一行的插入改为批量插入5大数据表查询时使用limit限制数据的条数深翻页优化1》使用自增id2......
  • JavaScript简介:从概念、特点、组成和用法全面带你快速了解JavaScript!
    JavaScript,简称JS,是一种轻量级的解释型编程语言,它是网页开发中不可或缺的三剑客之一,与HTML和CSS并肩作战,共同构建起我们浏览的网页。今天我们就来了解一下JavaScript,看看它在我们的web前端开发中扮演着什么样的角色。一、JavaScript是什么?JavaScript(简称“JS”)是一种具有函数优......
  • SpringBoot+MybatisPlus 增删改查学习第三章 (C#转JAVA)
    packagecom.example.demo;importcom.baomidou.mybatisplus.core.conditions.query.QueryWrapper;importcom.example.demo.entity.Person;importcom.example.demo.mapper.PersonMapper;importcom.example.demo.service.PersonService;importorg.junit.jupiter.api.Test;i......
  • WPF/C#实现图像滤镜优化方案:打造炫目视觉体验!
    原因:我之所以想做这个项目,是因为在之前查找关于C#/WPF相关资料时,我发现讲解图像滤镜的资源非常稀缺。此外,我注意到许多现有的开源库主要基于CPU进行图像渲染。这种方式在处理大量图像时,会导致CPU的渲染负担过重。因此,我将在下文中介绍如何通过GPU渲染来有效实现图像的各种滤镜效果......
  • java中的抽象
    java中的抽象目录java中的抽象1.抽象类和抽象方法的定义2.抽象类和抽象方法的特点3.abstract的注意事项4.继承方面的特点5.总结1.抽象类和抽象方法的定义抽象类为了把相同但是不确定的东西提取出来,为了方便以后统一使用,并可以具有多种实现方案,目的是为了让子类实现没有方法体......