<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Java Terms Explained on foojay.io - Friends of OpenJDK</title><link>https://foojayio.github.io/website/pedia/</link><description>Recent content in Java Terms Explained on foojay.io - Friends of OpenJDK</description><generator>Hugo</generator><language>en-us</language><atom:link href="https://foojayio.github.io/website/pedia/index.xml" rel="self" type="application/rss+xml"/><item><title>AOT Compilation (Ahead-of-Time)</title><link>https://foojayio.github.io/website/pedia/aot-compilation-ahead-of-time/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://foojayio.github.io/website/pedia/aot-compilation-ahead-of-time/</guid><description>&lt;p&gt;Ahead-of-time (AOT) compilation converts Java source code or bytecode into native machine code before the application runs, rather than during execution. The result is a self-contained native binary that starts nearly instantly, without the warm-up phase that a JIT-compiled JVM requires.&lt;/p&gt;
&lt;p&gt;Traditional JVMs start by interpreting bytecode and then JIT-compiling hot methods at runtime. This produces excellent peak throughput but means applications take seconds &amp;mdash; sometimes tens of seconds for framework-heavy apps &amp;mdash; to reach full speed. AOT compilation eliminates that delay by doing the compilation work once, at build time.&lt;/p&gt;</description></item><item><title>Basic Java Concepts</title><link>https://foojayio.github.io/website/pedia/basic-java-concepts/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://foojayio.github.io/website/pedia/basic-java-concepts/</guid><description>&lt;p&gt;The Java programming language and Java virtual machine (also known as Java runtime environment) provide the tools to write operating system independent applications. A Java application employs the JVM (Java Virtual Machine) on the target system to run its code. Java applications are therefore independent from the JVM and one can be updated/patched independent from the other.&lt;/p&gt;
&lt;p&gt;A Java application is deployed in a platform-independent deployment format called Byte Code. Byte Code is commonly packaged and shipped as a collection of &amp;ldquo;.jar&amp;rdquo; files. The compilation and packaging of Java source code into JAR files is a comparatively lightweight process that does not create a classical CPU and OS dependent binary. To run a Java application, a platform-specific Java Runtime Environment (JRE) or Java Virtual Machine (JVM) is required.&lt;/p&gt;</description></item><item><title>Bytecode</title><link>https://foojayio.github.io/website/pedia/bytecode/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://foojayio.github.io/website/pedia/bytecode/</guid><description>&lt;p&gt;When you compile a Java source file, the Java compiler (&lt;code&gt;javac&lt;/code&gt;) does not produce native machine code for a specific CPU. Instead it produces &lt;em&gt;bytecode&lt;/em&gt; : a compact, platform-neutral instruction set stored in &lt;code&gt;.class&lt;/code&gt; files. Bytecode is not directly understood by the operating system; it is executed by the Java Virtual Machine (JVM), which translates it into native instructions at runtime.&lt;/p&gt;
&lt;p&gt;This two-step model &amp;mdash; compile once to bytecode, run anywhere on a JVM &amp;mdash; is the foundation of Java&amp;rsquo;s &amp;ldquo;write once, run anywhere&amp;rdquo; promise. The same &lt;code&gt;.class&lt;/code&gt; file runs without modification on Windows, Linux, or macOS, as long as a compatible JVM is available.&lt;/p&gt;</description></item><item><title>Class Loading</title><link>https://foojayio.github.io/website/pedia/class-loading/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://foojayio.github.io/website/pedia/class-loading/</guid><description>&lt;p&gt;Before the JVM can execute any code it must load the corresponding &lt;code&gt;.class&lt;/code&gt; file into memory. This process is handled by &lt;strong&gt;class loaders&lt;/strong&gt;, which locate, read, and define classes at runtime. Class loading is lazy by default: a class is not loaded until it is first referenced.&lt;/p&gt;
&lt;p&gt;The JVM has a hierarchy of built-in class loaders. The &lt;strong&gt;bootstrap class loader&lt;/strong&gt; loads the core Java platform classes from the JDK itself. The &lt;strong&gt;platform class loader&lt;/strong&gt; (formerly extension class loader) loads JDK extension modules. The &lt;strong&gt;application class loader&lt;/strong&gt; loads classes from the application&amp;rsquo;s classpath or module path. Custom class loaders can be written to load classes from databases, networks, or encrypted archives.&lt;/p&gt;</description></item><item><title>Compact Profiles</title><link>https://foojayio.github.io/website/pedia/compactprofiles/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://foojayio.github.io/website/pedia/compactprofiles/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Compact Profiles are a Java 8 feature. Starting with Java 9, the same goal &amp;mdash; creating a minimal, self-contained runtime &amp;mdash; is achieved more flexibly by &lt;code&gt;jlink&lt;/code&gt; and the Java Module System (JPMS). If you are working with Java 9 or later, see &lt;a href="https://foojayio.github.io/website/pedia/java-module-system-jpms/"&gt;Java Module System (JPMS)&lt;/a&gt;
 instead.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Introduced in OpenJDK 8 (JSR 337), compact profiles define three nested subsets of the Java SE 8 API designed to reduce the runtime footprint on resource-constrained devices such as embedded systems and IoT hardware.&lt;/p&gt;</description></item><item><title>CPU and PSU</title><link>https://foojayio.github.io/website/pedia/cpu-and-psu/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://foojayio.github.io/website/pedia/cpu-and-psu/</guid><description>&lt;p&gt;From Java 9 onward, Oracle moved to a &lt;strong&gt;six-month release cadence&lt;/strong&gt;, releasing a new JDK version every March and September. Security patches, bug fixes, and critical updates are delivered in three ways:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;CPU (Critical Patch Update)&lt;/strong&gt; &amp;mdash; Oracle&amp;rsquo;s quarterly security update, released in January, April, July, and October. Each CPU for a supported JDK version contains all security fixes accumulated since the previous CPU.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;PSU (Patch Set Update)&lt;/strong&gt; &amp;mdash; A superset of the CPU that also includes non-security bug fixes. PSUs are available for the same cadence but recommended primarily for users who have encountered specific bugs fixed in that release.&lt;/p&gt;</description></item><item><title>CRaC (Coordinated Restore at Checkpoint)</title><link>https://foojayio.github.io/website/pedia/crac-coordinated-restore-at-checkpoint/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://foojayio.github.io/website/pedia/crac-coordinated-restore-at-checkpoint/</guid><description>&lt;p&gt;CRaC is an OpenJDK project that solves one of the most common complaints about Java in cloud environments: slow startup. The JVM traditionally takes time to load classes, initialise frameworks, and warm up the JIT compiler before an application can serve its first request. In a serverless or container-heavy deployment, this warmup cost is paid every time a new instance starts.&lt;/p&gt;
