<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"><channel><title>The Safepoint</title><link>https://hellojava.info/</link><description>Field guides to diagnosing and tuning JVM applications in production</description><item><title>Keeping AI products affordable: batching, quantisation, caching and the JVM services around the model</title><link>https://hellojava.info/ai-services-memory-costs/</link><guid>https://hellojava.info/ai-services-memory-costs/</guid><pubDate>2026-10-24</pubDate><description>How AI products control memory and compute costs with batching, quantisation, KV-cache management, prompt and result caching and smaller models, how to size the Java gateways, retrieval and processing services around a model, and what consumer AI looks like in real estate, fashion, music and travel.</description></item><item><title>Java Flight Recorder and JDK Mission Control: recording production safely</title><link>https://hellojava.info/java-flight-recorder/</link><guid>https://hellojava.info/java-flight-recorder/</guid><pubDate>2026-10-24</pubDate><description>How to start, dump and stop JFR recordings with command-line options and jcmd, how the default and profile settings differ, which events answer common questions, and how to read recordings with the jfr tool and JDK Mission Control.</description></item><item><title>The JVM in containers: UseContainerSupport, MaxRAMPercentage and a real memory budget</title><link>https://hellojava.info/jvm-in-containers/</link><guid>https://hellojava.info/jvm-in-containers/</guid><pubDate>2026-10-24</pubDate><description>How the JVM detects container memory and CPU limits, what MaxRAMPercentage and its siblings actually do, why a 25% default heap is common, and how to size the heap so the container is not OOM-killed.</description></item><item><title>The AI memory squeeze: DRAM prices, cloud costs and what it changes for JVM teams</title><link>https://hellojava.info/memory-prices-ai-era/</link><guid>https://hellojava.info/memory-prices-ai-era/</guid><pubDate>2026-10-24</pubDate><description>How AI datacentre demand for HBM and server DRAM drove memory contract and spot prices up in 2025 and 2026, what memory costs on AWS, Google Cloud and Azure instances, and how JVM teams can need fewer gigabytes: heap sizing, container limits, off-heap caps, compact object headers, CDS, GC choice and NMT.</description></item><item><title>Virtual threads in production: JEP 444, pinning and what to monitor</title><link>https://hellojava.info/virtual-threads/</link><guid>https://hellojava.info/virtual-threads/</guid><pubDate>2026-10-24</pubDate><description>How virtual threads work on top of carrier threads, when they help and when they do not, pinning before and after JDK 24, why they should not be pooled, limiting concurrency with semaphores, and how to observe them with thread dumps and JFR.</description></item><item><title>Metaspace explained: OutOfMemoryError: Metaspace, class loader leaks and sizing</title><link>https://hellojava.info/metaspace/</link><guid>https://hellojava.info/metaspace/</guid><pubDate>2026-10-23</pubDate><description>What Metaspace stores, how MaxMetaspaceSize, MetaspaceSize and the compressed class space work, how to monitor class metadata with jcmd VM.metaspace and jstat, and how to find the class loader that leaks.</description></item><item><title>Native Memory Tracking: why your JVM uses more memory than -Xmx</title><link>https://hellojava.info/native-memory-tracking/</link><guid>https://hellojava.info/native-memory-tracking/</guid><pubDate>2026-10-23</pubDate><description>How to enable HotSpot Native Memory Tracking, read jcmd VM.native_memory summaries, use baselines and diffs to find growth, and what NMT cannot see: native libraries, malloc arenas and the gap between committed memory and RSS.</description></item><item><title>Reading GC logs with -Xlog:gc: unified logging from setup to diagnosis</title><link>https://hellojava.info/reading-gc-logs/</link><guid>https://hellojava.info/reading-gc-logs/</guid><pubDate>2026-10-23</pubDate><description>How to enable the JDK&#x27;s unified GC logging with rotation and useful decorators, how the old PrintGC flags map to -Xlog, how to read G1 pause lines, and which patterns point to an undersized heap, a leak or a pause problem.</description></item><item><title>Choosing a HotSpot garbage collector: Serial, Parallel, G1, ZGC or Shenandoah</title><link>https://hellojava.info/choosing-a-garbage-collector/</link><guid>https://hellojava.info/choosing-a-garbage-collector/</guid><pubDate>2026-10-22</pubDate><description>What each HotSpot collector optimises for, which one the JVM picks by default and why, the flags that select them, and a practical way to decide based on latency, throughput and footprint.</description></item><item><title>Tuning G1 in production: the few options that matter</title><link>https://hellojava.info/g1-tuning/</link><guid>https://hellojava.info/g1-tuning/</guid><pubDate>2026-10-22</pubDate><description>How G1 organises the heap into regions and meets a pause-time target, which flags are worth changing (heap size, MaxGCPauseMillis, IHOP, region size), which ones to leave alone, and how to recognise humongous allocations and evacuation failures.</description></item><item><title>High CPU in a Java process: finding the thread and the code responsible</title><link>https://hellojava.info/high-cpu-java-thread/</link><guid>https://hellojava.info/high-cpu-java-thread/</guid><pubDate>2026-10-22</pubDate><description>A step-by-step method to go from a busy Java process to the exact thread and stack frame burning CPU, using top -H, the nid in thread dumps, jcmd, Flight Recorder and the GC log.</description></item><item><title>GC roots and Java memory leaks: why unreachable is the only thing that gets freed</title><link>https://hellojava.info/gc-roots-memory-leaks/</link><guid>https://hellojava.info/gc-roots-memory-leaks/</guid><pubDate>2026-10-21</pubDate><description>How the garbage collector decides what is alive, the kinds of GC roots, the leak patterns that keep objects reachable by accident, and how to trace a leak back to its root.</description></item><item><title>Taking and reading a Java heap dump: jcmd, jmap, HeapDumpOnOutOfMemoryError and Eclipse MAT</title><link>https://hellojava.info/heap-dump-analysis/</link><guid>https://hellojava.info/heap-dump-analysis/</guid><pubDate>2026-10-21</pubDate><description>How to capture a heap dump safely in production, what it costs, how to get one automatically on OutOfMemoryError, and how to read it with Eclipse Memory Analyzer: histogram, dominator tree, retained size and paths to GC roots.</description></item><item><title>Reading Java thread dumps: jstack, jcmd Thread.print and what each line means</title><link>https://hellojava.info/thread-dumps/</link><guid>https://hellojava.info/thread-dumps/</guid><pubDate>2026-10-21</pubDate><description>How to take thread dumps with jcmd, jstack or SIGQUIT, how to read thread states, lock lines and deadlock reports, and how to use a series of dumps to diagnose hangs and slow requests.</description></item><item><title>The JIT code cache: ReservedCodeCacheSize and &#x27;CodeCache is full&#x27;</title><link>https://hellojava.info/code-cache/</link><guid>https://hellojava.info/code-cache/</guid><pubDate>2026-10-20</pubDate><description>What the HotSpot code cache stores, its default size with and without tiered compilation, the segmented code cache, how to monitor it and when raising ReservedCodeCacheSize is the right fix.</description></item><item><title>OutOfMemoryError: Direct buffer memory and MaxDirectMemorySize</title><link>https://hellojava.info/direct-buffer-memory/</link><guid>https://hellojava.info/direct-buffer-memory/</guid><pubDate>2026-10-20</pubDate><description>What the JVM&#x27;s direct buffer limit is, how the default is chosen, why the error appears while the heap looks healthy, and how to measure, size and fix direct memory use.</description></item></channel></rss>
