The full version string for this update release is 14.0.2+13. The version number is 14.

Liberica JDK 14.0.2+13

Liberica is a certified, Java SE 14-compliant distribution of OpenJDK 14 which works on server (Linux x86_64, Linux ARM64, Solaris SPARC, Solaris x64, Windows 64), desktop (Windows 64, Windows 32, Mac, Linux x86_64), and embedded devices (Linux ARM64, Linux ARMv7, including Raspberry Pi 2, 3, 4 (ARMv6 hardfloat)). It has the following notable additions:

  • Linux x86_64 version contains experimental support for ZGC.

  • Linux x86_64, ARMv8 and ARMv7 distributions include a choice of Client VM, Server VM and Minimal VM.

  • Alpine Linux x86_64 version is build with musl support.

  • Windows x86_64, Windows x86, Mac, Linux x86_64, Linux x86 and Linux ARMv7 distributions contain OpenJFX 14.

  • Linux ARMv7 distribution contains Device IO API compiled for Raspberry Pi.

Please refer to the Oracle JDK 14.0.2 release notes for further information on JDK 14.0.2 features. This document further outlines the peculiarities of Liberica distribution as compared to Oracle JDK 14.0.2 distribution.

Supported Server and Desktop configurations

Liberica is supported on the following OSes:

  • Ubuntu Linux 16.04, 18.04 (x86, x86_64, ARMv8)

  • Debian Linux 8, 9 (x86, x86_64, ARMv8)

  • Red Hat, Oracle Linux and CentOS 6.x, 7.x (x86, x86_64, ARMv8)

  • Alpine Linux 3.7+

  • SUSE Linux Enterprise 12, 15 and tumbleweed (x86_64, ARMv8)

  • Apple macOS 10.11+

  • Microsoft Windows 2019, Windows 2016, Windows 2012 R2, Windows 10, Windows 8, Windows 7 (64 and 32 bit)

It is also known to work on other Linux distributions and Windows versions.

Note: The minimum supported Linux kernel version is 2.6.18 and GLIBC version 2.6. LibericaFX works on all supported Ubuntu versions, Red Hat Linux family starting from 7.x and SUSE versions with GTK3 backend.

Supported Embedded configurations

Liberica is tested and certified on Raspberry Pi 2, 3 and 4 running the following OSes:

  • Raspbian OS (armhf)

  • OpenSUSE (armv8)

It is also known to work with Debian (armhf) and Ubuntu (armhf).

Liberica JDK 14.0.2 distribution

Liberica JDK 14.0.2 are distributed as .rpm, .zip, .deb and .tar.gz packages. Please select the one which is most appropriate for your purposes.

Liberica 14 introduced all new features supported by OpenJDK 14.

With the introduction of the Jigsaw feature in JDK 9 and Minimal VM it is now possible to create a Runtime that is sufficient to run your application and trim down the size of the Runtime. To generate a Runtime with just the Minimal VM, add --vm=minimal to jlink options.

By default, the Liberica uses Server VM. Server VM and Client VM can be enabled with -server and -client command line options, respectively. In case the deployment requires to minimize the footprint, it may be beneficial to use Minimal VM, which emphasises on a minimal footprint. It has C1 JIT compiler only, Serial GC and no serviceability features.

LibericaFX for the Raspberry Pi

Liberica JDK 14.0.2 come with a bundled LibericaFX implementation, which is based on OpenJFX. The following tables lists Java FX modules status of Liberica distribution

  • Java FX Graphics - works.

  • Java FX Controls - works.

  • Java FX Media - does not work.

  • Java FX Webkit - does not work.

The following pipelines are known to work: EGL, SW (direct framebuffer) and GTK. By default, Liberica tries to use the accelerated EGL pipeline, which requires the presence of EGL libraries. If they are not found, the implementation falls back to software rendering.

Use the following command line options to specify the rendering pipeline:

  • -Dprism.order=sw forces the use of software rendering pipeline. *

  • -Dprism.order=es2 forces the use of EGL pipeline and hardware acceleration. *

  • -Djavafx.platform=gtk if you would like to launch a LibericaFX application using Liberica from X11.

  • Not supported on Raspberry Pi 4.