&lt;p&gt;CRaC addresses this by letting you take a &lt;em&gt;checkpoint&lt;/em&gt; of a fully-warmed, running JVM process &amp;mdash; capturing its complete in-memory state &amp;mdash; and then &lt;em&gt;restore&lt;/em&gt; that snapshot on demand. A restored process skips the entire startup and warmup sequence, reaching full speed in milliseconds.&lt;/p&gt;</description></item><item><title>Disco API</title><link>https://foojayio.github.io/website/pedia/disco-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://foojayio.github.io/website/pedia/disco-api/</guid><description>&lt;p&gt;The Disco API (short for Universal OpenJDK Discovery API) is a database and REST API that catalogues every available OpenJDK package from every major distributor &amp;mdash; Temurin, Zulu, Corretto, Liberica, Oracle, and many others &amp;mdash; in one place. It covers every combination of Java version, operating system, CPU architecture, package type (JDK or JRE), and archive format, with tens of thousands of packages indexed.&lt;/p&gt;
&lt;p&gt;The API is maintained by Foojay and developed by Gerrit Grunwald. Its source code is available on &lt;a href="https://github.com/foojayio/discoapi" target="_blank" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;
. The base URL for the REST endpoints is &lt;code&gt;https://api.foojay.io/disco/v3.0/&lt;/code&gt;, and a full &lt;a href="https://api.foojay.io/swagger-ui" target="_blank" rel="noopener noreferrer"&gt;Swagger UI&lt;/a&gt;
 makes the API easy to explore interactively. Key endpoints let you query major versions, list all distributions, and filter packages by any combination of version, architecture, OS, and JavaFX bundling.&lt;/p&gt;</description></item><item><title>Epsilon GC</title><link>https://foojayio.github.io/website/pedia/epsilon-gc/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://foojayio.github.io/website/pedia/epsilon-gc/</guid><description>&lt;p&gt;Epsilon GC is a &lt;strong&gt;no-op garbage collector&lt;/strong&gt; : it allocates memory on request but never reclaims it. When the Java heap is exhausted, the JVM exits with an &lt;code&gt;OutOfMemoryError&lt;/code&gt;. It was introduced as an experimental feature in Java 11 (JEP 318).&lt;/p&gt;
