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