Liberica JDK Performance Edition (liberica-perf for short) is a Java runtime that couples JVM 17 and JDK 11. In most cases, you can transfer your workload to liberica-perf without any changes, and see the immediate performance increase up to 10–15%.
Installing Liberica JDK Performance Edition
You can use liberica-perf for developing and running Java applications on a headless or GUI system on Linux. The builds are supported on Intel processors, but the ARM version is also available upon request.
Download the tag.gz
package with Liberica JDK Performance Edition
bundle and install it like any other Java version. Running the
java -version
after the installation will show:
openjdk version "11.0.20" 2023-07-18 LTS
OpenJDK Runtime Environment (build 11.0.20+8-LTS) OpenJDK 64-Bit Server VM (build 17.0.8+8-LTS, mixed mode)
Configuration and usage
Most workloads can be migrated to the new functionality without substantial changes, but in some cases, additional configuration is required.
The coupling of Liberica JDK Performance Edition and JDK 11 will make some libraries behave differently.
Tool and libraries that are not supported on or behave differently in Liberica JDK Performance Edition:
-
JVM compiler interface (JVMCI) is not supported, as well as Graal JIT and AOT that depend on JVMCI. GraalVM is now developed as a separate project. Builds for JDK 11 are available as part of GraalVM CE. You can also use a GraalVM CE-based Liberica Native Image Kit as a native-image compiler.
-
Concurrent Mark Sweep Garbage Collector was removed from JDK 14 (JEP 363) and therefore is not supported.
-
JFR events are based on JVM 17 capabilities. Minor changes in the amount and format of supported events are expected.
-
Some VM log messages were changed. More logging categories are available via the
-Xlog
option (part of JVM 17). -
Only the Server VM is available.
Changes to runtime options
Several JVM runtime options were added from JDK 17, some were removed. See the tables below for additional information.
List of added runtime options
Below is the list of options available in liberica-perf, but absent in JDK 11. For more information on these parameters, see the official documentation.
New options
AdjustStackSizeForTLS
AllowRedefinitionToAddDeleteMethods
ArchiveClassesAtExit
AsyncLogBufferSize
C1InlineStackLimit
C1MaxInlineLevel
C1MaxInlineSize
C1MaxRecursiveInlineLevel
C1MaxTrivialSize
CompilationMode
DynamicDumpSharedSpaces
G1PeriodicGCInterval
G1PeriodicGCInvokesConcurrent
G1PeriodicGCSystemLoadThreshold
G1RSetRegionEntries
G1RSetSparseRegionEntries
HeapDumpGzipLevel
MetaspaceReclaimPolicy
MinHeapSize
RecordDynamicDumpInfo
ShowCodeDetailsInExceptionMessages
SweeperThreshold
UseContainerCpuShares
UseEmptySlotsInSupers
UseNotificationThread
ZMarkStackSpaceLimit
ZProactive
ZUncommit
ZUncommitDelay
List of removed and renamed runtime options
Below is the list of options not available in liberica-perf and the options that were renamed.
Old option
Resolution
AggressiveOpts
Removed in liberica-perf
AllowJNIEnvProxy
Removed in liberica-perf
AllowNonVirtualCalls
Removed in liberica-perf
AssertOnSuspendWaitFailure
Removed in liberica-perf
AssumeMP
Removed in liberica-perf
BindGCTaskThreadsToCPUs
Removed in liberica-perf
BranchOnRegister
Removed in liberica-perf
BytecodeVerificationLocal
Moved to the diagnostic flags category. Use with -XX:+UnlockDiagnosticVMOptions
BytecodeVerificationRemote
Moved to the diagnostic flags category. Use with -XX:+UnlockDiagnosticVMOptions
CMS*
CMS GC is not supported in liberica-perf
CalculateClassFingerprint
AOT is not supported in liberica-perf
CompactFields
Removed in liberica-perf
CompilationPolicyChoice
Removed in liberica-perf
CompilerThreadHintNoPreempt
Removed in liberica-perf
Debugging
Removed in liberica-perf
DeoptimizeRandom
Moved to the non-product category. Not available in release build.
ErrorReportServer
Removed in liberica-perf
FLSAlwaysCoalesceLarge
CMS GC is not supported in liberica-perf
FLSCoalescePolicy
CMS GC is not supported in liberica-perf
FLSLargestBlockCoalesceProximity
CMS GC is not supported in liberica-perf
FailOverToOldVerifier
Removed in liberica-perf
FieldsAllocationStyle
Removed in liberica-perf
ForceNUMA
Removed in liberica-perf
G1RSetRegionEntries
Removed in liberica-perf
G1RSetScanBlockSize
Removed in liberica-perf
G1RSetSparseRegionEntries
Removed in liberica-perf
GCLockerInvokesConcurrent
Removed in liberica-perf
GCTaskTimeStampEntries
Removed in liberica-perf
InitialBootClassLoaderMetaspaceSize
Removed in liberica-perf
InsertMemBarAfterArraycopy
Removed in liberica-perf
LIRFillDelaySlots
Removed in liberica-perf
MonitorBound
Removed in liberica-perf
MonitorInUseLists
Removed in liberica-perf
NeedsDeoptSuspend
Removed in liberica-perf
OldPLABWeight
Removed in liberica-perf
ParGCDesiredObjsFromOverflowList
Removed in liberica-perf
ParGCTrimOverflow
Removed in liberica-perf
ParGCUseLocalOverflow
Removed in liberica-perf
PrintJNIResolving
Functionality moved to unified logging. Use -Xlog:jni+resolve instead
PrintSafepointStatistics
Functionality moved to unified logging. Use -Xlog:safepoint+stats instead
PrintSafepointStatisticsCount
Functionality moved to unified logging. Use -Xlog:safepoint+stats instead
PrintSafepointStatisticsTimeout
Functionality moved to unified logging. Use -Xlog:safepoint+stats instead
PrintVMQWaitTime
Removed in liberica-perf
ProfileIntervals
Removed in liberica-perf
ProfileIntervalsTicks
Removed in liberica-perf
ProfileVM
Removed in liberica-perf
ProfilerPrintByteCodeStatistics
Removed in liberica-perf
ProfilerRecordPC
Removed in liberica-perf
ResizeOldPLAB
Removed in liberica-perf
ShenandoahSoftMaxHeapSize
Known as SoftMaxHeapSize in liberica-perf
StressLdcRewrite
Moved to the diagnostic flags category. Use with -XX:+UnlockDiagnosticVMOptions
SuspendRetryCount
Removed in liberica-perf
SuspendRetryDelay
Removed in liberica-perf
ThreadLocalHandshakes
Removed in liberica-perf
Tier3AOTBackEdgeThreshold
AOT is not supported in liberica-perf
Tier3AOTCompileThreshold
AOT is not supported in liberica-perf
Tier3AOTInvocationThreshold
AOT is not supported in liberica-perf
Tier3AOTMinInvocationThreshold
AOT is not supported in liberica-perf
TraceSuspendWaitFailures
Removed in liberica-perf
TransmitErrorReport
Removed in liberica-perf
UnlinkSymbolsALot
Removed in liberica-perf
UseAdaptiveGCBoundary
Removed in liberica-perf
UseCMSBestFit
CMS GC is not supported in liberica-perf
UseCMSInitiatingOccupancyOnly
CMS GC is not supported in liberica-perf
UseConcMarkSweepGC
CMS GC is not supported in liberica-perf
UseGCTaskAffinity
Removed in liberica-perf
UseLWPSynchronization
Removed in liberica-perf
UseLargePagesInMetaspace
Removed in liberica-perf
UseLegacyJNINameEscaping
Removed in liberica-perf
UseMembar
Removed in liberica-perf
UseOSErrorReporting
Removed in liberica-perf
UseRDPCForConstantTableBase
Removed in liberica-perf
VMThreadHintNoPreempt
Removed in liberica-perf
VerifyMergedCPBytecodes
Removed in liberica-perf
ZMarkStacksMax
Removed in liberica-perf
Zpath
Removed in liberica-perf
ZStallOnOutOfMemory
Removed in liberica-perf
ZStatisticsInterval
Removed in liberica-perf