小师妹学JVM之:JDK14中JVM的性能优化

简介
上一篇文章我们讲到了JVM为了提升解释的性能,引入了JIT编译器,今天我们再来从整体的角度,带小师妹看看JDK14中的JVM有哪些优化的方面,并且能够从中间得到那些启发。

更多精彩内容且看:

区块链从入门到放弃系列教程-涵盖密码学,超级账本,以太坊,Libra,比特币等持续更新
Spring Boot 2.X系列教程:七天从无到有掌握Spring Boot-持续更新
Spring 5.X系列教程:满足你对Spring5的一切想象-持续更新
java程序员从小工到专家成神之路(2020版)-持续更新中,附详细文章教程
String压缩
小师妹:F师兄,上次你给我讲的JIT真的是受益匪浅,原来JVM中还有这么多不为人知的小故事。不知道除了JIT之外,JVM还有没有其他的性能提升的姿势呢?

姿势当然有很多种,先讲一下之前提到过的,在JDK9中引入的字符串压缩。

在JDK9之前,String的底层存储结构是char[],一个char需要占用两个字节的存储单位。

因为大部分的String都是以Latin-1字符编码来表示的,只需要一个字节存储就够了,两个字节完全是浪费。

于是在JDK9之后,字符串的底层存储变成了byte[]。

目前String支持两种编码格式LATIN1和UTF16。

LATIN1需要用一个字节来存储。而UTF16需要使用2个字节或者4个字节来存储。

在JDK9中,字符串压缩是默认开启的。你可以使用 -XX:-CompactStrings
来控制它。

分层编译(Tiered Compilation)
为了提升JIT的编译效率,并且满足不同层次的编译需求,引入了分层编译的概念。

大概来说分层编译可以分为三层:

第一层就是禁用C1和C2编译器,这个时候没有JIT进行。
第二层就是只开启C1编译器,因为C1编译器只会进行一些简单的JIT优化,所以这个可以应对常规情况。
第三层就是同时开启C1和C2编译器。
在JDK7中,你可以使用下面的命令来开启分层编译:-XX:+TieredCompilation
而在JDK8之后,恭喜你,分层编译已经是默认的选项了,不用再手动开启。

Code Cache分层
Code Cache就是用来存储编译过的机器码的内存空间。也就说JIT编译产生的机器码,都是存放在Code Cache中的。

Code Cache是以单个heap形式组织起来的连续的内存空间。

如果只是用一个code heap,或多或少的就会引起性能问题。为了提升code cache的利用效率,JVM引入了Code Cache分层技术。

分层技术是什么意思呢?

就是把不同类型的机器码分门别类的放好,优点嘛就是方便JVM扫描查找,减少了缓存的碎片,从而提升了效率。

下面是Code Cache的三种分层:新的JIT编译器Graal
之前的文章我们介绍JIT编译器,讲的是JIT编译器是用C/C++来编写的。

而新版的Graal JIT编译器则是用java来编写的。对的,你没看错,使用java编写的JIT编译器。

有没有一种鸡生蛋,蛋生鸡的感觉?不过,这都不重要,重要的是Graal真的可以提升JIT的编译性能。

Graal是和JDK一起发行的,作为一个内部的模块:jdk.internal.vm.compiler。

Graal和JVM是通过JVMCI(JVM Compiler Interface)来进行通信的。其中JVMCI也是一个内部的模块:jdk.internal.vm.ci。
注意,Graal只在Linux-64版的JVM中支持,你需要使用 -XX:+UnlockExperimentalVMOptions -XX:+UseJVMCICompiler 来开启Graal特性。
前置编译
我们知道在JIT中,通常为了找到热点代码,JVM是需要等待代码执行一定的时间之后,才开始进行本地代码的编译。这样做的缺点就是需要比较长的时间。

同样的,如果是重复的代码,没有被编译成为机器码,那么对性能就会有影响。

而AOT(Ahead-of-time)就厉害了,看名字就知道是提前编译的意思,根本就不需要等待,而是在JVM启动之前就开始编译了。

AOT提供了一个java tool,名字叫做jaotc。显示jaotc的命令格式:
jaotc
jaotc <–module name>
比如,我们可以这样提前编译AOT库,以供在后面的JVM中使用:

jaotc --output libHelloWorld.so HelloWorld.class
jaotc --output libjava.base.so --module java.base
上面代码提前编译了HelloWorld和它的依赖module java.base。

然后我们可以在启动HelloWorld的时候,指定对应的lib:

java -XX:AOTLibrary=./libHelloWorld.so,./libjava.base.so HelloWorld
这样在JVM启动的时候,就回去找相应的AOTLibrary。
压缩对象指针
对象指针用来指向一个对象,表示对该对象的引用。通常来说在64位机子上面,一个指针占用64位,也就是8个字节。而在32位机子上面,一个指针占用32位,也就是4个字节。