Please refer to the following wiki for more information.

Device IO API for the Raspberry Pi

Liberica JDK 14.0.2 comes with a bundled OpenJDK Device I/O (DIO) API implementation module. DIO provides a Java API for accessing Raspberry PI GPIO pins and for communicating with peripheral devices:

  • General Purpose Input/Output (GPIO).

  • Inter-Integrated Circuit Bus (I2C), Serial Peripheral Interface (SPI).

  • Universal Asynchronous Receiver/Transmitter (UART).

Please refer to the following wiki for more information.

Security Baselines

BellSoft Liberica follows the security baselines for Oracle Java SE. Please refer to the Oracle documentation for a list of issues fixed in a given release.

Known Issues

LibericaFX and EGL on Raspbian

As of 2017, the default location of Broadcom libEGL.so and libGLESv2.so has changed in Raspbian OS. If you’d like to leverage hardware EGL acceleration available from Broadcom video drivers in LibericaFX while running a recent Raspbian OS, run the following command:

cd /opt/vc/lib
sudo ln -s libbrcmEGL.so libEGL.so
sudo ln -s libbrcmGLESv2.so libGLESv2.so

Issues fixed

IssueDescription

JDK-8044365

(dc) MulticastSendReceiveTests.java failing with ENOMEM when joining group (OS X 10.9)

JDK-8183369

RFC unconformity of HttpURLConnection with proxy

JDK-8220503

Move ShenandoahTerminatorTerminator::should_exit_termination out of header

JDK-8221741

ClassCastException can happen when fontconfig.properties is used

JDK-8223935

PIT: java/awt/font/WindowsIndicFonts.java fails on windows10

JDK-8225068

Remove DocuSign root certificate that is expiring in May 2020

JDK-8225069

Remove Comodo root certificate that is expiring in May 2020

JDK-8225216

gc/logging/TestMetaSpaceLog.java doesn’t work for Shenandoah

JDK-8227269

Slow class loading when running with JDWP

JDK-8230613

Better ASCII conversions

JDK-8230853

Shenandoah: replace leftover assert(is_in(…)) with rich asserts

JDK-8231118

ARM32: Math tests failures

JDK-8231572

Use -lobjc instead of -fobjc-link-runtime in libosxsecurity

JDK-8231800

Better listing of arrays

JDK-8232014

Expand DTD support

JDK-8233234

Better Zip Naming

JDK-8233239

Enhance TIFF support

JDK-8233255

Better Swing Buttons

JDK-8234032

Improve basic calendar services

JDK-8234042

Better factory production of certificates

JDK-8234146

compiler/jsr292/ContinuousCallSiteTargetChange.java times out on SPARC

JDK-8234418

Better parsing with CertificateFactory

JDK-8234836

Improve serialization handling

JDK-8235332

TestInstanceCloneAsLoadsStores.java fails with -XX:+StressGCM

JDK-8235833

PosixPlatform.cpp should not include sysctl.h

JDK-8236039

JSSE Client does not accept status_request extension in CertificateRequest messages for TLS 1.3

JDK-8236191

Enhance OID processing

JDK-8236759

ShouldNotReachHere in PhaseIdealLoop::verify_strip_mined_scheduling

JDK-8236851

Shenandoah: More details in Traversal GC event messages

JDK-8236867

Enhance Graal interface handling

JDK-8237117

Better ForkJoinPool behavior

JDK-8237192

Generate stripped/public pdbs on Windows for jdk images

JDK-8237217

Incorrect G1StringDedupEntry type used in StringDedupTable destructor

JDK-8237474

Default SSLEngine should create in server role

JDK-8237543

Shenandoah: More asserts around code roots

JDK-8237592

Enhance certificate verification

JDK-8237632

Shenandoah: accept NULL fwdptr to cooperate with JVMTI and JFR

JDK-8237780

Shenandoah: More reliable nmethod verification

JDK-8237837

Shenandoah: assert(mem == __null) failed: only one safepoint

JDK-8237859