&lt;p&gt;Epsilon sounds counterproductive, but it has legitimate use cases:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Performance benchmarking&lt;/strong&gt; &amp;mdash; GC activity introduces timing noise in microbenchmarks. Epsilon eliminates that noise, giving a clean measure of allocation and computation cost. Tools like JMH may benefit from Epsilon when benchmarking short-lived workloads.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Short-lived command-line tools&lt;/strong&gt; &amp;mdash; If an application runs for a fraction of a second and allocates only a few megabytes, GC overhead may outweigh any benefit. Epsilon reduces per-run latency to essentially zero.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Allocation testing&lt;/strong&gt; &amp;mdash; Engineers building GC-aware libraries can use Epsilon to verify that their code does not allocate unexpectedly, since any allocation under Epsilon is permanent and will eventually cause OOM.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Epsilon is not suitable for long-running applications or workloads with significant allocation. It requires explicitly unlocking experimental options:&lt;/p&gt;</description></item><item><title>Foreign Function &amp; Memory API</title><link>https://foojayio.github.io/website/pedia/foreign-function-memory-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://foojayio.github.io/website/pedia/foreign-function-memory-api/</guid><description>&lt;p&gt;The Foreign Function &amp;amp; Memory (FFM) API, finalised in Java 22 (JEP 454), provides a safe, efficient, and pure-Java way to interact with native code and off-heap memory &amp;mdash; replacing the older, error-prone Java Native Interface (JNI).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Foreign memory access&lt;/strong&gt; allows Java programs to allocate, read, and write memory outside the Java heap using &lt;code&gt;MemorySegment&lt;/code&gt;. Off-heap allocation is useful for large data structures that should not be managed by the GC, for memory-mapped files, and for shared memory between processes. The API enforces lifetime tracking: a &lt;code&gt;MemorySegment&lt;/code&gt; is associated with an &lt;code&gt;Arena&lt;/code&gt;, and its memory is released deterministically when the arena is closed.&lt;/p&gt;</description></item><item><title>Garbage Collection</title><link>https://foojayio.github.io/website/pedia/garbage-collection/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://foojayio.github.io/website/pedia/garbage-collection/</guid><description>&lt;p&gt;Garbage Collection (GC) is the process by which the JVM automatically reclaims memory occupied by objects that are no longer reachable by the running application. Java developers do not call &lt;code&gt;free()&lt;/code&gt; or &lt;code&gt;delete()&lt;/code&gt; as in C or C++; the garbage collector handles memory management automatically.&lt;/p&gt;
&lt;p&gt;Most JVM garbage collectors divide the heap into &lt;em&gt;generations&lt;/em&gt;. The assumption &amp;mdash; the &amp;ldquo;generational hypothesis&amp;rdquo; &amp;mdash; is that most objects die young. New objects are allocated in the young generation, which is collected frequently and cheaply. Objects that survive long enough are promoted to the old generation, which is collected less often but at greater cost.&lt;/p&gt;</description></item><item><title>GC Algorithms: G1, ZGC, and Shenandoah</title><link>https://foojayio.github.io/website/pedia/gc-algorithms-g1-zgc-and-shenandoah/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://foojayio.github.io/website/pedia/gc-algorithms-g1-zgc-and-shenandoah/</guid><description>&lt;p&gt;The JDK ships with several garbage collectors, each designed for different goals. Choosing the right one depends on whether your application prioritises throughput, latency, or predictability.&lt;/p&gt;
&lt;h3 id="serial-gc"&gt;Serial GC&lt;/h3&gt;
&lt;p&gt;The simplest collector, designed for single-threaded or very small-heap applications. It uses a single thread for both young and old generation collection and is the default in environments with a single CPU or very small heaps (under ~100 MB). For constrained containers or command-line tools, Serial GC has the lowest overhead. Use &lt;code&gt;-XX:+UseSerialGC&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>GraalVM and Native Image</title><link>https://foojayio.github.io/website/pedia/graalvm-and-native-image/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://foojayio.github.io/website/pedia/graalvm-and-native-image/</guid><description>&lt;p&gt;&lt;strong&gt;GraalVM&lt;/strong&gt; is a high-performance JDK distribution and runtime developed by Oracle. It extends the standard JDK with two key capabilities: the &lt;strong&gt;Graal JIT compiler&lt;/strong&gt; (a Java-written replacement for HotSpot&amp;rsquo;s C2 JIT that can deliver improved peak throughput for certain workloads) and &lt;strong&gt;Native Image&lt;/strong&gt; (an AOT compilation tool that produces self-contained native executables).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;GraalVM Native Image&lt;/strong&gt; performs a closed-world static analysis of the entire application at build time &amp;mdash; tracing all reachable code, classes, and resources &amp;mdash; then compiles the result to a native binary using Substrate VM, a minimal VM embedded in the output. The resulting executable:&lt;/p&gt;</description></item><item><title>Heap Dump</title><link>https://foojayio.github.io/website/pedia/heap-dump/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://foojayio.github.io/website/pedia/heap-dump/</guid><description>&lt;p&gt;A heap dump is a snapshot of all the objects in a Java process&amp;rsquo;s heap memory at a specific point in time, written to a file. It captures every object, its class, its size, and the references connecting objects to each other.&lt;/p&gt;
&lt;p&gt;Heap dumps are an essential tool for diagnosing memory-related problems. If your application is running out of memory, growing slowly over time (a memory leak), or consuming far more RAM than expected, a heap dump lets you see exactly what is occupying the heap and trace why objects are being retained.&lt;/p&gt;</description></item><item><title>Jakarta EE</title><link>https://foojayio.github.io/website/pedia/jakarta-ee/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://foojayio.github.io/website/pedia/jakarta-ee/</guid><description>&lt;p&gt;&lt;a href="https://jakarta.ee/" target="_blank" rel="noopener noreferrer"&gt;Jakarta EE&lt;/a&gt;
 is the open-source, community-driven successor to Java EE (Java Platform, Enterprise Edition). It defines a set of specifications for building enterprise Java applications &amp;mdash; covering everything from web services and dependency injection to persistence, messaging, and security.&lt;/p&gt;
