# jdk

Published articles for jdk.

This is one page of public article previews, not the complete archive. Follow Next page to continue. Summaries are not the original full articles.

## Java 27 adds improvements to garbage collection, headers, data security, and quantum key support

DevFeed: [Java 27 adds improvements to garbage collection, headers, data security, and quantum key support](<https://devfeed.tech/articles/java-27-grows-up-makes-better-choices-30925.md>)

Original publisher: [Read original article](<https://www.theregister.com/devops/2026/09/16/java-27-grows-up-makes-better-choices/5296707>)

Author: Joab Jackson

Published: 2026-09-16T04:50:00Z

Content type: news

Language: en

Sources: [www.theregister.com - Articles](<https://devfeed.tech/sources/www-theregister-com-articles.md>)

Topics: [java-27](<https://devfeed.tech/topics/java-27.md>), [Java](<https://devfeed.tech/topics/java.md>), [Security](<https://devfeed.tech/topics/security.md>), [data](<https://devfeed.tech/topics/data.md>)

Tags: [devops](<https://devfeed.tech/tags/devops.md>), [garbage-collection](<https://devfeed.tech/tags/garbage-collection.md>), [improvements](<https://devfeed.tech/tags/improvements.md>), [java](<https://devfeed.tech/tags/java.md>), [java-27](<https://devfeed.tech/tags/java-27.md>), [jdk](<https://devfeed.tech/tags/jdk.md>), [jdk-27](<https://devfeed.tech/tags/jdk-27.md>), [openjdk](<https://devfeed.tech/tags/openjdk.md>), [post-quantum-cryptography](<https://devfeed.tech/tags/post-quantum-cryptography.md>)

### AI overview

Java 27 introduces improvements to JDK garbage collection, header sizes, data security, and quantum key support, with the stated aim of reducing developer friction.

### Source excerpt

Improvements in JDK garbage collection, header sizes, data security and quantum key support all should minimize developer friction

## JDK 27 Is Generally Available with Nine JEP-Backed Enhancements

DevFeed: [JDK 27 Is Generally Available with Nine JEP-Backed Enhancements](<https://devfeed.tech/articles/the-arrival-of-java-27-26790.md>)

Original publisher: [Read original article](<https://inside.java/2026/09/15/jdk-27-available/>)

Author: On September

Published: 2026-09-15T00:00:00Z

Content type: release

Language: en

Sources: [Inside Java](<https://devfeed.tech/sources/inside-java.md>)

Topics: [JDK 27](<https://devfeed.tech/topics/jdk-27.md>), [Java](<https://devfeed.tech/topics/java.md>), [Security](<https://devfeed.tech/topics/security.md>), [Cryptography](<https://devfeed.tech/topics/cryptography.md>), [Quantum Computing](<https://devfeed.tech/topics/quantum-computing.md>)

Tags: [announce](<https://devfeed.tech/tags/announce.md>), [cryptography](<https://devfeed.tech/tags/cryptography.md>), [improvements](<https://devfeed.tech/tags/improvements.md>), [java](<https://devfeed.tech/tags/java.md>), [jdk](<https://devfeed.tech/tags/jdk.md>), [jdk-27](<https://devfeed.tech/tags/jdk-27.md>), [oracle](<https://devfeed.tech/tags/oracle.md>), [quantum](<https://devfeed.tech/tags/quantum.md>), [security](<https://devfeed.tech/tags/security.md>)

### AI overview

Oracle announces the general availability of JDK 27, which includes nine enhancements covered by JDK Enhancement Proposals, including preview and incubator features across the Java language, security, performance, runtime, and libraries.

### Source excerpt

JDK 27 is now available! Oracle is proud to announce the general availability of JDK 27 for developers, enterprises, and end-users.

## Java 27 Technically Within 2 Minutes

DevFeed: [Java 27 Technically Within 2 Minutes](<https://devfeed.tech/articles/java-27-technically-within-2-minutes-15133.md>)

Original publisher: [Read original article](<https://inside.java/2026/09/13/jdk-27-in-2-min/>)

Author: Billy Korando

Published: 2026-09-13T00:00:00Z

Content type: article

Language: en

Sources: [Inside Java](<https://devfeed.tech/sources/inside-java.md>)

Topics: [JDK 27](<https://devfeed.tech/topics/jdk-27.md>)

Tags: [java](<https://devfeed.tech/tags/java.md>), [jdk](<https://devfeed.tech/tags/jdk.md>), [jdk-27](<https://devfeed.tech/tags/jdk-27.md>), [livestream](<https://devfeed.tech/tags/livestream.md>), [release](<https://devfeed.tech/tags/release.md>), [review](<https://devfeed.tech/tags/review.md>)

### AI overview

A brief review of the nine JDK Enhancement Proposals included in the JDK 27 release, with an invitation to a Java 27 livestream featuring live demos and guests.

### Source excerpt

Let's review in about 2 minutes the 9 JEPs (JDK Enhancement Proposals) that were included in the JDK 27 release!

## Episode 69 "Declassifying Java 27" \[IJN\]

DevFeed: [Episode 69 "Declassifying Java 27" \[IJN\]](<https://devfeed.tech/articles/episode-69-declassifying-java-27-ijn-15131.md>)

Original publisher: [Read original article](<https://inside.java/2026/09/10/podcast-069/>)

Author: Billy Korando

Published: 2026-09-10T00:00:00Z

Content type: news

Language: en

Sources: [Inside Java](<https://devfeed.tech/sources/inside-java.md>)

Topics: [Java](<https://devfeed.tech/topics/java.md>), [openjdk](<https://devfeed.tech/topics/openjdk.md>), [Programming](<https://devfeed.tech/topics/programming.md>)

Tags: [java](<https://devfeed.tech/tags/java.md>), [jdk](<https://devfeed.tech/tags/jdk.md>), [jdk-27](<https://devfeed.tech/tags/jdk-27.md>), [news](<https://devfeed.tech/tags/news.md>), [openjdk](<https://devfeed.tech/tags/openjdk.md>), [podcast](<https://devfeed.tech/tags/podcast.md>), [release](<https://devfeed.tech/tags/release.md>)

### AI overview

This episode discusses Java 27, scheduled for release on September 15, and reviews developer-impacting changes, including new features and changes to existing behavior.

### Source excerpt

Java 27 is set to be released on September 15th, let's review what's coming!

## Principles of Memory Management in Java

DevFeed: [Principles of Memory Management in Java](<https://devfeed.tech/articles/principles-of-memory-management-in-java-15130.md>)

Original publisher: [Read original article](<https://inside.java/2026/09/04/memory-management-principles-java/>)

Author: Ron Pressler

Published: 2026-09-04T00:00:00Z

Content type: article

Language: en

Sources: [Inside Java](<https://devfeed.tech/sources/inside-java.md>)

Topics: [Java](<https://devfeed.tech/topics/java.md>), [cpu](<https://devfeed.tech/topics/cpu.md>)

Tags: [2026](<https://devfeed.tech/tags/2026.md>), [cpu](<https://devfeed.tech/tags/cpu.md>), [garbage-collectors](<https://devfeed.tech/tags/garbage-collectors.md>), [java](<https://devfeed.tech/tags/java.md>), [javaone](<https://devfeed.tech/tags/javaone.md>), [jdk](<https://devfeed.tech/tags/jdk.md>), [memory](<https://devfeed.tech/tags/memory.md>), [performance](<https://devfeed.tech/tags/performance.md>), [talk](<https://devfeed.tech/tags/talk.md>)

### AI overview

This talk explains the design choices behind the JDK's garbage collectors and how Java memory management affects application performance. It also examines the relationship between RAM and CPU and questions whether Java's memory use is inherently wasteful.

### Source excerpt

In this talk, we'll explore why the JDK's garbage collectors work the way they do and how Java memory management affects application performance. We'll look at the sometimes non-obvious relationship between RAM and CPU, and why they must always be considered together.

## Acceleration of Curve25519 Field Operations with Java Software and Intrinsics

DevFeed: [Acceleration of Curve25519 Field Operations with Java Software and Intrinsics](<https://devfeed.tech/articles/acceleration-of-curve25519-field-operations-with-java-software-and-intrinsics-15129.md>)

Original publisher: [Read original article](<https://inside.java/2026/09/03/java-acceleration-curve25519-field-operations/>)

Author: Shawn Emery

Published: 2026-09-03T00:00:00Z

Content type: article

Language: en

Sources: [Inside Java](<https://devfeed.tech/sources/inside-java.md>)

Topics: [Java](<https://devfeed.tech/topics/java.md>), [JDK 27](<https://devfeed.tech/topics/jdk-27.md>), [JDK 28](<https://devfeed.tech/topics/jdk-28.md>), [Security](<https://devfeed.tech/topics/security.md>), [Post-Quantum](<https://devfeed.tech/topics/post-quantum.md>)

Tags: [crypto](<https://devfeed.tech/tags/crypto.md>), [ed25519](<https://devfeed.tech/tags/ed25519.md>), [java](<https://devfeed.tech/tags/java.md>), [jdk](<https://devfeed.tech/tags/jdk.md>), [jdk-27](<https://devfeed.tech/tags/jdk-27.md>), [jdk-28](<https://devfeed.tech/tags/jdk-28.md>), [performance](<https://devfeed.tech/tags/performance.md>), [post-quantum](<https://devfeed.tech/tags/post-quantum.md>), [security](<https://devfeed.tech/tags/security.md>), [tls](<https://devfeed.tech/tags/tls.md>), [x86](<https://devfeed.tech/tags/x86.md>)

### AI overview

JDK 27 and JDK 28 improve Curve25519 field-operation performance through software changes and architecture-specific intrinsics. The improvements benefit X25519, Ed25519, and X25519MLKEM768 operations, with gains varying by algorithm, JDK build, and x86_64 or AArch64 platform.

### Source excerpt

Find out about the improved Curve25519 field performance in JDK 27 and JDK 28.

## Episode 67 "Keeping Up With the Java Release Train" \[I/O\]

DevFeed: [Episode 67 "Keeping Up With the Java Release Train" \[I/O\]](<https://devfeed.tech/articles/episode-67-keeping-up-with-the-java-release-train-i-o-15124.md>)

Original publisher: [Read original article](<https://inside.java/2026/08/20/podcast-067/>)

Author: Billy Korando

Published: 2026-08-20T00:00:00Z

Content type: article

Language: en

Sources: [Inside Java](<https://devfeed.tech/sources/inside-java.md>)

Topics: [Java](<https://devfeed.tech/topics/java.md>), [Development](<https://devfeed.tech/topics/development.md>)

Tags: [2026](<https://devfeed.tech/tags/2026.md>), [community](<https://devfeed.tech/tags/community.md>), [java](<https://devfeed.tech/tags/java.md>), [jdk](<https://devfeed.tech/tags/jdk.md>), [release](<https://devfeed.tech/tags/release.md>), [release-cadence](<https://devfeed.tech/tags/release-cadence.md>)

### AI overview

Episode 67 of the Inside Java Podcast discusses whether organizations can keep up with Java's six-month release cadence. Recorded during JavaOne 2026, Billy Korando interviews SIXT Senior Staff Engineer Danish Nawab about perspectives from outside OpenJDK on the Java ecosystem.

### Source excerpt

Since Java moved to a six-month release cadence with JDK 10 in March of 2018, there has been a question if it was practical or possible for organization to keep up with such a release cadence.

## Install, Launch, Update: Shipping a CLI on Five Platforms -- the devrig Approach

DevFeed: [Install, Launch, Update: Shipping a CLI on Five Platforms -- the devrig Approach](<https://devfeed.tech/articles/install-launch-update-shipping-a-cli-on-five-platforms-the-devrig-approach-25428.md>)

Original publisher: [Read original article](<https://jonnyzzz.com/blog/2026/08/06/devrig-install-launch-autoupdate/>)

Author: Eugene Petrenko

Published: 2026-08-06T00:00:00Z

Content type: tutorial

Language: en

Sources: [Eugene Petrenko](<https://devfeed.tech/sources/eugene-petrenko.md>)

Topics: [Command-line interface](<https://devfeed.tech/topics/cli.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [ide](<https://devfeed.tech/topics/ide.md>)

Tags: [agents](<https://devfeed.tech/tags/agents.md>), [ai-agents](<https://devfeed.tech/tags/ai-agents.md>), [ai-coding](<https://devfeed.tech/tags/ai-coding.md>), [architecture](<https://devfeed.tech/tags/architecture.md>), [cli](<https://devfeed.tech/tags/cli.md>), [command-line](<https://devfeed.tech/tags/command-line.md>), [devrig](<https://devfeed.tech/tags/devrig.md>), [distribution](<https://devfeed.tech/tags/distribution.md>), [eugene-petrenko](<https://devfeed.tech/tags/eugene-petrenko.md>), [jdk](<https://devfeed.tech/tags/jdk.md>), [jonnyzzz](<https://devfeed.tech/tags/jonnyzzz.md>), [jvm](<https://devfeed.tech/tags/jvm.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [mcp-steroid](<https://devfeed.tech/tags/mcp-steroid.md>), [open-source](<https://devfeed.tech/tags/open-source.md>), [sha-256](<https://devfeed.tech/tags/sha-256.md>), [tag-41199d53f463](<https://devfeed.tech/tags/tag-41199d53f463.md>)

### AI overview

This tutorial presents the devrig approach to distributing and updating a JVM command-line tool across five platforms. It describes generated install scripts with verified JDK coordinates and baked-in URLs and SHA-256 hashes, content-addressed side-by-side installations, binary-owned launchers, and updates performed by running a fresh install script.

### Source excerpt

A JVM command-line tool is easy to write and miserable to ship. You need five platforms, a JDK the user does not have, an update path that never overwrites a running install, and a trust story for a `curl | sh` one-liner. Here is the architecture we ended up with in `devrig`: generate the install script from a model whose JDK coordinates are signature-verified, make installs content-addressed and side-by-side, let the binary own its own launcher, and make "update" mean nothing more than running a fresh install script

## Essential Tips for Gradle on Ephemeral CI Environments - Part 2

DevFeed: [Essential Tips for Gradle on Ephemeral CI Environments - Part 2](<https://devfeed.tech/articles/essential-tips-for-gradle-on-ephemeral-ci-environments-part-2-24632.md>)

Original publisher: [Read original article](<https://blog.gradle.org/gradle-on-ephemeral-ci-2>)

Author: Louis Jacomet

Published: 2026-07-08T04:00:00Z

Content type: article

Language: en

Sources: [The Gradle Blog](<https://devfeed.tech/sources/the-gradle-blog.md>)

Topics: [Gradle](<https://devfeed.tech/topics/gradle.md>), [Caching](<https://devfeed.tech/topics/caching.md>), [benchmarking](<https://devfeed.tech/topics/benchmarking.md>), [Spring Boot](<https://devfeed.tech/topics/spring-boot.md>), [Docker](<https://devfeed.tech/topics/docker.md>), [GitHub](<https://devfeed.tech/topics/github.md>)

Tags: [benchmarking](<https://devfeed.tech/tags/benchmarking.md>), [build-performance](<https://devfeed.tech/tags/build-performance.md>), [cache](<https://devfeed.tech/tags/cache.md>), [docker](<https://devfeed.tech/tags/docker.md>), [github](<https://devfeed.tech/tags/github.md>), [gradle](<https://devfeed.tech/tags/gradle.md>), [jdk](<https://devfeed.tech/tags/jdk.md>), [spring-boot](<https://devfeed.tech/tags/spring-boot.md>)

### AI overview

Part 2 examines Gradle configuration-phase performance in ephemeral CI environments, focusing on dependency and script caching and the roles of the setup-gradle GitHub Action and Develocity Universal Cache.

### Source excerpt

In Part 1, we explored foundational strategies for improving Gradle build performance in ephemeral CI environments, focusing on the Startup and Initialization phase. Now, in Part 2, we shift our focus to the Configuration phase: the work Gradle does after startup but before it executes any tasks. We'll benchmark dependency and script caching, then look at where the setup-gradle GitHub Action and Develocity's Universal Cache fit. Benchmarking Performance in Ephemeral CI The methodology is the same as in Part 1: each scenario builds a fresh Docker image of the Spring Boot Project with --no-cache, base images are pre-pulled, and every figure is the average of ten runs against one consistent baseline. Individual runs vary by a second or two, so read small differences as approximate rather than exact. These numbers are not intended as universal Gradle performance claims. They show the relative impact of configuration-phase optimizations for one small Spring Boot project, one Gradle version, one JDK image, and one local Docker environment. Larger builds, with more dependencies and more build logic, will generally see bigger gains from dependency and script caching than a small sample project does. NOTE: All measurements in this post are pinned to Gradle 9.5.1. If you repeat the experiment with a newer Gradle version, rebuild the prime image and update any version-specific cache paths accordingly. One difference from Part 1: for the Configuration phase, we prime the cache by building the complete Spring Boot Project, not the empty Prime Project. Caching configuration-phase work only means something when there are real dependencies and real build scripts to cache, so the prime image must reflect a realistic project. As in Part 1, that prime image is built once and only restored from, so the timed builds measure cache restore, not cache creation. Building the full project populates the following directories in the Gradle User Home: .gradle/ <-- Gradle User Home (default: ~/.

## How Gradle Is Javamaxxing

DevFeed: [How Gradle Is Javamaxxing](<https://devfeed.tech/articles/how-gradle-is-javamaxxing-24628.md>)

Original publisher: [Read original article](<https://blog.gradle.org/gradle-is-javamaxxing>)

Author: Laura Kassovic

Published: 2026-05-28T04:00:00Z

Content type: article

Language: en

Sources: [The Gradle Blog](<https://devfeed.tech/sources/the-gradle-blog.md>)

Topics: [Gradle](<https://devfeed.tech/topics/gradle.md>), [Java](<https://devfeed.tech/topics/java.md>), [toolchains](<https://devfeed.tech/topics/toolchains.md>), [toolchain](<https://devfeed.tech/topics/toolchain.md>)

Tags: [bytecode](<https://devfeed.tech/tags/bytecode.md>), [compiler](<https://devfeed.tech/tags/compiler.md>), [garbage-collectors](<https://devfeed.tech/tags/garbage-collectors.md>), [gradle](<https://devfeed.tech/tags/gradle.md>), [java](<https://devfeed.tech/tags/java.md>), [java-8](<https://devfeed.tech/tags/java-8.md>), [jdk](<https://devfeed.tech/tags/jdk.md>), [jvm](<https://devfeed.tech/tags/jvm.md>), [openjdk](<https://devfeed.tech/tags/openjdk.md>), [optimization](<https://devfeed.tech/tags/optimization.md>), [performance-optimization](<https://devfeed.tech/tags/performance-optimization.md>), [release](<https://devfeed.tech/tags/release.md>)

### AI overview

Gradle aggressively adopts new JDK releases because newer JVMs can improve build speed, memory use, startup behavior, and maintainability. JVM toolchains allow Gradle to run on JDK 26 while compiling and testing projects for older Java versions, including producing Java 8-compatible bytecode.

### Source excerpt

Some people optimize one part of their lives to the absolute limit, then past it. They call it "-maxxing." Houseplantmaxxing. Sleepmaxxing. Tokenmaxxing. The Gradle Build Tool is Javamaxxing. TL;DR Breathe easy knowing you can run modern Gradle on JDK 26 while still shipping Java 8-compatible artifacts: Gradle aggressively adopts new JDKs because newer JVMs make builds faster, leaner, and easier to maintain. Upgrading the JDK that runs Gradle is often the easiest performance win. JVM toolchains fully separate the JVM running Gradle, the JVM compiling your code, and the JVM running your tests. NOT TL;DR We aggressively adopt new JDK releases as soon as we responsibly can. Not because it's trendy. Because newer JDKs make Gradle faster, leaner, and easier to maintain. Every OpenJDK release ships improvements to the JVM; garbage collectors, compiler infrastructure, startup behavior, memory layout, and runtime APIs. As a high-performance JVM build tool, Gradle benefits directly from all of it. The question people immediately ask is: Does this mean my project also has to run on the newest JDK? No. That coupling effectively disappeared once Gradle introduced JVM toolchains. With toolchains, the JVM that runs Gradle is completely separate from the JVM that compiles, tests, and executes your code. You can run Gradle on JDK 26 today and still produce Java 8 bytecode. What Is the Current State of Gradle and Java? We add daemon support for every new JDK as soon as the ecosystem permits: Java 24 in Gradle 8.14.0, Java 25 in 9.1.0 (released two days after JDK 25 GA), Java 26 in 9.4.0. The full mapping is in the Compatibility Matrix. We then bump the minimum JVM required to execute Gradle as users move. Gradle 9.0.0, released on July 31, 2025, raised the minimum JVM required to run the Gradle daemon to Java 17. That was the first daemon JVM floor increase since Gradle 5.0 made Java 8 the minimum back in 2018. The next major transition is already underway, Gradle 10.0.0 will likely

## Official Experimental Java 17 Support for Codename One Projects

DevFeed: [Official Experimental Java 17 Support for Codename One Projects](<https://devfeed.tech/articles/official-experimental-java-17-support-for-codename-one-projects-19420.md>)

Original publisher: [Read original article](<https://www.codenameone.com/blog/official-experimental-java-17-support/>)

Author: Shai Almog

Published: 2026-03-14T00:00:00Z

Content type: release

Language: en

Sources: [CodeName One](<https://devfeed.tech/sources/codename-one.md>)

Topics: [Java](<https://devfeed.tech/topics/java.md>), [toolchain](<https://devfeed.tech/topics/toolchain.md>)

Tags: [experimental](<https://devfeed.tech/tags/experimental.md>), [java](<https://devfeed.tech/tags/java.md>), [jdk](<https://devfeed.tech/tags/jdk.md>), [language](<https://devfeed.tech/tags/language.md>), [release](<https://devfeed.tech/tags/release.md>), [toolchain](<https://devfeed.tech/tags/toolchain.md>)

### AI overview

Codename One projects generated with the Initializr now have official experimental support for Java 17. The support covers selected Java 17 language features and most targets, while desktop and UWP targets have limitations. Record support is planned for Codename One 7.0.229 on March 20, 2026, and newer language levels are planned for a future update.

### Source excerpt

Codename One projects generated with the Initializr can now use official experimental Java 17 support, with record support arriving in Codename One 7.0.229 on March 20, 2026, and more JDK support planned next.

## 10 or more reasons to not use JDK's HttpClient

DevFeed: [10 or more reasons to not use JDK's HttpClient](<https://devfeed.tech/articles/10-or-more-reasons-to-not-use-jdk-s-httpclient-26086.md>)

Original publisher: [Read original article](<https://blog.arkey.fr/2026/02/08/ten-reasons-to-not-use-jdk-httpclient/>)

Author: brice.dutheil@gmail.com (Brice Dutheil)

Published: 2026-02-08T16:53:00Z

Content type: opinion

Language: en

Sources: [The Coffee Workshop](<https://devfeed.tech/sources/the-coffee-workshop.md>)

Topics: [Java HttpClient](<https://devfeed.tech/topics/java-httpclient.md>), [Java](<https://devfeed.tech/topics/java.md>), [HTTP](<https://devfeed.tech/topics/http.md>), [client](<https://devfeed.tech/topics/client.md>), [TLS (Transport Layer Security)](<https://devfeed.tech/topics/tls.md>)

Tags: [article](<https://devfeed.tech/tags/article.md>), [http](<https://devfeed.tech/tags/http.md>), [java](<https://devfeed.tech/tags/java.md>), [jdk](<https://devfeed.tech/tags/jdk.md>), [tls](<https://devfeed.tech/tags/tls.md>)

### AI overview

This opinion article argues that JDK's HttpClient, introduced with Java 11, may not be the best choice for most use cases. It discusses limitations involving Unix domain sockets, API customization, timeout behavior, SSL/TLS configuration, and certificate pinning, while noting that the JDK team has continued improving the client.

### Source excerpt

This article explains 10+ reasons why after 14 JDK releases the JDK's HttpClient introduced with Java 11 is unlikely to be the best option in your app.

## Using Ahead-of-Time Cache Optimizations in Recent JDK Releases

DevFeed: [Using Ahead-of-Time Cache Optimizations in Recent JDK Releases](<https://devfeed.tech/articles/run-into-the-new-year-with-java-s-ahead-of-time-cache-features-23028.md>)

Original publisher: [Read original article](<https://www.javaadvent.com/2025/12/run-java-aot-cache-optimizations.html>)

Author: Ana-Maria Mihalceanu

Published: 2025-12-17T03:03:45Z

Content type: tutorial

Language: en

Sources: [Java Advent Calendar](<https://devfeed.tech/sources/java-advent-calendar.md>)

Topics: [Java](<https://devfeed.tech/topics/java.md>), [Caching](<https://devfeed.tech/topics/caching.md>), [JIT](<https://devfeed.tech/topics/jit.md>), [Memory safety verification](<https://devfeed.tech/topics/memory-safety-verification.md>)

Tags: [2025](<https://devfeed.tech/tags/2025.md>), [cache](<https://devfeed.tech/tags/cache.md>), [guides](<https://devfeed.tech/tags/guides.md>), [java](<https://devfeed.tech/tags/java.md>), [java-advent](<https://devfeed.tech/tags/java-advent.md>), [jdk](<https://devfeed.tech/tags/jdk.md>), [jdk25](<https://devfeed.tech/tags/jdk25.md>), [jit](<https://devfeed.tech/tags/jit.md>), [jvm](<https://devfeed.tech/tags/jvm.md>), [openjdk](<https://devfeed.tech/tags/openjdk.md>), [performance](<https://devfeed.tech/tags/performance.md>), [project-leyden](<https://devfeed.tech/tags/project-leyden.md>), [startup](<https://devfeed.tech/tags/startup.md>)

### AI overview

This tutorial explains how to use Ahead-of-Time cache features in recent JDK releases to improve Java application startup time and warm-up performance. It covers the train, assemble, and run workflow introduced in JDK 24 and method profiling improvements in JDK 25.

### Source excerpt

As the year comes to a close, turn your focus to boosting your Java application performance by applying Ahead-of-Time (AOT) cache features in recent JDK releases. This article guides you through using AOT cache optimizations in your application, thereby minimizing startup time and achieving faster peak performance. What is the Ahead-of-time cache in the jdk [...] The post Run Into the New Year with Java's Ahead-of-Time Cache Features appeared first on JVM Advent.

## A Glance at GPU Goodness in Java: LLM Inference with TornadoVM

DevFeed: [A Glance at GPU Goodness in Java: LLM Inference with TornadoVM](<https://devfeed.tech/articles/a-glance-at-gpu-goodness-in-java-llm-inference-with-tornadovm-23010.md>)

Original publisher: [Read original article](<https://www.javaadvent.com/2025/12/a-glance-at-gpu-goodness-in-java-llm-inference-with-tornadovm.html>)

Author: Edoardo Vacchi

Published: 2025-12-11T03:03:21Z

Content type: tutorial

Language: en

Sources: [Java Advent Calendar](<https://devfeed.tech/sources/java-advent-calendar.md>)

Topics: [TornadoVM](<https://devfeed.tech/topics/tornadovm.md>), [Large Language Model](<https://devfeed.tech/topics/llm.md>), [GPU](<https://devfeed.tech/topics/gpu.md>), [Inference](<https://devfeed.tech/topics/inference.md>), [Java](<https://devfeed.tech/topics/java.md>), [openjdk](<https://devfeed.tech/topics/openjdk.md>), [Programming](<https://devfeed.tech/topics/programming.md>)

Tags: [2025](<https://devfeed.tech/tags/2025.md>), [c-c-plus-plus](<https://devfeed.tech/tags/c-c-plus-plus.md>), [c-plus-plus](<https://devfeed.tech/tags/c-plus-plus.md>), [gpu](<https://devfeed.tech/tags/gpu.md>), [inference](<https://devfeed.tech/tags/inference.md>), [java](<https://devfeed.tech/tags/java.md>), [jdk](<https://devfeed.tech/tags/jdk.md>), [linux](<https://devfeed.tech/tags/linux.md>), [llama3](<https://devfeed.tech/tags/llama3.md>), [llm](<https://devfeed.tech/tags/llm.md>), [openjdk](<https://devfeed.tech/tags/openjdk.md>), [tornadovm](<https://devfeed.tech/tags/tornadovm.md>)

### AI overview

This tutorial introduces TornadoVM, an OpenJDK plugin that compiles annotated Java code for heterogeneous hardware, and explains how it can run LLM inference on GPUs. It covers installation, a basic GPU kernel, and the GPULlama3 project, which demonstrates running a Llama 3 model in Java with GPU acceleration.

### Source excerpt

It seems like it's become a tradition that I announce I have joined a new company for the Java Advent of Code. At least this time it's actually an old friend: I am excited to be back at Red Hat, in the llm-d team! Does that mean I forgot about Java? Of course not. If [...] The post A Glance at GPU Goodness in Java: LLM Inference with TornadoVM appeared first on JVM Advent.

## Java Hello World, LLVM Edition

DevFeed: [Java Hello World, LLVM Edition](<https://devfeed.tech/articles/java-hello-world-llvm-edition-23022.md>)

Original publisher: [Read original article](<https://www.javaadvent.com/2025/12/java-hello-world-llvm-edition.html>)

Author: James Hamilton

Published: 2025-12-07T02:02:37Z

Content type: tutorial

Language: en

Sources: [Java Advent Calendar](<https://devfeed.tech/sources/java-advent-calendar.md>)

Topics: [Java](<https://devfeed.tech/topics/java.md>), [LLVM](<https://devfeed.tech/topics/llvm.md>), [API](<https://devfeed.tech/topics/api.md>), [JIT](<https://devfeed.tech/topics/jit.md>)

Tags: [2025](<https://devfeed.tech/tags/2025.md>), [api](<https://devfeed.tech/tags/api.md>), [assembly](<https://devfeed.tech/tags/assembly.md>), [bytecode](<https://devfeed.tech/tags/bytecode.md>), [compilers](<https://devfeed.tech/tags/compilers.md>), [java](<https://devfeed.tech/tags/java.md>), [java-advent](<https://devfeed.tech/tags/java-advent.md>), [jdk](<https://devfeed.tech/tags/jdk.md>), [jit](<https://devfeed.tech/tags/jit.md>), [jvm](<https://devfeed.tech/tags/jvm.md>), [llvm](<https://devfeed.tech/tags/llvm.md>)

### AI overview

This tutorial shows how to use Java's Foreign Function & Memory API to call the LLVM C API, generate LLVM IR for a Hello World program, and JIT-compile it to native code. It also introduces LLVM, its IR representations, and local installation on Ubuntu or Debian.

### Source excerpt

After exploring Java bytecode in previous years (2022, 2023, 2024), this year we'll take an unexpected detour for a Java advent: instead of generating Java bytecode, we'll use Java to build and execute LLVM IR, the intermediate language behind compilers like clang. Using Java's Foreign Function & Memory (FFM) API, we'll call the LLVM C [...] The post Java Hello World, LLVM Edition appeared first on JVM Advent.

## New Chainguard Images December 2024: Adoptium, AWX, CouchDB

DevFeed: [New Chainguard Images December 2024: Adoptium, AWX, CouchDB](<https://devfeed.tech/articles/new-chainguard-images-december-2024-adoptium-awx-couchdb-13175.md>)

Original publisher: [Read original article](<https://www.chainguard.dev/unchained/new-chainguard-images-december-2024-adoptium-awx-couchdb>)

Published: 2025-01-16T00:00:00Z

Content type: release

Language: en

Sources: [Chainguard: Unchained](<https://devfeed.tech/sources/chainguard-unchained.md>)

Topics: [Adoptium](<https://devfeed.tech/topics/adoptium.md>), [openjdk](<https://devfeed.tech/topics/openjdk.md>), [Ansible](<https://devfeed.tech/topics/ansible.md>), [Java](<https://devfeed.tech/topics/java.md>), [NoSQL](<https://devfeed.tech/topics/nosql.md>), [Open Source](<https://devfeed.tech/topics/open-source.md>), [Erlang](<https://devfeed.tech/topics/erlang.md>), [.NET MAUI](<https://devfeed.tech/topics/net-maui.md>), [Process](<https://devfeed.tech/topics/process.md>)

Tags: [adoptium](<https://devfeed.tech/tags/adoptium.md>), [ansible](<https://devfeed.tech/tags/ansible.md>), [apache](<https://devfeed.tech/tags/apache.md>), [awx](<https://devfeed.tech/tags/awx.md>), [chainguard](<https://devfeed.tech/tags/chainguard.md>), [chainguard-images](<https://devfeed.tech/tags/chainguard-images.md>), [container-images](<https://devfeed.tech/tags/container-images.md>), [couchdb](<https://devfeed.tech/tags/couchdb.md>), [erlang](<https://devfeed.tech/tags/erlang.md>), [helm](<https://devfeed.tech/tags/helm.md>), [java](<https://devfeed.tech/tags/java.md>), [jdk](<https://devfeed.tech/tags/jdk.md>), [linkerd](<https://devfeed.tech/tags/linkerd.md>), [net-11](<https://devfeed.tech/tags/net-11.md>), [nosql](<https://devfeed.tech/tags/nosql.md>), [open-source](<https://devfeed.tech/tags/open-source.md>), [opentofu](<https://devfeed.tech/tags/opentofu.md>)

### AI overview

Chainguard describes its December 2024 batch of 39 new Chainguard Images, highlighting images for Adoptium, AWX, and Apache CouchDB. The article notes FIPS-enabled variants and summarizes the intended uses and image characteristics.

### Source excerpt

Chainguard released several new images in December 2024, including images for Adoptium, AWX, CouchDB, and others. Check out the full list.

## Using Renovate to update build JDK

DevFeed: [Using Renovate to update build JDK](<https://devfeed.tech/articles/using-renovate-to-update-build-jdk-20982.md>)

Original publisher: [Read original article](<https://jakewharton.com/using-renovate-to-update-build-jdk/>)

Published: 2025-01-08T00:00:00Z

Content type: tutorial

Language: en

Sources: [Jake Wharton](<https://devfeed.tech/sources/jake-wharton.md>)

Topics: [Java](<https://devfeed.tech/topics/java.md>), [GitHub Actions](<https://devfeed.tech/topics/github-actions.md>), [ci](<https://devfeed.tech/topics/ci.md>), [Spring Boot](<https://devfeed.tech/topics/spring-boot.md>), [JSON](<https://devfeed.tech/topics/json.md>), [Development](<https://devfeed.tech/topics/development.md>), [Homebrew](<https://devfeed.tech/topics/homebrew.md>), [toolchains](<https://devfeed.tech/topics/toolchains.md>)

Tags: [build](<https://devfeed.tech/tags/build.md>), [ci](<https://devfeed.tech/tags/ci.md>), [dependencies](<https://devfeed.tech/tags/dependencies.md>), [github-actions](<https://devfeed.tech/tags/github-actions.md>), [gradle](<https://devfeed.tech/tags/gradle.md>), [java](<https://devfeed.tech/tags/java.md>), [jdk](<https://devfeed.tech/tags/jdk.md>), [json](<https://devfeed.tech/tags/json.md>), [jvm](<https://devfeed.tech/tags/jvm.md>), [renovate](<https://devfeed.tech/tags/renovate.md>), [toolchains](<https://devfeed.tech/tags/toolchains.md>), [update](<https://devfeed.tech/tags/update.md>)

### AI overview

This article explains how to use Renovate to keep the JDK used by a GitHub Actions CI build updated automatically. It moves the Java version into a .github/.java-version file, configures setup-java to read that file, and adds a custom regex manager in renovate.json to update the file. The approach allows local development with the latest JDK while preserving compatibility with older Java versions for targeting and testing.

### Source excerpt

You want to be using the latest JDK for development. Don't use Gradle toolchains, they'll needlessly force you to use old JDKs. You can still target and test on old JVM versions but develop with the latest and greatest. Java and the JDK are literally built for this. Locally this hasn't been a problem. Homebrew (or your favorite equivalent) will keep your default JDK at the latest. Keeping my GitHub actions up-to-date, however, frequently slips my mind. I find projects using 19 or 20 simply because I haven't touched the CI build in the two years since 19 or 20 was the latest. We're already using Renovate to keep dependencies up to date. With a little extra programming in JSON (wince) we can have the JDK version updated to latest as well. First, migrate the existing build JDK version in your GitHub Action to a .github/.java-version file1. 21 Next, change the setup-java action to use this file rather than a hard-coded version. - uses: actions/setup-java@v4 with: distribution: 'zulu' - java-version: 21 + java-version-file: .github/.java-version Finally, in your renovate.json52, add a custom manager to update this file3. ignorePresets: [ // Ensure we get the latest version and are not pinned to old versions. 'workarounds:javaLTSVersions', ], customManagers: [ // Update .java-version file with the latest JDK version. { customType: 'regex', fileMatch: [ '\\.java-version$', ], matchStrings: [ '(?<currentValue>.*)\\n', ], datasourceTemplate: 'java-version', depNameTemplate: 'java', // Only write the major version. extractVersionTemplate: '^(?<version>\\d+)', }, ], Commit, push, and wait for Renovate to send you a PR4. Now your CI build automatically tracks the latest JDK. I'm putting the .java-version file into the .github/ folder because I don't want to force this version on people using jenv or the like. The whole point of this setup is you can build with any version of Java newer than our very, very old baseline of Java 8 (although things like Gradle have a higher minimum

## Building OpenJDK From Source On macOS

DevFeed: [Building OpenJDK From Source On macOS](<https://devfeed.tech/articles/building-openjdk-from-source-on-macos-18803.md>)

Original publisher: [Read original article](<https://www.morling.dev/blog/building-openjdk-from-source-on-macos/>)

Published: 2024-11-16T14:25:00Z

Content type: tutorial

Language: en

Sources: [Gunnar Morling](<https://devfeed.tech/sources/gunnar-morling.md>)

Topics: [openjdk](<https://devfeed.tech/topics/openjdk.md>), [macOS](<https://devfeed.tech/topics/macos.md>), [Xcode](<https://devfeed.tech/topics/xcode.md>), [Compiler](<https://devfeed.tech/topics/compiler.md>)

Tags: [compiler](<https://devfeed.tech/tags/compiler.md>), [installation](<https://devfeed.tech/tags/installation.md>), [jdk](<https://devfeed.tech/tags/jdk.md>), [macos](<https://devfeed.tech/tags/macos.md>), [openjdk](<https://devfeed.tech/tags/openjdk.md>), [release](<https://devfeed.tech/tags/release.md>), [xcode](<https://devfeed.tech/tags/xcode.md>)

### AI overview

A practical guide to building JDK 24 from OpenJDK source on macOS 14.7.1. It covers the required boot JDK, Xcode, Autoconf, source checkout, configuration, and build steps, and notes a clang issue in Xcode 16.1 with alternatives.

### Source excerpt

Every now and then, it can come in very handy to build OpenJDK from source yourself, for instance if you want to explore a feature which is under development on a branch for which no builds are published. For some reason I always thought that building OpenJDK is a very complex processing, requiring the installation of arcane tool chains etc. But as it turns out, this actually not true: the project does a great job of documenting what's needed and only a few steps are necessary to build your very own JDK.

## Kotlin's JDK release compatibility flag

DevFeed: [Kotlin's JDK release compatibility flag](<https://devfeed.tech/articles/kotlin-s-jdk-release-compatibility-flag-20945.md>)

Original publisher: [Read original article](<https://jakewharton.com/kotlins-jdk-release-compatibility-flag/>)

Published: 2024-03-13T00:00:00Z

Content type: tutorial

Language: en

Sources: [Jake Wharton](<https://devfeed.tech/sources/jake-wharton.md>)

Topics: [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Java](<https://devfeed.tech/topics/java.md>), [Android](<https://devfeed.tech/topics/android.md>), [Compiler](<https://devfeed.tech/topics/compiler.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [app](<https://devfeed.tech/tags/app.md>), [code](<https://devfeed.tech/tags/code.md>), [compatibility](<https://devfeed.tech/tags/compatibility.md>), [compiler](<https://devfeed.tech/tags/compiler.md>), [exception](<https://devfeed.tech/tags/exception.md>), [ide](<https://devfeed.tech/tags/ide.md>), [java](<https://devfeed.tech/tags/java.md>), [jdk](<https://devfeed.tech/tags/jdk.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>)

### AI overview

This article explains how compiling Kotlin code with JDK 21 can expose newer JDK APIs even when the Kotlin JVM bytecode target is set to Java 8. That caused a Kotlin extension call to resolve to the newer List member method, producing NoSuchMethodError on Android. It presents Kotlin's jvm-target validation flag, which restricts compilation against APIs unavailable in the intended target JDK.

### Source excerpt

Yesterday, our Android app crashed with a weird NoSuchMethodError. java.lang.NoSuchMethodError: No interface method removeFirst()Ljava/lang/Object; in class Ljava/util/List; or its super classes (declaration of 'java.util.List' appears in /apex/com.android.art/javalib/core-oj.jar) at app.cash.redwood.lazylayout.widget.LazyListUpdateProcessor.onEndChanges(SourceFile:165) at app.cash.redwood.lazylayout.view.ViewLazyList.onEndChanges(SourceFile:210) at app.cash.redwood.protocol.widget.ProtocolBridge.sendChanges(SourceFile:125) at app.cash.redwood.treehouse.ViewContentCodeBinding.receiveChangesOnUiDispatcher(SourceFile:419) at app.cash.redwood.treehouse.ViewContentCodeBinding$sendChanges$1.invokeSuspend(SourceFile:383) at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(SourceFile:33) at kotlinx.coroutines.DispatchedTask.run(SourceFile:104) at android.os.Handler.handleCallback(Handler.java:938) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:250) at android.app.ActivityThread.main(ActivityThread.java:7868) The offending code is written in Kotlin, and looks like this: The IDE showing an italicized blue style for removeFirst means it's a Kotlin extension function which compiles down to a static helper in the bytecode. However, the exception clearly indicates we are calling a member function on List directly. What gives? In JDK 21, as part of the sequenced collection effort, the List interface added removeFirst() and removeLast() methods. According to the Kotlin docs on extension functions: If a class has a member function, and an extension function is defined which has the same receiver type, the same name, and is applicable to given arguments, the member always wins. When we bumped our build JDK to 21, the new member became available and accidentally took precedence. Oops! But wait, we set our Kotlin jvmTarget to 1.8 in order to be backwards compatible. Is that not enough? val javaVersion = JavaVersion.VERSION_1_

## Pick the right JDK for Android Studio

DevFeed: [Pick the right JDK for Android Studio](<https://devfeed.tech/articles/pick-the-right-jdk-for-android-studio-25339.md>)

Original publisher: [Read original article](<https://kau.sh/blog/studio-jdk/>)

Author: Kaushik Gopal

Published: 2024-03-06T08:00:00Z

Content type: tutorial

Language: en

Sources: [Kaushik Gopal's Site](<https://devfeed.tech/sources/kaushik-gopal-s-site.md>)

Topics: [Android Studio](<https://devfeed.tech/topics/android-studio.md>), [Android](<https://devfeed.tech/topics/android.md>), [Gradle](<https://devfeed.tech/topics/gradle.md>), [ide](<https://devfeed.tech/topics/ide.md>), [Java](<https://devfeed.tech/topics/java.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-studio](<https://devfeed.tech/tags/android-studio.md>), [command-line](<https://devfeed.tech/tags/command-line.md>), [gradle](<https://devfeed.tech/tags/gradle.md>), [ide](<https://devfeed.tech/tags/ide.md>), [java](<https://devfeed.tech/tags/java.md>), [jdk](<https://devfeed.tech/tags/jdk.md>), [sdk](<https://devfeed.tech/tags/sdk.md>)

### AI overview

A guide for Android developers on configuring the JDK for Android Studio. It recommends using the JDK bundled with Android Studio, selecting it as the Gradle JDK, and keeping it aligned with JAVA_HOME to avoid conflicting Gradle daemons and IDE or build errors.

### Source excerpt

If Android developers don't setup the JDK correctly, you'll be greeted with nasty errors like this: Check your module classpath error Cannot access 'java.lang.constant.Constable' which is a supertype of 'java.lang.Class'. Check your module classpath for missing or conflicting dependencies Your app might compile fine but the IDE will keep surfacing pesky errors. This is because Android developers have a variety of ways to setup the JDK for your development environment. Too many. On episode #249 of Fragmented we discussed the numerous JDK options and what they're used for. Google now has an excellent developer doc for this.1 Courtesy: Android Developer docs If you don't have time to catch up on all the valuable content above, here's the takeaways: 1. Use the JDK that comes with Android Studio # JBR2 is battle tested with Android Studio and includes enhancements for running Android Studio well. To use it as your SDK, switch your Gradle JDK to JBR: how to set jbr as your gradle jdk Do a File > Invalidate Caches after this... mother of all fixes 2. Match yourJAVA_HOME with the Gradle JDK # The Gradle JDK from Step 1 is used to compile your app from Android Studio. If you use the command line to build your app on the other hand, the JDK from your $JAVA_HOME3 is used. If both of these don't match, you can have multiple gradle daemons running around. Make sure to match the two. # ~/.zshenv export JAVA_HOME=$HOME/Applications/Android\ Studio.app/Contents/jbr/Contents/Home If you're not sure where the jbr-jdk is located: This is the way. no seriously, it's really good. ↩︎ JetBrains Runtime ↩︎ ...if you haven't customized your environment too much. It's a little more involved. ↩︎

## Tracking Java Native Memory With JDK Flight Recorder

DevFeed: [Tracking Java Native Memory With JDK Flight Recorder](<https://devfeed.tech/articles/tracking-java-native-memory-with-jdk-flight-recorder-18885.md>)

Original publisher: [Read original article](<https://www.morling.dev/blog/tracking-java-native-memory-with-jdk-flight-recorder/>)

Published: 2023-12-17T18:29:00Z

Content type: tutorial

Language: en

Sources: [Gunnar Morling](<https://devfeed.tech/sources/gunnar-morling.md>)

Topics: [JDK Flight Recorder](<https://devfeed.tech/topics/jdk-flight-recorder.md>), [Java](<https://devfeed.tech/topics/java.md>), [Monitoring](<https://devfeed.tech/topics/monitoring.md>), [Streaming](<https://devfeed.tech/topics/streaming.md>)

Tags: [java](<https://devfeed.tech/tags/java.md>), [jdk](<https://devfeed.tech/tags/jdk.md>), [jdk-flight-recorder](<https://devfeed.tech/tags/jdk-flight-recorder.md>), [jvm](<https://devfeed.tech/tags/jvm.md>), [memory](<https://devfeed.tech/tags/memory.md>), [monitoring](<https://devfeed.tech/tags/monitoring.md>), [performance](<https://devfeed.tech/tags/performance.md>), [streaming](<https://devfeed.tech/tags/streaming.md>)

### AI overview

This article explains how JDK Flight Recorder can continuously track Java native memory usage through Native Memory Tracking data. It covers the relevant JFR event types introduced in Java 20, example off-heap allocations, and streaming the data to monitoring dashboards.

### Source excerpt

Table of Contents An Example Tracking RSS As regular readers of this blog will now, JDK Flight Recorder (JFR) is one of my favorite tools of the Java platform. This low-overhead event recording engine built into the JVM is invaluable for observing the runtime characteristics of Java applications and identifying any potential performance issues. JFR continues to become better and better with every new release, with one recent addition being support for native memory tracking (NMT).

## Setting JDK level in Android Gradle builds

DevFeed: [Setting JDK level in Android Gradle builds](<https://devfeed.tech/articles/setting-jdk-level-in-android-gradle-builds-24917.md>)

Original publisher: [Read original article](<https://blog.blundellapps.co.uk/setting-jdk-level-in-android-gradle-builds/>)

Author: blundell

Published: 2023-11-18T09:51:40Z

Content type: tutorial

Language: en

Sources: [Blundell](<https://devfeed.tech/sources/blundell.md>)

Topics: [Gradle](<https://devfeed.tech/topics/gradle.md>), [Java](<https://devfeed.tech/topics/java.md>), [Android](<https://devfeed.tech/topics/android.md>), [toolchain](<https://devfeed.tech/topics/toolchain.md>), [modules](<https://devfeed.tech/topics/modules.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [androiddev](<https://devfeed.tech/tags/androiddev.md>), [gradle](<https://devfeed.tech/tags/gradle.md>), [intermediate](<https://devfeed.tech/tags/intermediate.md>), [intermediate-reference-androiddev-gradle-java-jdk](<https://devfeed.tech/tags/intermediate-reference-androiddev-gradle-java-jdk.md>), [java](<https://devfeed.tech/tags/java.md>), [jdk](<https://devfeed.tech/tags/jdk.md>), [module](<https://devfeed.tech/tags/module.md>), [reference](<https://devfeed.tech/tags/reference.md>), [toolchain](<https://devfeed.tech/tags/toolchain.md>)

### AI overview

A practical guide to configuring Java and JVM versions in Android Gradle projects. It recommends Java 17 when possible, Java 11 for compatibility issues, and explicit version settings for every module.

### Source excerpt

The correct, complete, 2024, settings to configure the Java version in Gradle for Android. The post Setting JDK level in Android Gradle builds first appeared on Blundell.

## Installing and managing Java on macOS

DevFeed: [Installing and managing Java on macOS](<https://devfeed.tech/articles/installing-and-managing-java-on-macos-7978.md>)

Original publisher: [Read original article](<https://snyk.io/blog/installing-and-managing-java-on-macos/>)

Author: Keshav Malik

Published: 2023-10-12T05:00:00Z

Content type: article

Language: en

Sources: [Blog RSS Feed | Snyk](<https://devfeed.tech/sources/blog-rss-feed-snyk.md>)

Topics: [macOS](<https://devfeed.tech/topics/macos.md>)

Tags: [article](<https://devfeed.tech/tags/article.md>), [awareness](<https://devfeed.tech/tags/awareness.md>), [blog](<https://devfeed.tech/tags/blog.md>), [contentlab](<https://devfeed.tech/tags/contentlab.md>), [developer](<https://devfeed.tech/tags/developer.md>), [engineering](<https://devfeed.tech/tags/engineering.md>), [guide](<https://devfeed.tech/tags/guide.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [installation](<https://devfeed.tech/tags/installation.md>), [java](<https://devfeed.tech/tags/java.md>), [jdk](<https://devfeed.tech/tags/jdk.md>), [macos](<https://devfeed.tech/tags/macos.md>), [reviews](<https://devfeed.tech/tags/reviews.md>)

### AI overview

A guide to installing and managing multiple Java versions on macOS, including manual installation, distribution choices, compatibility testing, and configuring environment variables such as JAVA_HOME.

### Source excerpt

This article reviews how to install and manage different versions of Java on your macOS system to help you simplify this process.

## Using JLink to create smaller Docker images for your Spring Boot Java application

DevFeed: [Using JLink to create smaller Docker images for your Spring Boot Java application](<https://devfeed.tech/articles/using-jlink-to-create-smaller-docker-images-for-your-spring-boot-java-application-7993.md>)

Original publisher: [Read original article](<https://snyk.io/blog/jlink-create-docker-images-spring-boot-java/>)

Author: Brian Vermeer

Published: 2023-08-24T05:00:00Z

Content type: article

Language: en

Sources: [Blog RSS Feed | Snyk](<https://devfeed.tech/sources/blog-rss-feed-snyk.md>)

Topics: [Docker](<https://devfeed.tech/topics/docker.md>), [Spring Boot](<https://devfeed.tech/topics/spring-boot.md>), [Java](<https://devfeed.tech/topics/java.md>), [Docker Image](<https://devfeed.tech/topics/docker-image.md>), [Application Security](<https://devfeed.tech/topics/application-security.md>), [Application Development](<https://devfeed.tech/topics/application-development.md>), [Deployment](<https://devfeed.tech/topics/deployment.md>)

Tags: [acquisition](<https://devfeed.tech/tags/acquisition.md>), [application-security](<https://devfeed.tech/tags/application-security.md>), [awareness](<https://devfeed.tech/tags/awareness.md>), [blog](<https://devfeed.tech/tags/blog.md>), [blog-post](<https://devfeed.tech/tags/blog-post.md>), [command-line](<https://devfeed.tech/tags/command-line.md>), [container-security](<https://devfeed.tech/tags/container-security.md>), [containers](<https://devfeed.tech/tags/containers.md>), [deployment](<https://devfeed.tech/tags/deployment.md>), [developer](<https://devfeed.tech/tags/developer.md>), [devrel](<https://devfeed.tech/tags/devrel.md>), [docker](<https://devfeed.tech/tags/docker.md>), [docker-images](<https://devfeed.tech/tags/docker-images.md>), [java](<https://devfeed.tech/tags/java.md>), [jdk](<https://devfeed.tech/tags/jdk.md>), [modules](<https://devfeed.tech/tags/modules.md>), [performance](<https://devfeed.tech/tags/performance.md>), [snyk-container](<https://devfeed.tech/tags/snyk-container.md>), [spring-boot](<https://devfeed.tech/tags/spring-boot.md>)

### AI overview

This article explains how to use JLink with Docker to create smaller custom Java runtime images for Spring Boot and other Java applications. It describes how reducing the runtime to the modules and dependencies required by the application can lower image size, improve deployment performance, reduce storage costs, and limit container attack surface.

### Source excerpt

In this blog post, we'll present an in-depth exploration of utilizing JLink to optimize Docker image sizes, enhancing application security and performance.

[Next page](<https://devfeed.tech/tags/jdk.md?cursor=WyIyMDIzLTA4LTI0VDA1OjAwOjAwKzAwOjAwIiwgImNlOGQ1N2I0LTllZmItNGIzNC1iMTE4LTU1ZjBlYTY2ODc0ZSJd>)