C2: Crash when loads float above range check

JDK-8237879

make 4.3 breaks build

JDK-8237889

Update libxml2 to version 2.9.10

JDK-8237945

CTW: C2 compilation fails with assert(just_allocated_object(alloc_ctl) == ptr) failed: most recent allo

JDK-8237951

CTW: C2 compilation fails with “malformed control flow”

JDK-8238002

Better matrix operations

JDK-8238013

Enhance String writing

JDK-8238190

[JVMCI] Fix single implementor speculation for diamond shapes.

JDK-8238247

CTW runner should sweep nmethods more aggressively

JDK-8238356

CodeHeap::blob_count() overestimates the number of blobs

JDK-8238366

CTW runner closes standard output on exit

JDK-8238385

CTW: C2 (Shenandoah) compilation fails with “Range check dependent CastII node was not removed”

JDK-8238438

SuperWord::co_locate_pack picks memory state of first instead of last load

JDK-8238534

Deep sign macOS bundles before bundle archive is being created

JDK-8238721

Add failing client jtreg tests to the Problem List

JDK-8238756

C2: assert failed: can not use dead node

JDK-8238804

Enhance key handling process

JDK-8238811

C2: assert(i >= req() || i == 0 || is_Region() || is_Phi()) with -XX:+VerifyGraphEdges

JDK-8238843

Enhanced font handing

JDK-8238851

Shenandoah: C1: Resolve into registers of correct type

JDK-8238920

Better Buffer support

JDK-8238925

Enhance WAV file playback

JDK-8239005

[TESTBUG] test/hotspot/jtreg/runtime/StackGuardPages/TestStackGuardPages.java: exeinvoke.c: must initialize static state before calling do_overflow()

JDK-8239081

Shenandoah: Consolidate C1 LRB and native barriers

JDK-8239142

C2’s UseUniqueSubclasses optimization is broken for array accesses

JDK-8239354

Shenandoah: minor enhancements to traversal GC

JDK-8239456

vtable stub generation: assert failure (code size estimate)

JDK-8239786

Shenandoah: print per-cycle statistics

JDK-8239787

AArch64: String.indexOf may incorrectly handle empty strings

JDK-8239798

SSLSocket closes socket both socket endpoints on a SocketTimeoutException

JDK-8239852

java/util/concurrent tests fail with -XX:+VerifyGraphEdges: assert(!VerifyGraphEdges) failed: verification should have failed

JDK-8239868

Shenandoah: ditch C2 node limit adjustments

JDK-8239904

Shenandoah: accumulated penalties should not be over 100% of capacity

JDK-8239926

Shenandoah: Shenandoah needs to mark nmethod’s metadata

JDK-8239931

[win][x86] vtable stub generation: assert failure (code size estimate) follow-up

JDK-8240069

Shenandoah: turn more flags diagnostic

JDK-8240070

Shenandoah: remove obsolete ShenandoahCommonGCStateLoads

JDK-8240076

Shenandoah: pacer should cover reset and preclean phases

JDK-8240119

Less Affine Transformations

JDK-8240197

Cannot start JVM when $JAVA_HOME includes CJK characters

JDK-8240215

Shenandoah: remove ShenandoahAllocationTrace

JDK-8240216

Shenandoah: remove ShenandoahTerminationTrace

JDK-8240217

Shenandoah: remove ShenandoahEvacAssist

JDK-8240220

IdealLoopTree::dump_head predicate printing is broken

JDK-8240223

Use consistent predicate order in and with PhaseIdealLoop::find_predicate

JDK-8240227

Loop predicates should be copied to unswitched loops

JDK-8240286

[TESTBUG] Test command error in hotspot/jtreg/compiler/loopopts/superword/SumRedAbsNeg_Float.java

JDK-8240315

Shenandoah: Rename ShLBN::get_barrier_strength()

JDK-8240482

Improved WAV file playback

JDK-8240511

Shenandoah: parallel safepoint workers count should be ParallelGCThreads

JDK-8240534

Shenandoah: ditch debug safepoint timeout adjustment

JDK-8240589

