-
Notifications
You must be signed in to change notification settings - Fork 146
使用手册
TencentKona-8 支持以下特性:
- Default CDS Archive 提高启动速度.
- Java Flight Recorder 采集java应用程序的诊断信息.
- Optimized Work Stealing Threads GC线程调度优化
- G1 FullGC 并行化
- G1GC 性能优化
- 异步GC日志
Tencent Kona 默认打开 Default CDS Archive 功能, 用户可以通过以下启动标志关闭该功能:
java -Xshare:off
Tencent Kona 默认关闭 JFR功能, 用户可通过以下步骤使用"
- 使用以下标志启动java
java -XX:+FlightRecorder
- 当应用程序运行时,使用以下命令采集JFR数据
jcmd <your_pid> JFR.start name=<record_name> filename=<dump_file_name>.jfr
- 使用以下命令停止JFR采集:
jcmd <your_pid> JFR.stop
请使用 java mission control (jmc) 7.0以上版本打开*.jfr文件
请参考Oracle的JFR官方文档。
- 默认开启,在启动参数里面显示添加
-XX:-UseOWSTTaskTerminator
关闭
- GC并行线程通过Work Stealing进行负载均衡,减少GC停顿时间。原有Work Stealing算法中所有空闲GC线程都会频繁尝试work stealing造成CPU资源浪费,新算法采用一个master线程监控是否进行work stealing并在适当时机唤醒其它空闲GC线程,极大减少CPU资源浪费和进程间的CPU资源竞争。OWST在OpenJDK社区版本12以后支持,大数据Hibench测试有最多30%的性能提升,平均提升8%。
- 在启动参数里面显示添加
-XX:+G1ParallelFullGC
,这个参数默认是false。
- 官方OpenJDK8u中默认是G1 FullGC是单线程全停机的gc,在TencentKona8.0.4的版本发布的G1的FullGC并行化功能,可以部分阶段多线程执行gc,有效降低FullGC的停机时间,改善系统最坏情况下的性能。
- 未来的CMS被社区放弃,因此G1 GC的优化成为社区最主要的工作,Tencent Kona JDK8持续进行一系列的G1 GC的性能优化。包括很多GC过程的并行化优化: 包括evacuation failure的一些过程的并行化,free collection set的并行化等。以及一系列的G1 GC算法细节的优化,具体详见一些代码仓库的commit log。
- 在启动参数里添加
-XX:+G1RebuildRemSet
, 该参数默认是false(不默认打开)。
- G1会一直维护老区的remembered set,这回带来很多的内存以及GC吞吐量的开销,在TencentKona8.0.5的版本之后,会在concurrent阶段重新rebuild老区的remembered set,降低G1GC的内存开销以及提升G1GC的吞吐量。
- KonaJDK参考社区Loom方案在Kona8中提供协程解决方案。
- KonaJDK中提供了Java协程实现VirtualThread,相比Java线程线程切换快、占用内存少,在保持原有Java同步编程的模式的情况下,降低了线程创建、切换的开销,适用于高并发的业务场景。
- KonaJDK8 提供协程VirtualThread是一个标准的Java/lang/Thread子类,支持Thread的绝大部分操作、线程工厂(ThreadFactory),可以方便地将现有的程序切换使用协程。
- 用户代码层面主要使用的接口在java/lang/Thread、sun/misc/VirtualThreads中。VirtualThreads提供协程的挂起(park)、恢复(unpark)的操作接口,在调用前需要通过Thread.isVirtual()接口确定当前park/unpark的线程是否是协程。Thread提供了创建协程的API,协程操作的接口都直接复用了线程的接口,包括start、join、sleep、interrupt等。
- 更多信息参考:https://github.com/Tencent/TencentKona-8/wiki/KonaFiber用户文档-292
-XX:+/-UseKonaFiber控制打开、关闭协程功能(默认打开)
对Application class loader 加载的类支持Class-Data Sharing
使用方法:
java -Xshare:off -XX:+UseAppCDS -XX:DumpLoadedClassList=hello.lst -cp hello.jar HelloWorld
java -Xshare:dump -XX:+UseAppCDS -XX:SharedClassListFile=hello.lst -XX:SharedArchiveFile=hello.jsa -cp hello.jar
java -Xshare:on -XX:+UseAppCDS -XX:SharedArchiveFile=hello.jsa -cp hello.jar HelloWorld
更多信息请参考 https://openjdk.java.net/jeps/310
From JDK-8229517: Support for optional asynchronous/buffered logging.
Tencent Kona 默认关闭异步GC日志, 用户可通过以下步骤使用
java -XX:+UseAsyncGCLog
通过对Java进程运行时编译的缓存机制,来减少后续同配置Java进程运行时编译开销; 约束: 支持通过bootstrap class loader,application class loader加载的类所包含的方法;不支持customer class loader加载的类; 支持从jar包读取的类,不支持从目录中读取的class
主参数:-XX:CodeReviveOptions=
Code Revive 推荐使用流程分为以下三步:
将JIT编译器C2生成的native 代码,在进程结束时,缓存在指定的csa文件中;
开启命令:save
参数: -XX:CodeReviveOptions=save,file=<csa文件名>
将多个相同配置的缓存文件合并为一个文件,
开启命令:merge
参数: -XX:CodeReviveOptions=merge,file=<合并后的缓存文件>,input_files=<待合并文件> -XX:CodeReviveOptions=merge,file=<合并后的缓存文件>,input_list_file=<待合并文件列表>
Java应用加载缓存文件,JIT编译时使用缓存的native 代码;
开启命令:restore
参数: -XX:CodeReviveOptions=restore,file=<csa文件名>