Liberica JDK: Performance Edition Overview
1. Introduction
Liberica JDK Performance Edition (or liberica-perf) brings some of the performance of JVM 17 to projects that can’t afford complete migration out of JDK 8 or JDK 11. Liberica JDK Performance Edition is only available for Linux x86_64.
2. Features and Enhancements of Liberica JDK Performance Edition
Liberica JDK Performance Edition includes the following features:
-
Z Garbage Collector (new in JDK 8, improved in JDK 11): a scalable, low latency garbage collector.
-
Compact Strings (new in JDK 8): a space-efficient internal representation of strings, which reduces memory footprint and garbage collection activity; it’s enabled by default.
-
Unified JVM Logging (new in JDK 8): replaces JDK options that print details about the JVM with
-Xlog
options.
In addition, Liberica JDK Performance Edition includes the following enhancements:
-
Garbage-First (G1) Garbage Collector: targeted for multiprocessor machines scaling to a large amount of memory. This is the default garbage collector for all versions of Liberica JDK Performance Edition.
-
G1 String Deduplication: reduces the memory footprint of String objects on the Java heap by taking advantage of the fact that many String objects are identical. It’s disabled by default, but you can enable it with the
-XX:+UseStringDeduplication
option. -
Class Data Sharing (CDS): helps reduce the startup time and memory footprint between multiple JVMs. It’s enabled by default in Liberica JDK Performance Edition. To disable it, see Manually Controlling Class Data Sharing.
-
Enhanced JDK Flight Recorder: a tool for collecting diagnostic and profiling data for a running Java application.
Note:
|
Concurrent Mark Sweep Garbage Collector is absent in liberica-perf 8 and 11. |
3. Installing Liberica JDK Performance Edition
Installation procedure for Liberica JDK Performance Edition is similar to Liberica JDK. For detailed Liberica JDK installation and configuration instructions, see Installation Guide for the corresponding Liberica JDK version.
4. Changes to JVM Runtime Options in Liberica JDK Performance Edition
Several JVM runtime options were added from JDK 17, some were removed. See the tables below for additional information.
Changes to runtime options for JDK 11
List of added runtime options
The following is a list of options available in liberica-perf 11, but absent in JDK 11. For more information on these parameters, see the official documentation.
New options in liberica-perf 11 |
---|
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
The table below lists options unavailable in liberica-perf 11 and the options that were renamed.
JDK 11 options | Resolution in liberica-perf 11 |
---|---|
AggressiveOpts | Removed |
AllowJNIEnvProxy | Removed |
AllowNonVirtualCalls | Removed |
AssertOnSuspendWaitFailure | Removed |
AssumeMP | Removed |
BindGCTaskThreadsToCPUs | Removed |
BranchOnRegister | Removed |
BytecodeVerificationLocal | Moved to the diagnostic flags category. Use
with |
BytecodeVerificationRemote | Moved to the diagnostic flags category. Use
with |
CMS* | CMS GC is not supported in liberica-perf 11 |
CalculateClassFingerprint | AOT is not supported in liberica-perf 11 |
CompactFields | Removed |
CompilationPolicyChoice | Removed |
CompilerThreadHintNoPreempt | Removed |
Debugging | Removed |
DeoptimizeRandom | Moved to the non-product category. Not available in release build. |
ErrorReportServer | Removed |
FLSAlwaysCoalesceLarge | CMS GC is not supported in liberica-perf 11 |
FLSCoalescePolicy | CMS GC is not supported in liberica-perf 11 |
FLSLargestBlockCoalesceProximity | CMS GC is not supported in liberica-perf 11 |
FailOverToOldVerifier | Removed |
FieldsAllocationStyle | Removed |
ForceNUMA | Removed |
G1RSetRegionEntries | Removed |
G1RSetScanBlockSize | Removed |
G1RSetSparseRegionEntries | Removed |
GCLockerInvokesConcurrent | Removed |
GCTaskTimeStampEntries | Removed |
InitialBootClassLoaderMetaspaceSize | Removed |
InsertMemBarAfterArraycopy | Removed |
LIRFillDelaySlots | Removed |
MonitorBound | Removed |
MonitorInUseLists | Removed |
NeedsDeoptSuspend | Removed |
OldPLABWeight | Removed |
ParGCDesiredObjsFromOverflowList | Removed |
ParGCTrimOverflow | Removed |
ParGCUseLocalOverflow | Removed |
PrintJNIResolving | Functionality moved to unified logging. Use
|
PrintSafepointStatistics | Functionality moved to unified logging. Use
|
PrintSafepointStatisticsCount | Functionality moved to unified logging.
Use |
PrintSafepointStatisticsTimeout | Functionality moved to unified
logging. Use |
PrintVMQWaitTime | Removed |
ProfileIntervals | Removed |
ProfileIntervalsTicks | Removed |
ProfileVM | Removed |
ProfilerPrintByteCodeStatistics | Removed |
ProfilerRecordPC | Removed |
ResizeOldPLAB | Removed |
ShenandoahSoftMaxHeapSize | Known as SoftMaxHeapSize in liberica-perf 11 |
StressLdcRewrite | Moved to the diagnostic flags category. Use with
|
SuspendRetryCount | Removed |
SuspendRetryDelay | Removed |
ThreadLocalHandshakes | Removed |
Tier3AOTBackEdgeThreshold | AOT is not supported in liberica-perf 11 |
Tier3AOTCompileThreshold | AOT is not supported in liberica-perf 11 |
Tier3AOTInvocationThreshold | AOT is not supported in liberica-perf 11 |
Tier3AOTMinInvocationThreshold | AOT is not supported in liberica-perf 11 |
TraceSuspendWaitFailures | Removed |
TransmitErrorReport | Removed |
UnlinkSymbolsALot | Removed |
UseAdaptiveGCBoundary | Removed |
UseCMSBestFit | CMS GC is not supported in liberica-perf 11 |
UseCMSInitiatingOccupancyOnly | CMS GC is not supported in liberica-perf 11 |
UseConcMarkSweepGC | CMS GC is not supported in liberica-perf 11 |
UseGCTaskAffinity | Removed |
UseLWPSynchronization | Removed |
UseLargePagesInMetaspace | Removed |
UseLegacyJNINameEscaping | Removed |
UseMembar | Removed |
UseOSErrorReporting | Removed |
UseRDPCForConstantTableBase | Removed |
VMThreadHintNoPreempt | Removed |
VerifyMergedCPBytecodes | Removed |
ZMarkStacksMax | Removed |
Zpath | Removed |
ZStallOnOutOfMemory | Removed |
ZStatisticsInterval | Removed |
Changes to Runtime Options for JDK 8
List of added runtime options
The following is a list of options available in liberica-perf 8, but absent in JDK 8.
New options in liberica-perf 8 |
---|
AdjustStackSizeForTLS |
AllocateHeapAt |
AllowRedefinitionToAddDeleteMethods |
AllowVectorizeOnDemand |
ArchiveClassesAtExit |
ArrayCopyLoadStoreMaxElem |
AsyncLogBufferSize |
C1InlineStackLimit |
C1MaxInlineLevel |
C1MaxInlineSize |
C1MaxRecursiveInlineLevel |
C1MaxTrivialSize |
CompactStrings |
CompilationMode |
CompileThresholdScaling |
CreateCoredumpOnCrash |
DoReserveCopyInSuperWord |
DynamicDumpSharedSpaces |
EnableDynamicAgentLoading |
ErrorLogTimeout |
ExecutingUnitTests |
ExtensiveErrorReports |
G1PeriodicGCInterval |
G1PeriodicGCInvokesConcurrent |
G1PeriodicGCSystemLoadThreshold |
G1UseAdaptiveIHOP |
HeapDumpGzipLevel |
HeapSearchSteps |
LoopPercentProfileLimit |
LoopStripMiningIter |
LoopStripMiningIterShortLoop |
MetaspaceReclaimPolicy |
MinHeapSize |
NonNMethodCodeHeapSize |
NonProfiledCodeHeapSize |
OptoRegScheduling |
PreTouchParallelChunkSize |
PrintExtendedThreadInfo |
PrintFlagsRanges |
ProfiledCodeHeapSize |
RecordDynamicDumpInfo |
RestrictReservedStack |
SegmentedCodeCache |
SharedArchiveConfigFile |
SharedArchiveFile |
SharedSymbolTableBucketSize |
ShenandoahGCHeuristics |
ShenandoahGCMode |
ShowCodeDetailsInExceptionMessages |
ShrinkHeapInSteps |
SoftMaxHeapSize |
StackReservedPages |
StartAggressiveSweepingAt |
SuperWordLoopUnrollAnalysis |
SuperWordReductions |
SweeperThreshold |
UseBASE64Intrinsics |
UseCMoveUnconditionally |
UseCodeAging |
UseContainerCpuShares |
UseDynamicNumberOfCompilerThreads |
UseEmptySlotsInSupers |
UseFMA |
UseNotificationThread |
UseProfiledLoopPredicate |
UseShenandoahGC |
UseSubwordForMaxVector |
UseVectorCmov |
UseXMMForObjInit |
UseZGC |
ZAllocationSpikeTolerance |
ZCollectionInterval |
ZFragmentationLimit |
ZMarkStackSpaceLimit |
ZProactive |
ZUncommit |
ZUncommitDelay |
List of removed and renamed runtime options
The table below lists options unavailable in liberica-perf 8 and the options that were renamed.
JDK 8 options | Resolution in liberica-perf 8 |
---|---|
AdaptiveSizePausePolicy | Removed |
AdjustConcurrency | Removed |
AggressiveOpts | Removed |
AllowJNIEnvProxy | Removed |
AllowNonVirtualCalls | Removed |
AssertOnSuspendWaitFailure | Removed |
AssumeMP | Removed |
AutoGCSelectPauseMillis | Removed |
BackEdgeThreshold | Removed. Use |
BindGCTaskThreadsToCPUs | Removed |
BranchOnRegister | Removed |
BytecodeVerificationLocal | Is now a diagnostic option |
BytecodeVerificationRemote | Is now a diagnostic option |
CheckEndorsedAndExtDirs | Removed |
ClearFPUAtPark | Removed |
CMS* | CMS GC removed as well as its flags |
CodeCacheMinimumFreeSpace | Removed |
CollectGen0First | Removed |
CompactFields | Removed |
CompilationPolicyChoice | Removed |
CompilerThreadHintNoPreempt | Removed |
ConvertSleepToYield | Removed |
ConvertYieldToSleep | Removed |
CreateMinidumpOnCrash | Removed. Use |
Debugging | Removed |
DefaultMaxRAMFraction | Removed. Use |
DefaultThreadPriority | Removed |
DeferPollingPageLoopCount | Removed |
DeferThrSuspendLoopCount | Removed |
DeoptimizeRandom | Only available in non-product builds |
EmitSync | Removed |
EnableTracing | Removed |
ErrorReportServer | Removed |
ExplicitGCInvokesConcurrentAndUnloadsClasses | Removed |
FailOverToOldVerifier | Removed |
FastTLABRefill | Removed |
FenceInstruction | Removed |
FieldsAllocationStyle | Removed |
FLSAlwaysCoalesceLarge | Removed |
FLSCoalescePolicy | Removed |
FLSLargestBlockCoalesceProximity | Removed |
ForceNUMA | Removed |
G1RSetScanBlockSize | Removed |
GCLockerInvokesConcurrent | Removed |
GCLogFileSize | Removed |
GCTaskTimeStampEntries | Removed |
InitialBootClassLoaderMetaspaceSize | Removed |
InsertMemBarAfterArraycopy | Removed |
JNIDetachReleasesMonitors | Removed |
LazyBootClassLoader | Removed |
LIRFillDelaySlots | Removed |
LogJFR | Removed |
MonitorBound | Removed |
MonitorInUseLists | Removed |
MustCallLoadClassInternal | Removed |
NeedsDeoptSuspend | Removed |
NmethodSweepCheckInterval | Removed |
NmethodSweepFraction | Removed |
NumberOfGCLogFiles | Removed |
OldPLABWeight | Removed |
ParallelGCVerbose | Removed |
ParGCDesiredObjsFromOverflowList | Removed |
ParGCTrimOverflow | Removed |
ParGCUseLocalOverflow | Removed |
PreInflateSpin | Removed |
PrintAdaptiveSizePolicy | Removed |
PrintClassHistogramAfterFullGC | Removed |
PrintClassHistogramBeforeFullGC | Removed |
PrintCMSInitiationStatistics | Removed |
PrintCMSStatistics | Removed |
PrintFLSCensus | Removed |
PrintFLSStatistics | Removed |
PrintGCApplicationConcurrentTime | Removed |
PrintGCApplicationStoppedTime | Removed |
PrintGCCause | Removed |
PrintGCDateStamps | Removed |
PrintGCID | Removed |
PrintGCTaskTimeStamps | Removed |
PrintGCTimeStamps | Removed |
PrintHeapAtGC | Removed |
PrintHeapAtGCExtended | Removed |
PrintJNIGCStalls | Removed |
PrintJNIResolving | Removed |
PrintOldPLAB | Removed |
PrintOopAddress | Removed |
PrintParallelOldGCPhaseTimes | Removed |
PrintPLAB | Removed |
PrintPromotionFailure | Removed |
PrintReferenceGC | Removed |
PrintSafepointStatistics | Removed |
PrintSafepointStatisticsCount | Removed |
PrintSafepointStatisticsTimeout | Removed |
PrintSharedSpaces | Removed |
PrintStringDeduplicationStatistics | Removed |
PrintTenuringDistribution | Removed |
PrintTLAB | Removed |
PrintVMQWaitTime | Removed |
ProfileIntervals | Removed |
ProfileIntervalsTicks | Removed |
ProfilerPrintByteCodeStatistics | Removed |
ProfilerRecordPC | Removed |
ProfileVM | Removed |
ReadPrefetchInstr | Removed |
ReflectionWrapResolutionErrors | Removed |
ResizeOldPLAB | Removed |
SafepointPollOffset | Removed |
SafepointSpinBeforeYield | Removed |
SharedMiscCodeSize | Removed |
SharedMiscDataSize | Removed |
SharedReadOnlySize | Removed |
SharedReadWriteSize | Removed |
SpecialEncodeISOArray | Moved to diagnostic flags |
StarvationMonitorInterval | Removed |
StressLdcRewrite | Moved to diagnostic flags |
SuspendRetryCount | Removed |
SuspendRetryDelay | Removed |
SyncFlags | Removed |
SyncKnobs | Removed |
SyncVerbose | Removed |
ThreadSafetyMargin | Removed |
TraceBiasedLocking | Removed |
TraceClassLoading | Removed |
TraceClassLoadingPreorder | Removed |
TraceClassPaths | Removed |
TraceClassResolution | Removed |
TraceClassUnloading | Removed |
TraceDynamicGCThreads | Removed |
TraceExceptions | Removed |
TraceGen0Time | Removed. Functionality moved to unified logging. |
TraceGen1Time | Removed. Functionality moved to unified logging. |
TraceLoaderConstraints | Removed |
TraceMetadataHumongousAllocation | Removed |
TraceMonitorInflation | Removed |
TraceParallelOldGCTasks | Removed |
TraceRedefineClasses | Removed |
TraceSafepointCleanupTime | Removed |
TraceSuspendWaitFailures | Removed |
TransmitErrorReport | Removed |
UnlinkSymbolsALot | Removed |
UnlockCommercialFeatures | Removed |
Use486InstrsOnly | Removed |
UseAdaptiveGCBoundary | Removed |
UseAESIntrinsics | Moved to diagnostic flags |
UseAltSigs | Removed |
UseAutoGCSelectPolicy | Removed |
UseBoundThreads | Removed |
UseCMSBestFit | Removed |
UseCMSCollectionPassing | Removed |
UseCMSCompactAtFullCollection | Removed |
UseCMSInitiatingOccupancyOnly | Removed |
UseCompilerSafepoints | Removed |
UseConcMarkSweepGC | Removed |
UseCRC32Intrinsics | Moved to diagnostic flags |
UseFastAccessorMethods | Removed |
UseFastEmptyMethods | Removed |
UseGCLogFileRotation | Removed |
UseGCTaskAffinity | Removed |
UseGHASHIntrinsics | Moved to diagnostic flags |
UseLargePagesInMetaspace | Removed |
UseLegacyJNINameEscaping | Removed |
UseLockedTracing | Removed |
UseLWPSynchronization | Removed |
UseMathExactIntrinsics | Moved to diagnostic flags |
UseMembar | Removed |
UseMontgomeryMultiplyIntrinsic | Moved to diagnostic flags |
UseMontgomerySquareIntrinsic | Moved to diagnostic flags |
UseMulAddIntrinsic | Moved to diagnostic flags |
UseMultiplyToLenIntrinsic | Moved to diagnostic flags |
UseOSErrorReporting | Removed from linux build |
UseParallelOldGC | Removed |
UseParNewGC | Removed |
UseRDPCForConstantTableBase | Removed |
UseSHA1Intrinsics | Moved to diagnostic flags |
UseSHA256Intrinsics | Moved to diagnostic flags |
UseSHA512Intrinsics | Moved to diagnostic flags |
UseSquareToLenIntrinsic | Moved to diagnostic flags |
UseVMInterruptibleIO | Removed |
VerifyMergedCPBytecodes | Removed |
VMThreadHintNoPreempt | Removed |
WorkAroundNPTLTimedWaitHang | Removed |