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 optionsResolution 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 -XX:+UnlockDiagnosticVMOptions

BytecodeVerificationRemote

Moved to the diagnostic flags category. Use with -XX:+UnlockDiagnosticVMOptions

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 -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

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 -XX:+UnlockDiagnosticVMOptions

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 optionsResolution in liberica-perf 8

AdaptiveSizePausePolicy

Removed

AdjustConcurrency

Removed

AggressiveOpts

Removed

AllowJNIEnvProxy

Removed

AllowNonVirtualCalls

Removed

AssertOnSuspendWaitFailure

Removed

AssumeMP

Removed

AutoGCSelectPauseMillis

Removed

BackEdgeThreshold

Removed. Use -XX:OnStackReplacePercentage

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 CreateCoredumpOnCrash instead

Debugging

Removed

DefaultMaxRAMFraction

Removed. Use MaxRAMFraction instead

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

ON THIS PAGE