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