OtherRegionsTable::_num_occupied not updated correctly

JDK-8240629

argfiles parsing broken for argfiles with comment cross 4096 bytes chunk

JDK-8240671

Shenandoah: refactor ShenandoahPhaseTimings

JDK-8240725

Some functions might not work with CJK character

JDK-8240749

Shenandoah: refactor ShenandoahUtils

JDK-8240750

Shenandoah: remove leftover files and mentions of ShenandoahAllocTracker

JDK-8240868

Shenandoah: remove CM-with-UR piggybacking cycles

JDK-8240872

Shenandoah: Avoid updating new regions from start of evacuation

JDK-8240873

Shenandoah: Short-cut arraycopy barriers

JDK-8240915

Shenandoah: Remove unused fields in init mark tasks

JDK-8240917

Shenandoah: Avoid scanning thread code roots twice in all root scanner

JDK-8240948

Shenandoah: cleanup not-forwarded-objects paths after JDK-8240868

JDK-8240972

macOS codesign fail on macOS 10.13.5 or older

JDK-8241062

Shenandoah: rich asserts trigger “empty statement” inspection

JDK-8241081

Shenandoah: Do not modify update-watermark concurrently

JDK-8241093

Shenandoah: editorial changes in flag descriptions

JDK-8241108

Glib improvements

JDK-8241139

Shenandoah: distribute mark-compact work exactly to minimize fragmentation

JDK-8241142

Shenandoah: should not use parallel reference processing with single GC thread

JDK-8241144

Javadoc is not generated for new module jdk.nio.mapmode

JDK-8241296

Segfault in JNIHandleBlock::oops_do()

JDK-8241351

Shenandoah: fragmentation metrics overhaul

JDK-8241379

Update JCEKS support

JDK-8241435

Shenandoah: avoid disabling pacing with “aggressive”

JDK-8241445

Fix copyright in test/jdk/tools/launcher/ArgFileSyntax.java

JDK-8241520

Shenandoah: simplify region sequence numbers handling

JDK-8241522

Manifest improved jar headers redux

JDK-8241534

Shenandoah: region status should include update watermark

JDK-8241568

(fs) UserPrincipalLookupService.lookupXXX failure with IOE “Operation not permitted”

JDK-8241583

Shenandoah: turn heap lock asserts into macros

JDK-8241586

compiler/cpuflags/TestAESIntrinsicsOnUnsupportedConfig.java fails on aarch64

JDK-8241603

ZGC: java/lang/management/MemoryMXBean/MemoryTestZGC.sh crashes on macOS

JDK-8241668

Shenandoah: make ShenandoahHeapRegion not derive from ContiguousSpace

JDK-8241673

Shenandoah: refactor anti-false-sharing padding

JDK-8241675

Shenandoah: assert(n→outcnt() > 0) at shenandoahSupport.cpp:2858 with java/util/Collections/FindSubList.java

JDK-8241692

Shenandoah: remove ShenandoahHeapRegion::_reserved

JDK-8241700

Shenandoah: Fold ShenandoahKeepAliveBarrier flag into ShenandoahSATBBarrier

JDK-8241740

Shenandoah: remove ShenandoahHeapRegion::_heap

JDK-8241743

Shenandoah: refactor and inline ShenandoahHeap::heap()

JDK-8241748

Shenandoah: inline MarkingContext TAMS methods

JDK-8241750

x86_32 build failure after JDK-8227269

JDK-8241765

Shenandoah: AARCH64 need to save/restore call clobbered registers before calling keepalive barrier

JDK-8241838

Shenandoah: no need to trash cset during final mark

JDK-8241841

Shenandoah: ditch one of allocation type counters in ShenandoahHeapRegion

JDK-8241842

Shenandoah: inline ShenandoahHeapRegion::region_number

JDK-8241844

Shenandoah: rename ShenandoahHeapRegion::region_number

JDK-8241845

Shenandoah: align ShenandoahHeapRegions to cache lines

JDK-8241900

Loop unswitching may cause dependence on null check to be lost

JDK-8241926

Shenandoah: only print heap changes for operations that directly affect it