实时上,在应用程序中,这种对象的指针是非常非常多的,从而导致如果同样一个程序,在32位机子上面运行和在64位机子上面运行占用的内存是完全不同的。64位机子内存使用可能是32位机子的1.5倍。

而压缩对象指针,就是指把64位的指针压缩到32位。

怎么压缩呢?64位机子的对象地址仍然是64位的。压缩过的32位存的只是相对于heap base address的位移。

我们使用64位的heap base地址+ 32位的地址位移量,就得到了实际的64位heap地址。

对象指针压缩在Java SE 6u23 默认开启。在此之前,可以使用-XX:+UseCompressedOops来开启。

Zero-Based 压缩指针刚刚讲到了压缩过的32位地址是基于64位的heap base地址的。而在Zero-Based 压缩指针中,64位的heap base地址是重新分配的虚拟地址0。这样就可以不用存储64位的heap base地址了。

Escape analysis逃逸分析
最后,要讲的是逃逸分析。什么叫逃逸分析呢?简单点讲就是分析这个线程中的对象,有没有可能会被其他对象或者线程所访问,如果有的话,那么这个对象应该在Heap中分配,这样才能让对其他的对象可见。

如果没有其他的对象访问,那么完全可以在stack中分配这个对象,栈上分配肯定比堆上分配要快,因为不用考虑同步的问题。

我们举个例子: public static void main(String[] args) {
example();
}
public static void example() {
Foo foo = new Foo(); //alloc
Bar bar = new Bar(); //alloc
bar.setFoo(foo);
}
}

class Foo {}

class Bar {
private Foo foo;
public void setFoo(Foo foo) {
this.foo = foo;
}
}

上面的例子中,setFoo引用了foo对象,如果bar对象是在heap中分配的话,那么引用的foo对象就逃逸了,也需要被分配在heap空间中。

但是因为bar和foo对象都只是在example方法中调用的,所以,JVM可以分析出来没有其他的对象需要引用他们,那么直接在example的方法栈中分配这两个对象即可。

逃逸分析还有一个作用就是lock coarsening。