&lt;p&gt;The name change happened when Oracle transferred stewardship of Java EE to the Eclipse Foundation in 2017. The transition involved more than a rename: because Oracle retained the &lt;code&gt;javax.*&lt;/code&gt; namespace, Jakarta EE 9 (released in 2020) migrated all specifications from &lt;code&gt;javax.*&lt;/code&gt; packages to &lt;code&gt;jakarta.*&lt;/code&gt;. This was a breaking change &amp;mdash; existing code importing &lt;code&gt;javax.servlet&lt;/code&gt;, &lt;code&gt;javax.persistence&lt;/code&gt;, and similar packages had to be updated &amp;mdash; but it gave the community full ownership of the platform going forward.&lt;/p&gt;</description></item><item><title>Java Champion</title><link>https://foojayio.github.io/website/pedia/java-champion/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://foojayio.github.io/website/pedia/java-champion/</guid><description>&lt;p&gt;A Java Champion is a recognised leader, educator, or innovator in the Java community &amp;mdash; someone who has demonstrated a sustained, meaningful contribution to the broader Java ecosystem through writing, speaking, open-source work, community building, or technical excellence.&lt;/p&gt;
&lt;p&gt;The program is managed by Oracle. Existing Java Champions nominate and vote on new candidates; Oracle holds veto rights but does not unilaterally elect members. The process is intentionally community-driven to keep the designation credible and peer-recognised. Approximately 400 Java Champions have been recognised worldwide as of 2026.&lt;/p&gt;</description></item><item><title>Java Community Process (JCP)</title><link>https://foojayio.github.io/website/pedia/java-community-process-jcp/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://foojayio.github.io/website/pedia/java-community-process-jcp/</guid><description>&lt;p&gt;The Java Community Process (JCP) is the formal mechanism through which the Java platform specifications are created and evolved. Established in 1998, it allows Java community members &amp;mdash; companies, organisations, and individuals &amp;mdash; to participate in defining the future of Java SE, Jakarta EE, and related specifications.&lt;/p&gt;
&lt;p&gt;Changes to the Java platform specification are proposed as &lt;strong&gt;Java Specification Requests (JSRs)&lt;/strong&gt;. A JSR defines an API or platform feature and goes through a multi-stage process: initiation, expert group formation, public drafts, a final ballot, and maintenance updates. Each JSR produces a specification document, a Reference Implementation (RI), and a TCK.&lt;/p&gt;</description></item><item><title>Java Module System (JPMS)</title><link>https://foojayio.github.io/website/pedia/java-module-system-jpms/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://foojayio.github.io/website/pedia/java-module-system-jpms/</guid><description>&lt;p&gt;The Java Platform Module System (JPMS), introduced in Java 9 as part of Project Jigsaw, brings a formal module concept to the Java platform. A module is a named, self-describing collection of packages. Each module declares what it exports (makes available to other modules) and what it requires (depends on), in a &lt;code&gt;module-info.java&lt;/code&gt; file at the root of the source tree.&lt;/p&gt;
&lt;p&gt;Before JPMS, the JVM had only the concept of the classpath &amp;mdash; a flat list of jars with no enforced boundaries between them. Any code could access any public class from any jar, which made large codebases hard to reason about and the JDK itself monolithic. JPMS enforces encapsulation: a package that is not explicitly exported is simply not accessible to code in other modules, even if it is public.&lt;/p&gt;</description></item><item><title>Java Native Interface (JNI)</title><link>https://foojayio.github.io/website/pedia/java-native-interface-jni/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://foojayio.github.io/website/pedia/java-native-interface-jni/</guid><description>&lt;p&gt;The Java Native Interface (JNI) is the standard mechanism that allows Java code running in the JVM to call, and be called by, native code written in C, C++, or other languages that can produce a shared library. It has been part of Java since version 1.1.&lt;/p&gt;
&lt;p&gt;JNI is used when Java needs to interact with platform-specific functionality (hardware access, OS APIs, existing C libraries), for performance-critical code where a native implementation is significantly faster, or to integrate with existing native codebases that cannot be rewritten in Java.&lt;/p&gt;</description></item><item><title>JDK Distributions</title><link>https://foojayio.github.io/website/pedia/jdk-distributions/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://foojayio.github.io/website/pedia/jdk-distributions/</guid><description>&lt;p&gt;The OpenJDK project publishes source code, not binaries. To actually run Java, you need a &lt;strong&gt;distribution&lt;/strong&gt;: a pre-built, tested binary of OpenJDK packaged by a vendor. Multiple vendors publish OpenJDK distributions, each adding their own packaging, support commitments, and sometimes additional features or patches.&lt;/p&gt;
&lt;p&gt;All major distributions are built from the same OpenJDK source and must pass the &lt;a href="https://foojayio.github.io/website/pedia/tck/"&gt;TCK&lt;/a&gt;
 to be labelled &amp;ldquo;Java SE compatible&amp;rdquo;. In practice they are interchangeable for most applications. The main differentiators are support terms, supported platforms, update frequency, and optional extras.&lt;/p&gt;</description></item><item><title>JDK Mission Control (JMC)</title><link>https://foojayio.github.io/website/pedia/jdk-mission-control-jmc/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://foojayio.github.io/website/pedia/jdk-mission-control-jmc/</guid><description>&lt;p&gt;JDK Mission Control is a suite of tools for profiling, monitoring, and diagnosing Java applications. It provides a GUI frontend for &lt;a href="https://foojayio.github.io/website/pedia/jfr-java-flight-recorder/"&gt;Java Flight Recorder (JFR)&lt;/a&gt;
 data and a live connection to running JVMs via JMX.&lt;/p&gt;