JDK-8241983

Shenandoah: simplify FreeSet logging

JDK-8241984

Shenandoah: enhance GCTimer and JFR support

JDK-8241985

Shenandoah: simplify collectable garbage logging

JDK-8242040

Shenandoah: print allocation failure type

JDK-8242041

Shenandoah: adaptive heuristics should account evac reserve in free target

JDK-8242042

Shenandoah: tune down ShenandoahGarbageThreshold

JDK-8242054

Shenandoah: New incremental-update mode

JDK-8242075

Shenandoah: rename ShenandoahHeapRegionSize flag

JDK-8242082

Shenandoah: Purge Traversal mode

JDK-8242083

Shenandoah: split “Prepare Evacuation” tracking into cset/freeset counters

JDK-8242089

Shenandoah: per-worker stats should be summed up, not averaged

JDK-8242101

Shenandoah: coalesce and parallelise heap region walks during the pauses

JDK-8242107

Shenandoah: Fix aarch64 build after JDK-8242082

JDK-8242114

Shenandoah: remove ShenandoahHeapRegion::reset_alloc_metadata_to_shared

JDK-8242130

Shenandoah: Simplify arraycopy-barrier dispatching

JDK-8242136

Better XML namespace handling

JDK-8242211

Shenandoah: remove ShenandoahHeuristics::RegionData::_seqnum_last_alloc

JDK-8242212

Shenandoah: initialize ShenandoahHeuristics::_region_data eagerly

JDK-8242213

Shenandoah: remove ShenandoahHeuristics::_bytes_in_cset

JDK-8242217

Shenandoah: Enable GC mode to be diagnostic/experimental and have a name

JDK-8242227

Shenandoah: transit regions to cset state when adding to collection set

JDK-8242228

Shenandoah: remove unused ShenandoahCollectionSet methods

JDK-8242229

Shenandoah: inline ShenandoahHeapRegion liveness-related methods

JDK-8242267

Shenandoah: regions space needs to be aligned by os::vm_allocation_granularity()

JDK-8242271

Shenandoah: add test to verify GC mode unlock

JDK-8242273

Shenandoah: accept either SATB or IU barriers, but not both

JDK-8242283

Can’t start JVM when java home path includes non-ASCII character

JDK-8242301

Shenandoah: Inline LRB runtime call

JDK-8242316

Shenandoah: Turn NULL-check into assert in SATB slow-path entry

JDK-8242353

Shenandoah: micro-optimize region liveness handling

JDK-8242365

Shenandoah: use uint16_t instead of jushort for liveness cache

JDK-8242375

Shenandoah: Remove ShenandoahHeuristic::record_gc_start/end methods

JDK-8242379

[TESTBUG] compiler/loopopts/TestLoopUnswitchingLostCastDependency.java fails with release VMs

JDK-8242400

Shenandoah: Restore logging to pre-jdk8241984 format

JDK-8242430

Correct links in javadoc of OperatingSystemMXBean

JDK-8242470

Update Xerces to Version 2.12.1

JDK-8242498

Invalid “sun.awt.TimedWindowEvent” object leads to JVM crash

JDK-8242625

Shenandoah: restore heap logging for Degenerated/Full cycles

JDK-8242638

Shenandoah: restore heap logging for uncommit

JDK-8242641

Shenandoah: clear live data and update TAMS optimistically

JDK-8243008

Shenandoah: TestVolatilesShenandoah test failed on aarch64

JDK-8243059

Build fails when –with-vendor-name contains a comma

JDK-8243238

Shenandoah: explicit GC request should wait for a complete GC cycle

JDK-8243255

Font size is large in JavaFX app with enabled Monocle on Raspberry Pi

JDK-8243291

Shenandoah: no need to retire TLABs at Init Update Refs

JDK-8243301

Shenandoah: ditch ShenandoahAllowMixedAllocs

JDK-8243307

Shenandoah: remove ShCollectionSet::live_data

JDK-8243395

Shenandoah: demote guarantee in ShenandoahPhaseTimings::record_workers_end

JDK-8243460