为了在多线程环境中保证资源的有序访问,JVM引入了锁的概念,虽然锁可以保证多线程的有序执行,但是如果实在单线程环境中呢?是不是还需要一直使用锁呢?
http://groups.tianya.cn/post-3524-06ce5bed87ef48478ded61507d008788-1.shtml
http://groups.tianya.cn/post-3524-f48fe2c651e94a6eaf912857a2d474ce-1.shtml
http://groups.tianya.cn/post-3524-1fadb7c9f10e4fadb382192f65a82f94-1.shtml
http://groups.tianya.cn/post-3524-8cd5569b39c84d50b6d7375f14ae6732-1.shtml
http://groups.tianya.cn/post-3524-415d11d4016d4623bd2914be297c5d1b-1.shtml
http://groups.tianya.cn/post-3524-97a738e662114a788ee519a12383b34a-1.shtml
http://groups.tianya.cn/post-3524-8cfcf29ea378438a80e7256a0f57dc2e-1.shtml
http://groups.tianya.cn/post-3524-6a86a6e4e79b416ab4acaa9d79b50321-1.shtml
http://groups.tianya.cn/post-3524-3344e2a0d3bb45289d559dcccd466286-1.shtml
http://groups.tianya.cn/post-3524-a6c42e77730b4962bb6f224eaf8f85d2-1.shtml
http://groups.tianya.cn/post-3524-c56ea58dbc0c4c4aa67f7b17b5f28df5-1.shtml
http://groups.tianya.cn/post-3524-421a73e48d1a4333a44057b75d1d7aab-1.shtml
http://groups.tianya.cn/post-3524-31c26d622f994eeda51eb1420f716a0a-1.shtml
http://groups.tianya.cn/post-3524-74ba4164895e4917a6df3c0189fc57b5-1.shtml
http://groups.tianya.cn/post-3524-b5da6ed8c6104bb3b050dff13612e0aa-1.shtml
http://groups.tianya.cn/post-3524-6027061071c14f198787830e70c95088-1.shtml
http://groups.tianya.cn/post-3524-8312fc6734684b659e12b2cc59a98fe5-1.shtml
http://groups.tianya.cn/post-3524-416bc7fa347249be9c40f43ec7891e8c-1.shtml
http://groups.tianya.cn/post-3524-872d5c86531441169e5d5e65a781a95d-1.shtml
http://groups.tianya.cn/post-3524-f00c45c39a6840cb953c0cd45052ca32-1.shtml
http://groups.tianya.cn/post-3524-6f311155270e452484300996b2ea4ce5-1.shtml
http://groups.tianya.cn/post-3524-9db4a49c86384844b1c673c6d448ca9f-1.shtml
http://groups.tianya.cn/post-3524-ab03fa929fb64c17ae2be218a0a0ab5a-1.shtml
http://groups.tianya.cn/post-3524-e0adce5373024f73bab15c83112b531b-1.shtml
http://groups.tianya.cn/post-3524-3871d5551fae4469ac5f4cb4cf4ab8d8-1.shtml
http://groups.tianya.cn/post-3524-20b9b2a311f34425baf6cf95f6116787-1.shtml
http://groups.tianya.cn/post-3524-d18bc458ae3e4e34b782d2ddeaf269fb-1.shtml
http://groups.tianya.cn/post-3524-c5e1643912b44ba3bbff91a491c07c85-1.shtml
http://groups.tianya.cn/post-3524-05ff1d26a7204de1863d0b809ed000bf-1.shtml
http://groups.tianya.cn/post-3524-88f61505c1f9473487eec0feb1839e20-1.shtml
http://groups.tianya.cn/post-3524-97c8004f705e4a3db59e54030cf5ff4e-1.shtml
http://groups.tianya.cn/post-3524-25986d276b004d9a809b08569d7b6d65-1.shtml
http://groups.tianya.cn/post-3524-eb3d44f2935542fb9363c4059f0e5368-1.shtml
http://groups.tianya.cn/post-3524-16eb8ea493764c04b1c9f954b7db2fd0-1.shtml
http://groups.tianya.cn/post-3524-61c590db77cb4dba8afc834e78ba017f-1.shtml
http://groups.tianya.cn/post-3524-d7896e6086424416b706d0bd6db511db-1.shtml
http://groups.tianya.cn/post-3524-7d9e9d91c4c84093a52303e1d8a8f8d4-1.shtml
http://groups.tianya.cn/post-3524-a1b4bf48dd5b4e178a259c6fa6f3b971-1.shtml
http://groups.tianya.cn/post-3524-fce5d840cb7e4ca3afa2785d82da2e04-1.shtml
http://groups.tianya.cn/post-3524-0cee89f1557d4f27838262859df0ac85-1.shtml
http://groups.tianya.cn/post-3524-f0496962cced4829868b35411c310837-1.shtml
http://groups.tianya.cn/post-3524-0e32391c66904884987ed003ce376e16-1.shtml
http://groups.tianya.cn/post-3524-553ed552d3674f2396efd5d382c31edc-1.shtml
http://groups.tianya.cn/post-3524-e706b3b3b6d54883911b879313e194f2-1.shtml
http://groups.tianya.cn/post-3524-8452804b4a184e75abdc2cc49ab1f714-1.shtml
http://groups.tianya.cn/post-3524-7a7dcec462354aa3be11078f7d1d6ea0-1.shtml
http://groups.tianya.cn/post-3524-9509fdd7f0dd41338c1cbe19eccf8097-1.shtml
http://groups.tianya.cn/post-3524-f9e21a213eaf465e87dda2960c81518a-1.shtml
http://groups.tianya.cn/post-3524-c5aaa4a6ba2149f587b3eca07fd4710a-1.shtml
http://groups.tianya.cn/post-3524-61d7849969364624952beba97fedb9d3-1.shtml
http://groups.tianya.cn/post-3524-256742ef8a884b1d95fdf16c0b6ea784-1.shtml
http://groups.tianya.cn/post-3524-4f1ea689319b418ba7892340802e0e7a-1.shtml
http://groups.tianya.cn/post-3524-c6b89b180a0b44f19b3e3a2802ab3e7f-1.shtml
http://groups.tianya.cn/post-3524-2710433ed69346d9aa9e10665977f556-1.shtml
http://groups.tianya.cn/post-3524-29466808cb8840b5b0cbd0903255658a-1.shtml
http://groups.tianya.cn/post-3524-3a6621c41e51413193a37b206b88176f-1.shtml
http://groups.tianya.cn/post-3524-16156297a42946dfb24a090e5647c108-1.shtml
http://groups.tianya.cn/post-3524-19bb378b4e4b4d88ba3334896f9a5313-1.shtml
http://groups.tianya.cn/post-3524-d9fbd90c4fef41cab9266f45fc76ce45-1.shtml
http://groups.tianya.cn/post-3524-3334d5560a554d49b554e1c68d3e3065-1.shtml
http://groups.tianya.cn/post-3524-acbf4344731c43c3929164870737c8ff-1.shtml
http://groups.tianya.cn/post-3524-1b1699088c804de28cbd63a918b3a514-1.shtml
http://groups.tianya.cn/post-3524-276997d8b8e54a6389288292a7fdecde-1.shtml
http://groups.tianya.cn/post-3524-fcfb5bdb99bd400a8744d178ea0a5222-1.shtml
http://groups.tianya.cn/post-3524-c27bb39805a14b46892154443ba09250-1.shtml
http://groups.tianya.cn/post-3524-753ba401c6484f409f384f10d55205d4-1.shtml
http://groups.tianya.cn/post-3524-786aec12c5fe4d02a0eac215b229ca4d-1.shtml
http://groups.tianya.cn/post-3524-77f68128f6ed4fddb0278ae08a69d1b6-1.shtml
http://groups.tianya.cn/post-3524-bbdbe3d18338415a990cdc0b92310620-1.shtml
http://groups.tianya.cn/post-4531-26eb44e04728451a8cc72ae9e04d436c-1.shtml
http://groups.tianya.cn/post-4531-49342ce59af24219a597edff4a69d742-1.shtml
http://groups.tianya.cn/post-4531-c5cfef466ddd4279ad3a743359fd22f4-1.shtml
http://groups.tianya.cn/post-4531-fa94b91986344255b40086cd4318c2d1-1.shtml
http://groups.tianya.cn/post-4531-5d63097c74e34c5a8f2c7e32aac3f36b-1.shtml
http://groups.tianya.cn/post-4531-3e0a9bfd68674a7abfa9eb07c95d802d-1.shtml
http://groups.tianya.cn/post-4531-329a67862572479a8f768c4bae46f7a3-1.shtml
http://groups.tianya.cn/post-4531-bd5c8ebfb407429fb84e9819bb856ea3-1.shtml
http://groups.tianya.cn/post-4531-5dcd1d75c02341428165d475a2bf2b29-1.shtml
http://groups.tianya.cn/post-4531-8d50e2b70e6a4b3384ffe41dabe65564-1.shtml
http://groups.tianya.cn/post-4531-1722797d8dac4078950e5a475bfac86c-1.shtml
http://groups.tianya.cn/post-4531-4545e5fd3da54a0690dee29ca0261a61-1.shtml
http://groups.tianya.cn/post-4531-37f81ff1367e425a97233c4d898249f5-1.shtml
http://groups.tianya.cn/post-4531-eed0fba110924795bd63b6c231555518-1.shtml
http://groups.tianya.cn/post-4531-f3f8a798f9a54451be67b23fc539eedb-1.shtml
http://groups.tianya.cn/post-4531-dcf79e6f2a104443aaee78a483e65153-1.shtml
http://groups.tianya.cn/post-4531-90c065bcf95743a99a7db13e1270bcc1-1.shtml
http://groups.tianya.cn/post-4531-505bb56b1fec4c3c823170fdb5c6120c-1.shtml
http://groups.tianya.cn/post-4531-ee0e17a1c03e427aac3f37992d1cee63-1.shtml
http://groups.tianya.cn/post-4531-1c708fe9e3104d0594cfa6b8a5da8c0d-1.shtml
http://groups.tianya.cn/post-4531-abf4e1d161344f31a1e27253edcbce59-1.shtml
http://groups.tianya.cn/post-4531-adeb161d808148dbaaab41b4da42c7e8-1.shtml
http://groups.tianya.cn/post-4531-36db5ae38d4d4d6fa7ea6a17716a06e4-1.shtml
http://groups.tianya.cn/post-4531-bf635e53bee84a1a89c52aa2dcedc83d-1.shtml
http://groups.tianya.cn/post-4531-cf8c61e6f2cc4e05a3e79bbe7f1e7d6c-1.shtml
http://groups.tianya.cn/post-4531-1d4b42e062654634a4d52eba1f9fc351-1.shtml
http://groups.tianya.cn/post-4531-3a289f2d6e8d4cf3a1f97c5611807b2e-1.shtml
http://groups.tianya.cn/post-4531-8a30556fd26b4fc2a13b8fd220fc1ddf-1.shtml
http://groups.tianya.cn/post-4531-8a0238d8e2a048dea0278d1b820d4437-1.shtml
http://groups.tianya.cn/post-4531-cf23de27fbec4efb9303825999916768-1.shtml
http://groups.tianya.cn/post-4531-e427ccf78efa45248c589800b2d708e6-1.shtml
http://groups.tianya.cn/post-4531-7652148dc6454a6dac332713f2b89340-1.shtml
http://groups.tianya.cn/post-4531-0a8b62dd9fd843bdb21f940ee8eaaab9-1.shtml
http://groups.tianya.cn/post-4531-520373d8e2b74c71b8e3efc08c011060-1.shtml
http://groups.tianya.cn/post-4531-1552da4101924b8789a4895789a643fa-1.shtml

你可能感兴趣的:(java)