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 |