竹笋

首页 » 问答 » 环境 » 性能优化之代码的指令层优化
TUhjnbcbe - 2024/10/6 17:14:00
北京看白癜风哪家医院效果好 https://jbk.39.net/yiyuanfengcai/zn_bjzkbdfyy/

怎么优化

没必要,纯属工作不饱和或者瞎折腾

针对第一点,今天本文会给出详细的答案;针对第二点,大家说的也没错,这种优化,你不管系统基本照样运行,但是,作为程序员,拿追剧、刷视频的时间来折腾一些技术,我是很喜欢的,喜欢和这种细节battle,不弄明白吃饭也不香。很多时候,我们要具有瞎折腾的勇气和好奇心,尤其是在当下这种浮躁的环境下;当然,这都是本文的题外话,扯远了。

OK,我们言归正传。为什么三目运算符中包装类型和基本类型共存时会影响性能呢?比如:

IntegerbrandId=Objects.isNull(content.getBrandId())?0:content.getBrandId();

首先影响性能是肯定的(性能优化不是银弹,高并发场景下我们需要方方面面的优化)。要知道上述代码为什么会影响性能就要从java代码的执行原理来说了,大家应该都知道我们写的.java文件要想被执行,需要经过加载-链接-初始化,然后JVM才会执行对应的代码,JVM拿到class文件即字节码文件去执行对应的指令。如下图:

JVM加载流程

所以对于上图中的代码,即如下代码:

for(StrategyContentDOcontent:saveRequestDTO.getStrategyContentList()){

IntegercategoryId=content.getCategoryId();

IntegerbrandId=Objects.isNull(content.getBrandId())?0:content.getBrandId();

doCheck4Busi(uniqueChecker,content,categoryId,brandId);

}

我们需要拿到它的字节码对应的JVM执行指令,一看便知。你可以通过javac命令编译Java文件为字节码文件,即javacxxx.java,因为字节码文件我们人类看不懂,所以你可以再用javap命令将字节码文件反汇编为JVM的执行指令,这个执行指令我们是可以阅读的,即javap-cxxx。上述获取执行指令的过程觉得麻烦,这里推荐idea中的一个插件:jclasslibBytecodeViewer(文末有使用说明,很简单很方便)。这里我贴出相关代码的执行指令,我们一起看下:

没有优化时的代码对应的JVM执行指令:

......省略一些无关指令

aload6

invokevirtual#25

1
查看完整版本: 性能优化之代码的指令层优化