&lt;p&gt;JMC was originally developed by BEA Systems as JRockit Mission Control, acquired by Oracle with BEA in 2008, and open-sourced under the Eclipse Foundation in 2018 (project name: JDK Mission Control, or JMC). It is available as a standalone download and as a plugin for Eclipse IDE and IntelliJ IDEA.&lt;/p&gt;</description></item><item><title>JEP (JDK Enhancement Proposal)</title><link>https://foojayio.github.io/website/pedia/jep-jdk-enhancement-proposal/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://foojayio.github.io/website/pedia/jep-jdk-enhancement-proposal/</guid><description>&lt;p&gt;A JDK Enhancement Proposal (JEP) is the formal document used to propose, track, and communicate a significant change to the Java platform. Every major language feature, JVM improvement, or API addition that ships in a JDK release starts life as a JEP.&lt;/p&gt;
&lt;p&gt;A JEP describes the motivation for the change, its goals and non-goals, the proposed design, and the alternatives considered. JEPs go through a lifecycle of states &amp;mdash; Draft, Submitted, Candidate, Proposed to Target, Targeted, Integrated, Complete &amp;mdash; before a change lands in a release.&lt;/p&gt;</description></item><item><title>JFR (Java Flight Recorder)</title><link>https://foojayio.github.io/website/pedia/jfr-java-flight-recorder/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://foojayio.github.io/website/pedia/jfr-java-flight-recorder/</guid><description>&lt;p&gt;Java Flight Recorder (JFR) is a low-overhead profiling and event-collection framework built into the JDK. It records a continuous stream of events about the JVM and the running application &amp;mdash; garbage collection pauses, thread states, CPU usage, I/O, exception throws, and hundreds more &amp;mdash; with negligible impact on application performance (typically less than 1% overhead).&lt;/p&gt;
&lt;p&gt;JFR was originally a commercial feature in Oracle JDK and was open-sourced and contributed to OpenJDK in JDK 11. It is enabled with a simple JVM flag (&lt;code&gt;-XX:StartFlightRecording&lt;/code&gt;) or programmatically via the &lt;code&gt;jdk.jfr&lt;/code&gt; API, and recordings can be made in a continuous loop or for a fixed duration.&lt;/p&gt;</description></item><item><title>JIT Compilation (Just-in-Time)</title><link>https://foojayio.github.io/website/pedia/jit-compilation-just-in-time/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://foojayio.github.io/website/pedia/jit-compilation-just-in-time/</guid><description>&lt;p&gt;Just-in-time (JIT) compilation is the process by which the JVM translates &lt;a href="https://foojayio.github.io/website/pedia/bytecode/"&gt;bytecode&lt;/a&gt;
 into native machine code &lt;strong&gt;while the application is running&lt;/strong&gt;, rather than before it starts. This is the mechanism responsible for Java&amp;rsquo;s high peak throughput: the JVM profiles running code and compiles only the methods that are actually &amp;ldquo;hot&amp;rdquo; (frequently executed), applying increasingly aggressive optimisations as confidence in the profile grows.&lt;/p&gt;