Shenandoah: purge init_update_refs_prepare counter

JDK-8243463

Shenandoah: ditch total_pause counters

JDK-8243464

Shenandoah: print statistic counters in time order

JDK-8243465

Shenandoah: ditch unused pause_other, conc_other counters

JDK-8243478

Shenandoah: avoid implicit worker_id = 0

JDK-8243487

Shenandoah: make _num_phases illegal phase type

JDK-8243494

Shenandoah: set counters once per cycle

JDK-8243495

Shenandoah: print root statistics for concurrent weak/strong root phases

JDK-8243541

(tz) Upgrade time-zone data to tzdata2020a

JDK-8243573

Shenandoah: rename GCParPhases and related code

JDK-8243578

Shenandoah: Cleanup ShenandoahStringDedup::parallel_oops_do()

JDK-8243848

Shenandoah: Windows build fails after JDK-8239786

JDK-8244180

Shenandoah: carry Phase to ShWorkerTimingsTracker explicitly

JDK-8244200

Shenandoah: build breakages after JDK-8241743

JDK-8244226

Shenandoah: per-cycle statistics contain worker data from previous cycles

JDK-8244326

Shenandoah: global statistics should not accept bogus samples

JDK-8244328

Shenandoah: move ShenandoahThreadLocalData::_disarmed_value initialization

JDK-8244420

Shenandoah: Ensure _disarmed_value offset < 128

JDK-8244551

Shenandoah: Fix racy update of update_watermark

JDK-8244663

Shenandoah: C2 assertion fails in Matcher::collect_null_checks

JDK-8244721

CTW: C2 (Shenandoah) compilation fails with “unexpected infinite loop graph shape”

JDK-8244730

Shenandoah: gc/shenandoah/options/TestHeuristicsUnlock.java should only verify the heuristics

JDK-8244732

Shenandoah: move heuristics code to gc/shenandoah/heuristics

JDK-8244737

Shenandoah: move mode code to gc/shenandoah/mode

JDK-8244739

Shenandoah: break superclass dependency on ShenandoahNormalMode

JDK-8244740

Shenandoah: rename ShenandoahNormalMode to ShenandoahSATBMode

JDK-8244821

Shenandoah: disarmed_value is initialized at wrong place

JDK-8244853

The static build of libextnet is missing the JNI_OnLoad_extnet function

JDK-8245047

[PPC64] C2: ReverseBytes + Load always match to unordered Load (acquire semantics missing)

JDK-8245422

Better Pisces rasterizing

JDK-8245461

Shenandoah: refine mode name()-s

JDK-8245463

Shenandoah: refine ShenandoahPhaseTimings constructor arguments

JDK-8245726

Shenandoah: lift/cleanup ShenandoahHeuristics names and properties

JDK-8245754

Shenandoah: ditch ShenandoahAlwaysPreTouch

JDK-8245757

Shenandoah: AlwaysPreTouch should not disable heap resizing or uncommits

JDK-8245812

Shenandoah: compute root phase parallelism

JDK-8245814

Shenandoah: reconsider format specifiers for stats

JDK-8245825

Shenandoah: Remove diagnostic flag ShenandoahConcurrentScanCodeRoots

JDK-8246031

SSLSocket.getSession() doesn’t close connection for timeout/ interrupts

JDK-8246097

Shenandoah: limit parallelism in CLDG root handling

JDK-8246100

Shenandoah: walk roots in more efficient order

JDK-8246162

Shenandoah: full GC does not mark code roots when class unloading is off

JDK-8246342

Shenandoah: remove unused ShenandoahIsMarkedNextClosure

JDK-8246613

Choose the default SecureRandom algo based on registration ordering

JDK-8247310

Shenandoah: pacer should not affect interrupt status

JDK-8247358

Shenandoah: reconsider free budget slice for marking

JDK-8247474

Shenandoah: Windows build warning after JDK-8247310

JDK-8247560

Shenandoah: heap iteration holds root locks all the time

JDK-8248505

Unexpected NoSuchAlgorithmException when using secure random impl from BCFIPS provider

ON THIS PAGE