当前位置: 首页 > 科技观察

Java中的五种代码性能提升技巧,最高提升近10倍

时间:2023-03-12 08:05:01 科技观察

本文介绍几个Java开发中性能优化的小技巧。作为技术开发者,我们还是要追求更小、更快、更强的代码。如果有一天你发现程序的运行速度不尽如人意,你可能会想到这篇文章。提示:我们不应该为了优化而优化,这有时会增加代码的复杂度。本文中的代码在以下环境中进行了性能测试。JMHversion:1.33(Javabenchmarkingframework)VMversion:JDK17,OpenJDK64-BitServerVM,17+35-2724通过本文的测试,你会发现以下操作的性能差异。预分配HashMap的大小,性能提升1/4。优化HashMap的key,性能相差9.5倍。不要用Enum.values()遍历,Spring以前就是这么优化的。使用Enum而不是String常量以获得1.5倍更好的性能。使用更高版本的JDK,基本操作有2-5倍的性能差异。预先分配HashMap的大小。HashMap是Java中最常用的集合之一。大部分操作都很快,但是HashMap很慢,很难在调整自身容量的时候自动优化。因此,在定义一个HashMap之前,应该尽可能的给出它的容量。给出尺寸值时应考虑载荷系数。HashMap默认的加载因子是0.75,即要设置的size值要除以0.75。相关文章:HashMap源码分析解读下面使用JMH进行benchmark,测试分别向初始容量为16和32的HashMap插入14个元素的效率。/***@authorhttps://www.wdbyte.com*/@State(Scope.Benchmark)@Warmup(iterations=3,time=3)@Measurement(iterations=5,time=3)publicclassHashMapSize{@Param({"14"})intkeys;@Param({"16","32"})intsize;@BenchmarkpublicHashMapgetHashMap(){HashMapmap=newHashMap<>(size);for(inti=0;istringMap;privateMappairMap;privateString[]prefixes;privateString[]suffixes;@Setup(Level.Trial)publicvoidsetup(){prefixes=newString[size];suffixes=newString[size];stringMap=newHashMap<>();pairMap=newHashMap<>();for(inti=0;ima??p;privateAnEnum[]values;@Setup(Level.Trial)publicvoidsetup(){map=newEnumMap<>(AnEnum.class);values=newAnEnum[size];AnEnum[]enumValues=AnEnum.values();SplittableRandomrandom=newSplittableRandom(seed);for(inti=0;ima??p;privateString[]values;@Setup(Level.Trial)publicvoidsetup(){map=newHashMap<>();值s=newString[size];AnEnum[]enumValues=AnEnum.values();intpos=0;SplittableRandomrandom=newSplittableRandom(seed);for(inti=0;ibyteList;@Setup(Level.Trial)publicvoidsetup(){byteList=newArrayList<>(size);stringArray=newString[size];for(inti=0;i