&lt;p&gt;The JVM starts by interpreting bytecode. When a method has been called enough times to cross a threshold, the JIT compiler (C1, the client compiler) produces an initial native compilation with limited optimisation. If the method continues to be called heavily, the more aggressive C2 (server compiler) recompiles it with speculative optimisations &amp;mdash; inlining, loop unrolling, escape analysis, and more. This two-tier strategy (called tiered compilation, the default since Java 8) balances fast startup with high peak performance.&lt;/p&gt;</description></item><item><title>jtreg Test Suites</title><link>https://foojayio.github.io/website/pedia/jtreg-test-suites/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://foojayio.github.io/website/pedia/jtreg-test-suites/</guid><description>&lt;p&gt;jtreg is the test harness for regression and unit testing used by the JDK test framework. For many OpenJDK distributions, the jtreg tests are run in addition to the &lt;a href="https://foojayio.github.io/website/pedia/tck/"&gt;TCK&lt;/a&gt;
 to provide broader coverage of JVM behaviour and standard library correctness.&lt;/p&gt;
&lt;p&gt;The OpenJDK source repository (hosted at &lt;a href="https://github.com/openjdk/jdk" target="_blank" rel="noopener noreferrer"&gt;github.com/openjdk/jdk&lt;/a&gt;
) contains tens of thousands of jtreg tests. As of Java 21, the test suite contains over 100,000 individual test cases across the &lt;code&gt;test/&lt;/code&gt; directory tree &amp;mdash; covering the compiler, JVM, standard libraries, and tools. The count grows with every release.&lt;/p&gt;</description></item><item><title>Latency</title><link>https://foojayio.github.io/website/pedia/latency/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://foojayio.github.io/website/pedia/latency/</guid><description>&lt;p&gt;Latency is the time between the initiation of a procedure and the completion of the procedure; in other words, how long it takes for something to happen.&lt;/p&gt;
&lt;p&gt;In the realm of software, there are many types of latency. No application can possibly be truly real-time (that is, zero latency: zero time elapses between the initiation of the procedure and the delivery of the result). Still, the objective of all high-performance applications is to be as close to real-time as possible.&lt;/p&gt;</description></item><item><title>LTS and Non-LTS Releases</title><link>https://foojayio.github.io/website/pedia/lts-and-non-lts-releases/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://foojayio.github.io/website/pedia/lts-and-non-lts-releases/</guid><description>&lt;p&gt;Since Java 9, the JDK has followed a strict six-month release cadence: a new version ships every March and September. Most of these are &lt;em&gt;feature releases&lt;/em&gt; with a short support window &amp;mdash; typically six months, until the next version arrives. These are sometimes called non-LTS, short-term support (STS), or simply feature releases.&lt;/p&gt;
&lt;p&gt;Every few years, one release is designated &lt;em&gt;Long-Term Support (LTS)&lt;/em&gt;. LTS releases receive security patches and bug fixes for a significantly longer period &amp;mdash; at least several years for most vendors, and often much longer with commercial support agreements. Java 8, 11, 17, 21, and 25 are LTS releases. The interval between LTS releases shifted from three years (8→11→17) to two years (17→21→25) starting with Java 21.&lt;/p&gt;</description></item><item><title>OpenJDK</title><link>https://foojayio.github.io/website/pedia/openjdk/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://foojayio.github.io/website/pedia/openjdk/</guid><description>&lt;p&gt;&lt;a href="https://openjdk.org" target="_blank" rel="noopener noreferrer"&gt;OpenJDK&lt;/a&gt;
 is the open-source reference implementation of the Java Platform, Standard Edition (Java SE) specification. It is the upstream project from which virtually all Java distributions are built. OpenJDK is source code, not a runnable binary &amp;mdash; to run Java applications you need a &lt;a href="https://foojayio.github.io/website/pedia/jdk-distributions/"&gt;distribution&lt;/a&gt;
 built from that source.&lt;/p&gt;
