Liberica JDK Performance Edition: User's Guide


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
ON THIS PAGE