&lt;p&gt;Oracle leads OpenJDK development and contributes the majority of the code, but the project has contributions from Amazon, Microsoft, Red Hat, SAP, Azul, Google, and many individual developers. Governance follows the OpenJDK bylaws, with an Author → Committer → Reviewer hierarchy. New features are proposed via &lt;a href="https://foojayio.github.io/website/pedia/jep-jdk-enhancement-proposal/"&gt;JEPs (JDK Enhancement Proposals)&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>OpenJDK Coding Guidelines and Code Reviews</title><link>https://foojayio.github.io/website/pedia/openjdk-coding-guidelines/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://foojayio.github.io/website/pedia/openjdk-coding-guidelines/</guid><description>&lt;p&gt;OpenJDK does not have a single exhaustive coding style guide. Sub-components come from diverse origins (HotSpot, the standard library, OpenJFX, etc.) and each has its own conventions. The main reference documents are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Developer&amp;rsquo;s Guide:&lt;/strong&gt; &lt;a href="https://openjdk.org/guide/" target="_blank" rel="noopener noreferrer"&gt;openjdk.org/guide/&lt;/a&gt;
 &amp;mdash; covers the development process, code conventions, changeset format, and review workflow.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;How to Contribute:&lt;/strong&gt; &lt;a href="https://openjdk.org/contribute/" target="_blank" rel="noopener noreferrer"&gt;openjdk.org/contribute/&lt;/a&gt;
 &amp;mdash; prerequisites, JCA (Oracle Contributor Agreement), and getting started.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;HotSpot Style Guide:&lt;/strong&gt; &lt;a href="https://wiki.openjdk.org/display/HotSpot/StyleGuide" target="_blank" rel="noopener noreferrer"&gt;wiki.openjdk.org/display/HotSpot/StyleGuide&lt;/a&gt;
 &amp;mdash; C++ conventions for JVM internals.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;OpenJFX:&lt;/strong&gt; &lt;a href="https://wiki.openjdk.org/display/OpenJFX/Committing&amp;#43;the&amp;#43;Code" target="_blank" rel="noopener noreferrer"&gt;wiki.openjdk.org/display/OpenJFX/Committing+the+Code&lt;/a&gt;
 and &lt;a href="https://wiki.openjdk.org/display/OpenJFX/Code&amp;#43;Reviews" target="_blank" rel="noopener noreferrer"&gt;Code Reviews&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="code-reviews-and-code-quality"&gt;Code Reviews and Code Quality&lt;/h3&gt;
&lt;p&gt;Changes to OpenJDK are reviewed and approved by &lt;strong&gt;Reviewers&lt;/strong&gt; &amp;mdash; contributors with Reviewer role in a given repository. Multiple Reviewers must approve a change before it is integrated; the exact number depends on the sub-project. The integration itself is performed by a &lt;strong&gt;Committer&lt;/strong&gt; using the &lt;a href="https://github.com/openjdk/skara" target="_blank" rel="noopener noreferrer"&gt;OpenJDK GitHub bots&lt;/a&gt;
 (the Skara tooling).&lt;/p&gt;</description></item><item><title>OpenJDK Projects</title><link>https://foojayio.github.io/website/pedia/openjdk-projects/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://foojayio.github.io/website/pedia/openjdk-projects/</guid><description>&lt;p&gt;OpenJDK is organised into named &lt;strong&gt;Projects&lt;/strong&gt; : focused research and development efforts that explore or implement significant improvements to the Java platform. Each project has its own mailing list, repository, and contributor community. Successful work in a project typically results in one or more &lt;a href="https://foojayio.github.io/website/pedia/jep-jdk-enhancement-proposal/"&gt;JEPs&lt;/a&gt;
 that integrate the work into mainline JDK releases.&lt;/p&gt;
&lt;p&gt;The most significant active and recent projects:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Project Loom&lt;/strong&gt; &amp;mdash; Delivered &lt;a href="https://foojayio.github.io/website/pedia/virtual-threads/"&gt;virtual threads&lt;/a&gt;
 (Java 21), structured concurrency, and scoped values. Aims to make concurrent Java programming dramatically simpler and more scalable by replacing thread-per-request models with lightweight virtual threads.&lt;/p&gt;</description></item></channel></rss>