# GC

Published articles for GC.

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

## JDK 27 Runtime Updates Release Notes

DevFeed: [JDK 27 Runtime Updates Release Notes](<https://devfeed.tech/articles/jdk-27-runtime-updates-release-notes-15132.md>)

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

Author: Billy Korando

Published: 2026-09-12T00: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>), [Release notes](<https://devfeed.tech/topics/release-notes.md>), [releases](<https://devfeed.tech/topics/releases.md>), [Java](<https://devfeed.tech/topics/java.md>)

Tags: [env-file-security](<https://devfeed.tech/tags/env-file-security.md>), [gc](<https://devfeed.tech/tags/gc.md>), [jdk-27](<https://devfeed.tech/tags/jdk-27.md>), [memory](<https://devfeed.tech/tags/memory.md>), [net-conf](<https://devfeed.tech/tags/net-conf.md>), [passwords](<https://devfeed.tech/tags/passwords.md>), [performance](<https://devfeed.tech/tags/performance.md>), [release](<https://devfeed.tech/tags/release.md>), [release-notes](<https://devfeed.tech/tags/release-notes.md>)

### AI overview

This article reviews runtime updates in JDK 27, including G1GC becoming the default garbage collector in all cases, Compact Object Headers being enabled by default, and improved JFR redaction and filtering for sensitive information such as passwords and API keys.

### Source excerpt

Let's review the performance updates, new runtime features, and other changes to existing features that are in the JDK 27 release!

## Using OxCaml to implement type-safe reference counting between OCaml and Python

DevFeed: [Using OxCaml to implement type-safe reference counting between OCaml and Python](<https://devfeed.tech/articles/using-oxcaml-to-implement-type-safe-reference-counting-between-ocaml-and-python-20199.md>)

Original publisher: [Read original article](<https://blog.janestreet.com/oxcaml-typesafe-reference-counting-python/>)

Author: Nicolas Trangez

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

Content type: tutorial

Language: en

Sources: [Jane Street](<https://devfeed.tech/sources/jane-street.md>)

Topics: [OCaml](<https://devfeed.tech/topics/ocaml.md>), [Python](<https://devfeed.tech/topics/python.md>), [Programming language](<https://devfeed.tech/topics/programming-language.md>), [Programming](<https://devfeed.tech/topics/programming.md>), [Data analysis](<https://devfeed.tech/topics/data-analysis.md>), [Machine learning](<https://devfeed.tech/topics/machine-learning.md>)

Tags: [compiler](<https://devfeed.tech/tags/compiler.md>), [gc](<https://devfeed.tech/tags/gc.md>), [memory](<https://devfeed.tech/tags/memory.md>), [memory-management](<https://devfeed.tech/tags/memory-management.md>), [ocaml](<https://devfeed.tech/tags/ocaml.md>), [parallelism](<https://devfeed.tech/tags/parallelism.md>), [programming-language](<https://devfeed.tech/tags/programming-language.md>), [python](<https://devfeed.tech/tags/python.md>)

### AI overview

Jane Street describes using OxCaml extensions to implement type-safe reference counting between OCaml and Python. The approach addresses delayed deallocation when objects cross the language boundary, including for large data frames and scarce resources such as GPU memory.

### Source excerpt

Jane Street is known for being an OCaml shop, but for years now Python has been our second major programming language, acting as the primary tool for data analysis and (especially importantly these days) machine learning. Most of our traders and researchers think and write in Python, even as the majority of our infrastructure is written in OCaml.

## Testing Java Memory Management with Chronicle-FIX using AI

DevFeed: [Testing Java Memory Management with Chronicle-FIX using AI](<https://devfeed.tech/articles/testing-java-memory-management-with-chronicle-fix-using-ai-30760.md>)

Original publisher: [Read original article](<http://blog.vanillajava.blog/2026/06/testing-java-memory-management-with.html>)

Author: Peter Lawrey (noreply@blogger.com)

Published: 2026-06-05T09:03:26Z

Content type: article

Language: en

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

Topics: [Java](<https://devfeed.tech/topics/java.md>), [Testing](<https://devfeed.tech/topics/testing.md>), [Benchmark](<https://devfeed.tech/topics/benchmark.md>), [Artificial Intelligence](<https://devfeed.tech/topics/ai.md>)

Tags: [ai](<https://devfeed.tech/tags/ai.md>), [benchmark](<https://devfeed.tech/tags/benchmark.md>), [benchmarks](<https://devfeed.tech/tags/benchmarks.md>), [claude](<https://devfeed.tech/tags/claude.md>), [code](<https://devfeed.tech/tags/code.md>), [codex](<https://devfeed.tech/tags/codex.md>), [gc](<https://devfeed.tech/tags/gc.md>), [java](<https://devfeed.tech/tags/java.md>), [low-latency](<https://devfeed.tech/tags/low-latency.md>), [opinion](<https://devfeed.tech/tags/opinion.md>), [testing](<https://devfeed.tech/tags/testing.md>), [ubuntu](<https://devfeed.tech/tags/ubuntu.md>), [ubuntu-24-04](<https://devfeed.tech/tags/ubuntu-24-04.md>)

### AI overview

This article reports on using Codex to create and test a JLBH benchmark for Chronicle-FIX from documentation and sample code. On a Java 25.0.2 system running Ubuntu, the benchmark measured half-round-trip latency of 2.4 to 3.7 microseconds, with about 11 microseconds at the 99.999th percentile under Parallel GC. The author presents AI as useful for benchmark code and experimentation, while cautioning that business logic generally requires substantial human authorship or rewriting.

### Source excerpt

While I am sceptical of using AI for release code, it has plenty of uses that previously weren't practical, such as determining how easy your software is to use. If an AI can "figure it out" with a few hints, then you are on the right track. For me, the value of AI is what you learn using it. For more Techincal Information on Chronicle-FIX What AI Does Well and What It Doesn't Claude and Codex are effective for producing idiomatic code; for low-latency code, it needs a significant body of example code. In this case, it was able to utilise sample code for benchmarks. If it was being used to write business logic, it would need the code to be mostly complete examples, and then it could write variations on that. If you were starting, it would be better to either; a) get it to write something functionally correct with the expectation you would rewrite it again manually, or b) write the code yourself and use AI to assist you in improving it. The AI Benchmark Trial I gave Codex (GPT-5.5) the task of writing a JLBH benchmark for Chronicle-FIX from documentation and sample code, testing the round-trip latency of W -> D and D -> 8 messages. The throughput is 50K/s each way. The W market data message is ~512 bytes, and the D new order signal and '8' execution reports are a small ~160 bytes. The test is run for 15 minutes each. I verified the benchmark was written but avoided hand-tuning it; then I asked it to trial different GC options, expecting they wouldn't make much difference, since the application is low GC; however, there might still be some difference. The system is using Java 25.0.2 on a Ryzen 9 9955HX3D with 64 GiB of RAM in a laptop running Ubuntu 24.04.04 LTS. A significant difference between JMH and JLBH benchmark harness is that JLBH supports many concurrent asyncrhonous inflight actions whereas JMH tests one action at a time. The Results The half-round-trip time (RTT/2) was between 2.4 and 3.7 microseconds (< 0.004 milliseconds). For the recommended Parallel GC, t

## Recent lld/ELF performance improvements

DevFeed: [Recent lld/ELF performance improvements](<https://devfeed.tech/articles/recent-lld-elf-performance-improvements-31121.md>)

Original publisher: [Read original article](<https://maskray.me/blog/2026-04-12-recent-lld-elf-performance-improvements>)

Published: 2026-04-12T07:00:00Z

Content type: article

Language: en

Sources: [MaskRay](<https://devfeed.tech/sources/maskray.md>)

Topics: [LLVM](<https://devfeed.tech/topics/llvm.md>), [Benchmark](<https://devfeed.tech/topics/benchmark.md>), [benchmarking](<https://devfeed.tech/topics/benchmarking.md>), [clang](<https://devfeed.tech/topics/clang.md>), [Chromium](<https://devfeed.tech/topics/chromium.md>)

Tags: [2026](<https://devfeed.tech/tags/2026.md>), [benchmark](<https://devfeed.tech/tags/benchmark.md>), [chromium](<https://devfeed.tech/tags/chromium.md>), [clang](<https://devfeed.tech/tags/clang.md>), [gc](<https://devfeed.tech/tags/gc.md>), [gdb](<https://devfeed.tech/tags/gdb.md>), [improvements](<https://devfeed.tech/tags/improvements.md>), [linker](<https://devfeed.tech/tags/linker.md>), [lld](<https://devfeed.tech/tags/lld.md>), [llvm](<https://devfeed.tech/tags/llvm.md>), [macos](<https://devfeed.tech/tags/macos.md>), [overhead](<https://devfeed.tech/tags/overhead.md>), [patches](<https://devfeed.tech/tags/patches.md>), [performance](<https://devfeed.tech/tags/performance.md>)

### AI overview

This article reports LLVM lld/ELF linker performance improvements from parallelizing link phases and reducing task-runtime overhead. Benchmarks show a 1.34x speedup over lld 22.1 for a Release+Asserts clang link and a 1.09x speedup for a Chromium debug link, while mold and wild remain faster in the comparisons described.

### Source excerpt

Updated in 2026-05. Since the LLVM 22 branch was cut, I've landed patches that parallelize more link phases and cut task-runtime overhead. This post compares current main against lld 22.1, mold, and wild. Headline: a Release+Asserts clang --gc-sections link is 1.34x as fast as lld 22.1; Chromium debug with --gdb-index is 1.09x as fast. mold and wild are still ahead -- the last section explains why.

## wastrel milestone: full hoot support, with generational gc as a treat

DevFeed: [wastrel milestone: full hoot support, with generational gc as a treat](<https://devfeed.tech/articles/wastrel-milestone-full-hoot-support-with-generational-gc-as-a-treat-35036.md>)

Original publisher: [Read original article](<https://wingolog.org/archives/2026/04/09/wastrel-milestone-full-hoot-support-with-generational-gc-as-a-treat>)

Author: Andy Wingo

Published: 2026-04-09T13:48:04Z

Content type: article

Language: en

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

Topics: [WebAssembly](<https://devfeed.tech/topics/web-assembly.md>), [scheme](<https://devfeed.tech/topics/scheme.md>), [toolchain](<https://devfeed.tech/topics/toolchain.md>), [gcc](<https://devfeed.tech/topics/gcc.md>)

Tags: [binaries](<https://devfeed.tech/tags/binaries.md>), [garbage-collection](<https://devfeed.tech/tags/garbage-collection.md>), [gc](<https://devfeed.tech/tags/gc.md>), [gcc](<https://devfeed.tech/tags/gcc.md>), [hoot](<https://devfeed.tech/tags/hoot.md>), [optimization](<https://devfeed.tech/tags/optimization.md>), [repl](<https://devfeed.tech/tags/repl.md>), [scheme](<https://devfeed.tech/tags/scheme.md>), [spidermonkey](<https://devfeed.tech/tags/spidermonkey.md>), [toolchain](<https://devfeed.tech/tags/toolchain.md>), [treats](<https://devfeed.tech/tags/treats.md>), [v8](<https://devfeed.tech/tags/v8.md>), [wasm](<https://devfeed.tech/tags/wasm.md>), [wastrel](<https://devfeed.tech/tags/wastrel.md>), [web](<https://devfeed.tech/tags/web.md>), [webassembly](<https://devfeed.tech/tags/webassembly.md>)

### AI overview

The article describes a Wastrel milestone: compiling WebAssembly files produced by the Hoot Scheme toolchain into native binaries, including a console-based read-eval-print loop. It covers the build process, runtime modules, binary size, dependencies, and initial performance observations.

### Source excerpt

Hear ye, hear ye: Wastrel and Hoot means REPL! Which is to say, Wastrel can now make native binaries out of WebAssembly files as produced by the Hoot Scheme toolchain, up to and including a full read-eval-print loop. Like the REPL on the Hoot web page, but instead of requiring a browser, you can just run it on your console. Amazing stuff! try it at home First, we need the latest Hoot. Build it from source, then compile a simple REPL: echo '(import (hoot repl)) (spawn-repl)' > repl.scm ./pre-inst-env hoot compile -fruntime-modules -o repl.wasm repl.scm This takes about a minute. The resulting wasm file has a pretty full standard library including a full macro expander and evaluator. Normally Hoot would do some aggressive tree-shaking to discard any definitions not used by the program, but with a REPL we don't know what we might need. So, we pass -fruntime-modules to instruct Hoot to record all modules and their bindings in a central registry, so they can be looked up at run-time. This results in a 6.6 MB Wasm file; with tree-shaking we would have been at 1.2 MB. Next, build Wastrel from source, and compile our new repl.wasm: wastrel compile -o repl repl.wasm This takes about 5 minutes on my machine: about 3 minutes to generate all the C, about 6.6MLOC all in all, split into a couple hundred files of about 30KLOC each, and then 2 minutes to compile with GCC and link-time optimization (parallelised over 32 cores in my case). I have some ideas to golf the first part down a bit, but the the GCC side will resist improvements. Finally, the moment of truth: $ ./repl Hoot 0.8.0 Enter `,help' for help. (hoot user)> "hello, world!" => "hello, world!" (hoot user)> statics When I first got the REPL working last week, I gasped out loud: it's alive, it's alive!!! Now that some days have passed, I am finally able to look a bit more dispassionately at where we're at. Firstly, let's look at the compiled binary itself. By default, Wastrel passes the -g flag to GCC, which results in bi

## Wastrel Compiles Hoot Scheme-to-WebAssembly Output

DevFeed: [Wastrel Compiles Hoot Scheme-to-WebAssembly Output](<https://devfeed.tech/articles/wastrelly-wabbits-35034.md>)

Original publisher: [Read original article](<https://wingolog.org/archives/2026/03/31/wastrelly-wabbits>)

Author: Andy Wingo

Published: 2026-03-31T20:34:23Z

Content type: article

Language: en

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

Topics: [WebAssembly](<https://devfeed.tech/topics/web-assembly.md>), [Compiler](<https://devfeed.tech/topics/compiler.md>), [scheme](<https://devfeed.tech/topics/scheme.md>)

Tags: [accidentally-quadratic](<https://devfeed.tech/tags/accidentally-quadratic.md>), [aot](<https://devfeed.tech/tags/aot.md>), [bigint](<https://devfeed.tech/tags/bigint.md>), [bignums](<https://devfeed.tech/tags/bignums.md>), [compiler](<https://devfeed.tech/tags/compiler.md>), [compilers](<https://devfeed.tech/tags/compilers.md>), [exception-handling](<https://devfeed.tech/tags/exception-handling.md>), [exceptions](<https://devfeed.tech/tags/exceptions.md>), [gc](<https://devfeed.tech/tags/gc.md>), [gcc](<https://devfeed.tech/tags/gcc.md>), [gmp](<https://devfeed.tech/tags/gmp.md>), [hoot](<https://devfeed.tech/tags/hoot.md>), [igalia](<https://devfeed.tech/tags/igalia.md>), [library](<https://devfeed.tech/tags/library.md>), [maps](<https://devfeed.tech/tags/maps.md>), [precision](<https://devfeed.tech/tags/precision.md>), [scheme](<https://devfeed.tech/tags/scheme.md>), [standard](<https://devfeed.tech/tags/standard.md>), [tail-calls](<https://devfeed.tech/tags/tail-calls.md>), [wasm](<https://devfeed.tech/tags/wasm.md>), [wastrel](<https://devfeed.tech/tags/wastrel.md>), [webassembly](<https://devfeed.tech/tags/webassembly.md>), [whippet](<https://devfeed.tech/tags/whippet.md>)

### AI overview

The article describes recent work on Wastrel, an ahead-of-time WebAssembly compiler, including compiling output from the Hoot Scheme-to-Wasm compiler. It covers implementing bignum operations with mini-gmp and updating Hoot to use standardized WebAssembly exception handling.

### Source excerpt

Good day! Today (tonight), some notes on the last couple months of Wastrel, my ahead-of-time WebAssembly compiler. Back in the beginning of February, I showed Wastrel running programs that use garbage collection, using an embedded copy of the Whippet collector, specialized to the types present in the Wasm program. But, the two synthetic GC-using programs I tested on were just ported microbenchmarks, and didn't reflect the output of any real toolchain. In this cycle I worked on compiling the output from the Hoot Scheme-to-Wasm compiler. There were some interesting challenges! bignums When I originally wrote the Hoot compiler, it targetted the browser, which already has a bignum implementation in the form of BigInt, which I worked on back in the day. Hoot-generated Wasm files use host bigints via externref (though wrapped in structs to allow for hashing and identity). In Wastrel, then, I implemented the imports that implement bignum operations: addition, multiplication, and so on. I did so using mini-gmp, a stripped-down implementation of the workhorse GNU multi-precision library. At some point if bignums become important, this gives me the option to link to the full GMP instead. Bignums were the first managed data type in Wastrel that wasn't defined as part of the Wasm module itself, instead hiding behind externref, so I had to add a facility to allocate type codes to these "host" data types. More types will come in time: weak maps, ephemerons, and so on. I think bignums would be a great proposal for the Wasm standard, similar to stringref ideally (sniff!), possibly in an attenuated form. exception handling Hoot used to emit a pre-standardization form of exception handling, and hadn't gotten around to updating to the newer version that was standardized last July. I updated Hoot to emit the newer kind of exceptions, as it was easier to implement them in Wastrel that way. Some of the problems Chris Fallin contended with in Wasmtime don't apply in the Wastrel case: sinc

## Kubo 0.40.0 adds reproducible CID Profiles, import cleanup, diagnostics, and gateway improvements

DevFeed: [Kubo 0.40.0 adds reproducible CID Profiles, import cleanup, diagnostics, and gateway improvements](<https://devfeed.tech/articles/just-released-kubo-0-40-0-35640.md>)

Original publisher: [Read original article](<https://github.com/ipfs/kubo/releases/tag/v0.40.0>)

Author: Ipfs

Published: 2026-02-25T00:00:00Z

Content type: release

Language: en

Sources: [IPFS](<https://devfeed.tech/sources/ipfs.md>)

Topics: [Software](<https://devfeed.tech/topics/software.md>), [sharding](<https://devfeed.tech/topics/sharding.md>), [Go Language](<https://devfeed.tech/topics/go-language.md>), [configuration](<https://devfeed.tech/topics/configuration.md>)

Tags: [gc](<https://devfeed.tech/tags/gc.md>), [go](<https://devfeed.tech/tags/go.md>), [memory](<https://devfeed.tech/tags/memory.md>), [release](<https://devfeed.tech/tags/release.md>), [release-notes](<https://devfeed.tech/tags/release-notes.md>), [sharding](<https://devfeed.tech/tags/sharding.md>)

### AI overview

Kubo 0.40.0 introduces reproducible file imports through CID Profiles, automatic cleanup of interrupted flatfs operations, improved connectivity diagnostics and gateway behavior, and reduced memory usage and garbage-collection overhead through its Go 1.26 toolchain.

### Source excerpt

Just released: Kubo 0.40.0!

## Comparing Java ZGC and G1 for Tail Latency in a Quarkus Microservice

DevFeed: [Comparing Java ZGC and G1 for Tail Latency in a Quarkus Microservice](<https://devfeed.tech/articles/let-s-take-a-look-at-lower-java-tail-latencies-with-zgc-18850.md>)

Original publisher: [Read original article](<https://www.morling.dev/blog/lower-java-tail-latencies-with-zgc/>)

Published: 2025-09-17T15:09:00Z

Content type: article

Language: en

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

Topics: [Java](<https://devfeed.tech/topics/java.md>), [benchmarking](<https://devfeed.tech/topics/benchmarking.md>), [Quarkus](<https://devfeed.tech/topics/quarkus.md>), [Databases](<https://devfeed.tech/topics/databases.md>)

Tags: [benchmarking](<https://devfeed.tech/tags/benchmarking.md>), [gc](<https://devfeed.tech/tags/gc.md>), [java](<https://devfeed.tech/tags/java.md>), [lts](<https://devfeed.tech/tags/lts.md>), [performance](<https://devfeed.tech/tags/performance.md>), [postgres](<https://devfeed.tech/tags/postgres.md>), [quarkus](<https://devfeed.tech/tags/quarkus.md>), [sample](<https://devfeed.tech/tags/sample.md>)

### AI overview

This article compares Java's ZGC and G1 garbage collectors using default settings in a sample Quarkus microservice that reads data from a Postgres database. The benchmark applies 1,000 requests per second and measures request latencies on a four-core, 4 GB RAM instance. The supplied excerpt does not include the comparison results.

### Source excerpt

Table of Contents ZGC Allocation Stalls Summary In the "Let's Take a Look at...!" blog series I am exploring interesting projects, developments and technologies in the data and streaming space. This can be KIPs and FLIPs, open-source projects, services, relevant improvements to Java and the JVM, and more. The idea is to get some hands-on experience, learn about potential use cases and applications, and understand the trade-offs involved. If you think there's a specific subject I should take a look at, let me know in the comments below. Java 25 was released earlier this week, and it is the first Java release with long-term support (LTS) which ships with Generational ZGC as the one (and only) flavor of the ZGC garbage collector. ZGC itself is a relatively new concurrent collector, originally added in Java 11.

## 0.6.6: Memory Management Improvements

DevFeed: [0.6.6: Memory Management Improvements](<https://devfeed.tech/articles/0-6-6-memory-management-improvements-22390.md>)

Original publisher: [Read original article](<https://www.red-lang.org/2025/03/066-memory-management-improvements.html>)

Author: Nenad Rakocevic (noreply@blogger.com)

Published: 2025-03-19T16:11:00Z

Content type: release

Language: en

Sources: [Red](<https://devfeed.tech/sources/red.md>)

Topics: [Red](<https://devfeed.tech/topics/red.md>), [Compiler](<https://devfeed.tech/topics/compiler.md>)

Tags: [gc](<https://devfeed.tech/tags/gc.md>), [improvements](<https://devfeed.tech/tags/improvements.md>), [memory](<https://devfeed.tech/tags/memory.md>), [memory-management](<https://devfeed.tech/tags/memory-management.md>), [release](<https://devfeed.tech/tags/release.md>)

### AI overview

Red 0.6.6 introduces low-level memory-management and garbage-collection improvements. The release adds management for unused external resources such as image buffers and font handles, and replaces conservative native-stack scanning with a more precise approach supported by compiler-generated frame hints.

### Source excerpt

This new milestone brings many low-level improvements to Red's memory management and garbage collecting. Most of those are long-planned additions needed to complete the internal memory model and make it robust enough for the future stable Red v1.0. First, here is a simplified overview of the Red memory model (existing parts in green color, new parts in orange, non-Red parts in blue): All Red values are stored in series. Some Red values require one or more buffers to hold their content. The values can never reference a buffer directly, but only through a node reference, to enable relocation when expanding the series buffer or when moving it around during compaction by the GC. Now let's dive into the hairy details! External resources GC The Red/View engine backends rely on external resources provided by the OS. Among those resources, some are linked to face! or font! object and require special care when those objects are not reachable anymore. So far, our GC (Garbage Collector) was not able to release such resources (images bitmap buffers and fonts handles), as unreachable Red aggregate values are seeing as simple series during the sweeping GC stage. In order to improve that, we have added an external resources manager, that will track and free unused resources, allowing now unrestricted images and fonts usage! Accurate GC The Red GC relies on allocated memory walking and native stack scanning to identify live Red values. Scanning the native stack can be challenging. The scanner used so far a conservative approach, which is simpler, but can lead to corruptions or crashes in rare cases (e.g. a floating point number being mistaken for a series or node pointer). Moreover, such approach precluded from having a nodes frame GC, as there was no way to accurately identify node pointers on the stack. This is now solved. The plan was always to make it precise when getting closer to a Red v1.0 and that's what we did in this release. In order to achieve that, several key addition

## Using Different Size Pools in Ruby Garbage Collection

DevFeed: [Using Different Size Pools in Ruby Garbage Collection](<https://devfeed.tech/articles/using-different-size-pools-31810.md>)

Original publisher: [Read original article](<https://patshaughnessy.net/2025/2/11/using-different-size-pools>)

Author: Pat Shaughnessy

Published: 2025-02-11T00:00:00Z

Content type: tutorial

Language: en

Sources: [Pat Shaughnessy](<https://devfeed.tech/sources/pat-shaughnessy.md>)

Topics: [Ruby](<https://devfeed.tech/topics/ruby.md>)

Tags: [array](<https://devfeed.tech/tags/array.md>), [gc](<https://devfeed.tech/tags/gc.md>), [ruby](<https://devfeed.tech/tags/ruby.md>), [updating-ruby-under-a-microscope](<https://devfeed.tech/tags/updating-ruby-under-a-microscope.md>)

### AI overview

An excerpt from an updated Ruby garbage-collection chapter explains how to use GC.stat_heap in Ruby 3.2 and later to inspect size-pool statistics while allocating arrays of different capacities.

### Source excerpt

I've started working on a new edition of Ruby Under a Microscope that covers Ruby 3.x. I'm working on this in my spare time, so it will take a while. Leave a comment or drop me a line and I'll email you when it's finished. The Ruby team has done

## Demystifying Java Object Sizes: Compact Headers, Compressed Oops, and Beyond

DevFeed: [Demystifying Java Object Sizes: Compact Headers, Compressed Oops, and Beyond](<https://devfeed.tech/articles/demystifying-java-object-sizes-compact-headers-compressed-oops-and-beyond-30741.md>)

Original publisher: [Read original article](<http://blog.vanillajava.blog/2024/12/demystifying-java-object-sizes-compact.html>)

Author: Peter Lawrey (noreply@blogger.com)

Published: 2024-12-10T16:51:00Z

Content type: article

Language: en

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

Topics: [Java](<https://devfeed.tech/topics/java.md>), [systems](<https://devfeed.tech/topics/systems.md>), [Code](<https://devfeed.tech/topics/code.md>), [Concurrency](<https://devfeed.tech/topics/concurrency.md>)

Tags: [code](<https://devfeed.tech/tags/code.md>), [gc](<https://devfeed.tech/tags/gc.md>), [info](<https://devfeed.tech/tags/info.md>), [java](<https://devfeed.tech/tags/java.md>), [jvm](<https://devfeed.tech/tags/jvm.md>), [low-latency](<https://devfeed.tech/tags/low-latency.md>), [memory](<https://devfeed.tech/tags/memory.md>), [object](<https://devfeed.tech/tags/object.md>), [opinion](<https://devfeed.tech/tags/opinion.md>), [performance](<https://devfeed.tech/tags/performance.md>), [threads](<https://devfeed.tech/tags/threads.md>)

### AI overview

An article explaining how Java object sizes are affected by Compressed Oops and Compact Object Headers. It describes estimating object sizes with JVM memory measurements, while accounting for TLAB allocation, garbage collection, and concurrent allocations. It also summarizes JEP 450's proposed reduction of object headers to 64 bits on supported 64-bit platforms.

### Source excerpt

Introduction Measuring an object's size in Java is not straightforward. The platform encourages you to consider references and abstractions rather than raw memory usage. Still, understanding how objects fit into memory can yield significant benefits, especially for high-performance, low-latency systems. Over time, the JVM has introduced optimisations like Compressed Ordinary Object Pointers (Compressed Oops) and, more recently, Compact Object Headers. Each of these can influence how large or small your objects appear. Understanding these factors helps you reason about memory usage more concretely. Measuring Object Sizes In principle, you can estimate an object's size by creating instances and observing changes in the JVM's free memory. However, you must neutralise certain factors to get consistent results. For example, turning off TLAB allocation (-XX:-UseTLAB) makes memory usage more directly observable. Repeated measurements and median calculations can reduce the impact of GC and concurrent allocations. A GC can occur while you are creating your object. This will result in more free memory at the end than when you started. I ignore any negative sizes in this test ;) Other threads in the system could use memory at the same time. I perform multiple test and take the median, which removes any outliers. Below is a rough approach: long before = usedMemory(); Object obj = createYourObject(); long after = usedMemory(); long approximateSize = after - before; This test SizeofTest.java is a simple test which creates a number of objects and measures the memory used to create each object. This is usually the same as the amount of memory the object retains for simple objects. Approximate layout of an object Memory Region Description Size (Bytes) Mark Word Header information including identity hash code, lock state, and GC metadata 8 bytes (on 64-bit JVMs) Class Pointer (Klass Pointer) Reference to the object's class metadata, used internally by the JVM Typically 4 bytes with C

## Eliminating Intermediate Array Allocations

DevFeed: [Eliminating Intermediate Array Allocations](<https://devfeed.tech/articles/eliminating-intermediate-array-allocations-38999.md>)

Original publisher: [Read original article](<https://tenderlovemaking.com/2024/09/29/eliminating-intermediate-array-allocations/>)

Published: 2024-09-30T02:06:28Z

Content type: tutorial

Language: en

Sources: [Aaron Patterson](<https://devfeed.tech/sources/aaron-patterson.md>)

Topics: [Ruby](<https://devfeed.tech/topics/ruby.md>), [Code](<https://devfeed.tech/topics/code.md>), [tagged pointers](<https://devfeed.tech/topics/tagged-pointers.md>), [math](<https://devfeed.tech/topics/math.md>)

Tags: [array](<https://devfeed.tech/tags/array.md>), [code](<https://devfeed.tech/tags/code.md>), [function](<https://devfeed.tech/tags/function.md>), [gc](<https://devfeed.tech/tags/gc.md>), [ruby](<https://devfeed.tech/tags/ruby.md>), [tagged-pointers](<https://devfeed.tech/tags/tagged-pointers.md>)

### AI overview

This Ruby article explains how to measure object allocations with GC.stat and distinguishes code that never, sometimes, or always allocates. It focuses on why an intermediate array used in certain min or max calculations can be allocated on the stack and discarded without requesting a new object from the garbage collector.

### Source excerpt

Recently I gave a talk at RailsWorld (hopefully they'll post the video soon), and part of my presentation was about eliminating allocations in tokenizers. I presented a simple function for measuring allocations: def allocations x = GC.stat(:total_allocated_objects) yield GC.stat(:total_allocated_objects) - x end Everything in Ruby is an object, but not all objects actually make allocations. We can use the above function to measure allocations made in a block. Here are some examples of code that never allocate: p allocations { true } # => 0 p allocations { false } # => 0 p allocations { nil } # => 0 p allocations { :hello } # => 0 p allocations { 1 } # => 0 p allocations { 2.3 } # => 0 p allocations { 0xFFFF_FFFF_FFFF_FFFF } # => 0 Literals like booleans, nil, symbols, integers, and floats are represented internally to CRuby as "tagged pointers" and they don't allocate anything when executed. Here is an example of code that sometimes allocates: # Depends on the size of the number p allocations { 1 + 2 } # => 0 p allocations { 0x3FFF_FFFF_FFFF_FFFF + 1 } # => 1 # Depends on `frozen_string_literal` p allocations { "hello!" } # => 0 or 1 Math on integers generally doesn't allocate anything, but it depends on the integer. When a number gets large enough, CRuby will allocate an object to represent that number. On 64 bit platforms, the largest whole number we can represent without allocating is 0x3FFF_FFFF_FFFF_FFFF. String literals will sometimes allocate, but it depends on the frozen_string_literal setting in your program. Here is an example of code that always allocates: p allocations { [1, 2] } # => 1 p allocations { { a: :b } } # => 1 p allocations { Object.new } # => 1 p allocations { "foo"[0, 1] } # => 1 Hopefully these examples are fairly straightforward. Arrays, hashes, objects, string slices, etc will allocate an object. Eliminating Intermediate Array Allocations At the Shopify after-party at RailsWorld, someone asked me a really great question. Their codebase ha

## Rendering the Java heap as a Treemap

DevFeed: [Rendering the Java heap as a Treemap](<https://devfeed.tech/articles/rendering-the-java-heap-as-a-treemap-25629.md>)

Original publisher: [Read original article](<https://blog.p-y.wtf/rendering-the-java-heap-as-a-treemap>)

Author: Pierre-Yves Ricau

Published: 2024-09-25T04:37:22Z

Content type: tutorial

Language: en

Sources: [Py's blog](<https://devfeed.tech/sources/py-s-blog.md>)

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

Tags: [android](<https://devfeed.tech/tags/android.md>), [computer-science](<https://devfeed.tech/tags/computer-science.md>), [garbage-collection](<https://devfeed.tech/tags/garbage-collection.md>), [gc](<https://devfeed.tech/tags/gc.md>), [graph-theory](<https://devfeed.tech/tags/graph-theory.md>), [java](<https://devfeed.tech/tags/java.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [memory](<https://devfeed.tech/tags/memory.md>), [memory-management](<https://devfeed.tech/tags/memory-management.md>)

### AI overview

An exploration of Java heap dumps that explains shallow size, retained size, garbage-collection roots, and dominators. It also demonstrates using Shark and Graphviz to explore heap and view hierarchies.

### Source excerpt

Exploring heap dumps I have investigated many heap dumps over the years, and I usually switch back and forth between two tools: YourKit Java Profiler to poke around the heap and look for interesting things (ask your company to buy a license!) Shark...

## 重新思考 Go：Slice 只是「操作视图」

DevFeed: [重新思考 Go：Slice 只是「操作视图」](<https://devfeed.tech/articles/go-slice-40989.md>)

Original publisher: [Read original article](<https://blog.joway.io/posts/golang-rethink-slice/>)

Author: Joway

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

Content type: article

Language: zh

Sources: [Random Thoughts](<https://devfeed.tech/sources/random-thoughts.md>)

Topics: [Go Language](<https://devfeed.tech/topics/go-language.md>), [bug](<https://devfeed.tech/topics/bug.md>)

Tags: [copy](<https://devfeed.tech/tags/copy.md>), [gc](<https://devfeed.tech/tags/gc.md>), [go](<https://devfeed.tech/tags/go.md>), [slices](<https://devfeed.tech/tags/slices.md>), [tech](<https://devfeed.tech/tags/tech.md>)

### AI overview

This article examines Go slices as views over underlying memory rather than memory representations. It explains how subslices can retain oversized buffers, pointer elements can remain referenced after removal, and certain allocation patterns can cause unnecessary memory clearing. It concludes by discussing Go 1.21's slices package as a safer way to manipulate slices.

### Source excerpt

重新思考 Go 系列：这个系列希望结合工作中在 Go 编程与性能优化中遇到过的问题，探讨 Go 在语言哲学、底层实现和现实需求三者之间关系与矛盾。 Go 在语法级别上提供了 Slice 类型作为对底层内存的一个「操作视图」: var sh []any // ==> internal struct of []any type SliceHeader struct { Data uintptr Len int Cap int } 编程者可以使用一些近似 Python 的语法来表达对底层内存边界的控制:

## Stressing the JVM GC on Android

DevFeed: [Stressing the JVM GC on Android](<https://devfeed.tech/articles/stressing-the-jvm-gc-on-android-28537.md>)

Original publisher: [Read original article](<https://www.amanjeet.me/stressing-the-jvm-gc-on-android/>)

Author: Amanjeet Singh Gurtatta

Published: 2024-03-10T08:49:55Z

Content type: tutorial

Language: en

Sources: [Amanjeet Singh](<https://devfeed.tech/sources/amanjeet-singh.md>)

Topics: [Android](<https://devfeed.tech/topics/android.md>), [Java](<https://devfeed.tech/topics/java.md>), [Code](<https://devfeed.tech/topics/code.md>), [now-in-android](<https://devfeed.tech/topics/now-in-android.md>)

Tags: [adb](<https://devfeed.tech/tags/adb.md>), [android](<https://devfeed.tech/tags/android.md>), [android-vitals](<https://devfeed.tech/tags/android-vitals.md>), [anr](<https://devfeed.tech/tags/anr.md>), [fragmentation](<https://devfeed.tech/tags/fragmentation.md>), [gc](<https://devfeed.tech/tags/gc.md>), [java](<https://devfeed.tech/tags/java.md>), [leak](<https://devfeed.tech/tags/leak.md>), [memory](<https://devfeed.tech/tags/memory.md>), [memory-leak](<https://devfeed.tech/tags/memory-leak.md>), [mobile](<https://devfeed.tech/tags/mobile.md>), [mobile-performance](<https://devfeed.tech/tags/mobile-performance.md>), [now-in-android](<https://devfeed.tech/tags/now-in-android.md>), [outofmemory](<https://devfeed.tech/tags/outofmemory.md>), [performance](<https://devfeed.tech/tags/performance.md>), [stress](<https://devfeed.tech/tags/stress.md>), [stresstest](<https://devfeed.tech/tags/stresstest.md>)

### AI overview

This tutorial describes GCStress, a Java application that deliberately creates garbage-collection pressure through repeated random byte-array allocations and cache removals. It explains how to integrate it into Google's Now in Android app, trigger it with an Android broadcast and adb, and observe effects such as skipped UI frames, possible ANRs, and potential out-of-memory errors.

### Source excerpt

This post talks about a way to stress Java garbage collector.

## Investigating a Ruby Memory Leak in the HEY App

DevFeed: [Investigating a Ruby Memory Leak in the HEY App](<https://devfeed.tech/articles/my-adventures-hunting-down-a-ruby-memory-leak-33495.md>)

Original publisher: [Read original article](<https://dev.37signals.com/adventures-hunting-down-ruby-memory-leak/>)

Author: Jacopo Beschi

Published: 2024-03-07T18:00:00Z

Content type: tutorial

Language: en

Sources: [37signals Dev](<https://devfeed.tech/sources/37signals-dev.md>)

Topics: [Memory Leaks](<https://devfeed.tech/topics/memory-leaks.md>), [Ruby](<https://devfeed.tech/topics/ruby.md>), [App](<https://devfeed.tech/topics/app.md>), [Server](<https://devfeed.tech/topics/server.md>)

Tags: [app](<https://devfeed.tech/tags/app.md>), [gc](<https://devfeed.tech/tags/gc.md>), [load-balancer](<https://devfeed.tech/tags/load-balancer.md>), [memory-leak](<https://devfeed.tech/tags/memory-leak.md>), [ruby](<https://devfeed.tech/tags/ruby.md>), [trace](<https://devfeed.tech/tags/trace.md>)

### AI overview

This article describes how a team investigated a slow Ruby memory leak in the HEY app. It covers analyzing Ruby heap allocation statistics, extracting heap dumps with rbtrace, enabling object allocation tracing, and comparing dumps over time while limiting the diagnostic impact to one app host.

### Source excerpt

What I learned on the journey chasing a tricky memory leak in HEY.

## Avoid Java double brace initialization

DevFeed: [Avoid Java double brace initialization](<https://devfeed.tech/articles/avoid-java-double-brace-initialization-25619.md>)

Original publisher: [Read original article](<https://blog.p-y.wtf/avoid-java-double-brace-initialization>)

Author: Pierre-Yves Ricau

Published: 2023-06-27T20:58:00Z

Content type: tutorial

Language: en

Sources: [Py's blog](<https://devfeed.tech/sources/py-s-blog.md>)

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

Tags: [android](<https://devfeed.tech/tags/android.md>), [class](<https://devfeed.tech/tags/class.md>), [classes](<https://devfeed.tech/tags/classes.md>), [code](<https://devfeed.tech/tags/code.md>), [constructor](<https://devfeed.tech/tags/constructor.md>), [crash-reporting](<https://devfeed.tech/tags/crash-reporting.md>), [gc](<https://devfeed.tech/tags/gc.md>), [global](<https://devfeed.tech/tags/global.md>), [implementation](<https://devfeed.tech/tags/implementation.md>), [java](<https://devfeed.tech/tags/java.md>), [leak](<https://devfeed.tech/tags/leak.md>), [leakcanary](<https://devfeed.tech/tags/leakcanary.md>), [lifecycle](<https://devfeed.tech/tags/lifecycle.md>), [memory](<https://devfeed.tech/tags/memory.md>), [memory-leak](<https://devfeed.tech/tags/memory-leak.md>), [object](<https://devfeed.tech/tags/object.md>), [patterns](<https://devfeed.tech/tags/patterns.md>), [subclass](<https://devfeed.tech/tags/subclass.md>)

### AI overview

This tutorial explains how Java double brace initialization can cause memory leaks. An anonymous HashMap subclass implicitly retains its outer Activity, so a breadcrumb stored by a singleton BugSnag client can keep a destroyed Android Activity in memory. The article recommends avoiding the pattern and using explicit initialization or Kotlin.

### Source excerpt

TL;DR Avoid doing this: new HashMap() {{ put("key", value); }}; Leak Trace I was recently looking at the following leak trace from LeakCanary: ┬─── │ GC Root: Global variable in native code │ ├─ com.bugsnag.android.AnrPlugin instan...

## Investigation of a Gradle and IntelliJ IDEA Memory Leak

DevFeed: [Investigation of a Gradle and IntelliJ IDEA Memory Leak](<https://devfeed.tech/articles/let-s-investigate-a-gradle-intellij-memory-leak-25625.md>)

Original publisher: [Read original article](<https://blog.p-y.wtf/gradle-intellij-memory-leak>)

Author: Pierre-Yves Ricau

Published: 2022-10-12T17:26:46Z

Content type: tutorial

Language: en

Sources: [Py's blog](<https://devfeed.tech/sources/py-s-blog.md>)

Topics: [Gradle](<https://devfeed.tech/topics/gradle.md>), [Memory Leaks](<https://devfeed.tech/topics/memory-leaks.md>), [IntelliJ IDEA](<https://devfeed.tech/topics/intellij-idea.md>), [Java](<https://devfeed.tech/topics/java.md>), [Graphs](<https://devfeed.tech/topics/graphs.md>)

Tags: [garbage-collection](<https://devfeed.tech/tags/garbage-collection.md>), [gc](<https://devfeed.tech/tags/gc.md>), [gradle](<https://devfeed.tech/tags/gradle.md>), [graph](<https://devfeed.tech/tags/graph.md>), [idea](<https://devfeed.tech/tags/idea.md>), [intellij](<https://devfeed.tech/tags/intellij.md>), [java](<https://devfeed.tech/tags/java.md>), [leak](<https://devfeed.tech/tags/leak.md>), [memory](<https://devfeed.tech/tags/memory.md>), [memory-leak](<https://devfeed.tech/tags/memory-leak.md>), [performance](<https://devfeed.tech/tags/performance.md>)

### AI overview

A team investigation examines a Gradle process memory leak during project import in IntelliJ IDEA. The article describes heap analysis using dominator trees, pending finalization, and paths from GC roots.

### Source excerpt

👋 Hi, this is P.Y., I work as an Android Engineer at Block. This article shares a team investigation by Tony Robalik, Pablo Baxter, Roger Hu and myself into a recent Gradle / IntelliJ memory leak. O

## Effective Kotlin Item 53: Eliminate obsolete object references

DevFeed: [Effective Kotlin Item 53: Eliminate obsolete object references](<https://devfeed.tech/articles/effective-kotlin-item-53-eliminate-obsolete-object-references-39287.md>)

Original publisher: [Read original article](<https://kt.academy/article/ek-object-references>)

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

Content type: tutorial

Language: en

Sources: [Kt. Academy](<https://devfeed.tech/sources/kt-academy.md>)

Topics: [Memory Leaks](<https://devfeed.tech/topics/memory-leaks.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Android](<https://devfeed.tech/topics/android.md>), [classes](<https://devfeed.tech/topics/classes.md>), [function](<https://devfeed.tech/topics/function.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [gc](<https://devfeed.tech/tags/gc.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [memory](<https://devfeed.tech/tags/memory.md>), [memory-leaks](<https://devfeed.tech/tags/memory-leaks.md>), [workshop-learning-programming](<https://devfeed.tech/tags/workshop-learning-programming.md>)

### AI overview

This article explains how obsolete object references can cause memory leaks in Java and Android applications. It discusses retaining large or no-longer-needed objects, including activities stored in companion objects or top-level properties, and shows how stale references in a stack implementation keep removed elements reachable by the Garbage Collector.

### Source excerpt

How to help our garbage collector and avoid memory leaks.

## Comparing OCaml's best-fit and next-fit memory allocators

DevFeed: [Comparing OCaml's best-fit and next-fit memory allocators](<https://devfeed.tech/articles/memory-allocator-showdown-20194.md>)

Original publisher: [Read original article](<https://blog.janestreet.com/memory-allocator-showdown/>)

Author: Stephen Dolan

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

Content type: article

Language: en

Sources: [Jane Street](<https://devfeed.tech/sources/jane-street.md>)

Topics: [OCaml](<https://devfeed.tech/topics/ocaml.md>), [Benchmark](<https://devfeed.tech/topics/benchmark.md>), [configuration](<https://devfeed.tech/topics/configuration.md>)

Tags: [benchmark](<https://devfeed.tech/tags/benchmark.md>), [benchmarks](<https://devfeed.tech/tags/benchmarks.md>), [garbage-collection](<https://devfeed.tech/tags/garbage-collection.md>), [gc](<https://devfeed.tech/tags/gc.md>), [memory](<https://devfeed.tech/tags/memory.md>), [memory-management](<https://devfeed.tech/tags/memory-management.md>), [performance](<https://devfeed.tech/tags/performance.md>)

### AI overview

This article examines how to compare OCaml's best-fit and next-fit memory allocators in a garbage-collected system. Benchmarks show that best-fit can trade slightly slower execution for lower memory use, and that varying garbage-collection settings reveals a broader space-time performance trade-off.

### Source excerpt

Since version 4.10, OCaml offers a new best-fit memory allocator alongside its existing default, the next-fit allocator. At Jane Street, we've seen a big improvement after switching over to the new allocator. This post isn't about how the new allocator works. For that, the best source is these notes from a talk by its author. Instead, this post is about just how tricky it is to compare two allocators in a reasonable way, especially for a garbage-collected system.

## Announcing Shark: Smart Heap Analysis Reports for Kotlin

DevFeed: [Announcing Shark: Smart Heap Analysis Reports for Kotlin](<https://devfeed.tech/articles/announcing-shark-smart-heap-analysis-reports-for-kotlin-15513.md>)

Original publisher: [Read original article](<https://developer.squareup.com/blog/announcing-shark-smart-heap-analysis-reports-for-kotlin>)

Author: P-Y Ricau

Published: 2019-08-06T19:00:00Z

Content type: release

Language: en

Sources: [Square Corner Blog RSS Feed](<https://devfeed.tech/sources/square-corner-blog-rss-feed.md>)

Topics: [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Android](<https://devfeed.tech/topics/android.md>), [Library](<https://devfeed.tech/topics/library.md>), [Graphs](<https://devfeed.tech/topics/graphs.md>), [Caching](<https://devfeed.tech/topics/caching.md>), [Command-line interface](<https://devfeed.tech/topics/cli.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [cache](<https://devfeed.tech/tags/cache.md>), [cli](<https://devfeed.tech/tags/cli.md>), [engineering](<https://devfeed.tech/tags/engineering.md>), [fragments](<https://devfeed.tech/tags/fragments.md>), [gc](<https://devfeed.tech/tags/gc.md>), [graph](<https://devfeed.tech/tags/graph.md>), [io](<https://devfeed.tech/tags/io.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [library](<https://devfeed.tech/tags/library.md>), [memory](<https://devfeed.tech/tags/memory.md>), [performance](<https://devfeed.tech/tags/performance.md>), [performance-tuning](<https://devfeed.tech/tags/performance-tuning.md>)

### AI overview

The article announces Shark, a standalone Kotlin heap-analysis library that powers LeakCanary 2. It describes an indexed, on-demand approach to reading hprof heap dumps, using low and constant memory, an LRU cache, and layered components for heap analysis and Android-specific reporting. The reported benchmark parsed heap dumps and found shortest paths from GC roots to leaking objects six times faster than perflib while using ten times less memory.

### Source excerpt

The heap analyzer that powers LeakCanary 2

## RubyKaigi and the Path to Ruby 3

DevFeed: [RubyKaigi and the Path to Ruby 3](<https://devfeed.tech/articles/rubykaigi-and-the-path-to-ruby-3-15832.md>)

Original publisher: [Read original article](<https://developer.squareup.com/blog/rubykaigi-and-the-path-to-ruby-3>)

Author: Shannon Skipper

Published: 2019-05-06T19:00:00Z

Content type: article

Language: en

Sources: [Square Corner Blog RSS Feed](<https://devfeed.tech/sources/square-corner-blog-rss-feed.md>)

Topics: [Ruby](<https://devfeed.tech/topics/ruby.md>), [Programming language](<https://devfeed.tech/topics/programming-language.md>), [Concurrency](<https://devfeed.tech/topics/concurrency.md>), [Optimization](<https://devfeed.tech/topics/optimization.md>)

Tags: [3](<https://devfeed.tech/tags/3.md>), [analysis](<https://devfeed.tech/tags/analysis.md>), [concurrency](<https://devfeed.tech/tags/concurrency.md>), [engineering](<https://devfeed.tech/tags/engineering.md>), [garbage-collection](<https://devfeed.tech/tags/garbage-collection.md>), [gc](<https://devfeed.tech/tags/gc.md>), [optimization](<https://devfeed.tech/tags/optimization.md>), [performance](<https://devfeed.tech/tags/performance.md>), [programming](<https://devfeed.tech/tags/programming.md>), [programming-language](<https://devfeed.tech/tags/programming-language.md>), [ruby](<https://devfeed.tech/tags/ruby.md>)

### AI overview

This article reports on RubyKaigi discussions about Ruby 3, focusing on planned improvements in performance, concurrency, and static analysis. It describes ongoing garbage collector work intended to improve memory performance, reduce pauses, limit heap fragmentation, and improve copy-on-write behavior.

### Source excerpt

Performance, Concurrency, and Static Analysis in Ruby

## Modern C++ for C Programmers: Part 5

DevFeed: [Modern C++ for C Programmers: Part 5](<https://devfeed.tech/articles/modern-c-for-c-programmers-part-5-36326.md>)

Original publisher: [Read original article](<https://berthub.eu/articles/posts/cpp-5/>)

Published: 2018-07-25T09:26:51Z

Content type: tutorial

Language: en

Sources: [Bert Hubert's writings](<https://devfeed.tech/sources/bert-hubert-s-writings.md>)

Topics: [C++](<https://devfeed.tech/topics/c-plus-plus.md>), [C](<https://devfeed.tech/topics/c.md>), [Programming](<https://devfeed.tech/topics/programming.md>)

Tags: [algorithms](<https://devfeed.tech/tags/algorithms.md>), [c](<https://devfeed.tech/tags/c.md>), [c-plus-plus](<https://devfeed.tech/tags/c-plus-plus.md>), [code](<https://devfeed.tech/tags/code.md>), [compiler](<https://devfeed.tech/tags/compiler.md>), [containers](<https://devfeed.tech/tags/containers.md>), [gc](<https://devfeed.tech/tags/gc.md>), [memory-leaks](<https://devfeed.tech/tags/memory-leaks.md>), [modern](<https://devfeed.tech/tags/modern.md>), [programming](<https://devfeed.tech/tags/programming.md>)

### AI overview

Part 5 of a tutorial series for C programmers explains modern C++ memory-management techniques, including reference counting, std::move, copy elision, return value optimization, smart pointers, and garbage collection trade-offs.

### Source excerpt

Welcome back! In part 4 we went over the nitty-gritty of lambdas and how to store them, we explored the relation between the various C++ algorithms and containers, plus we took a stroll through some non-standard containers with exceptional capabilities. Note: part 1 is here. In this probably final part 5, we'll be going over some of the most powerful stuff in modern C++: "perfect" reference counting and the concept of std::move.

## TIP: Use Weak References

DevFeed: [TIP: Use Weak References](<https://devfeed.tech/articles/tip-use-weak-references-19612.md>)

Original publisher: [Read original article](<https://www.codenameone.com/blog/tip-weak-references/>)

Author: Shai Almog

Published: 2017-10-16T00:00:00Z

Content type: tutorial

Language: en

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

Topics: [Java](<https://devfeed.tech/topics/java.md>), [Objective-C](<https://devfeed.tech/topics/objective-c.md>), [Swift](<https://devfeed.tech/topics/swift.md>)

Tags: [gc](<https://devfeed.tech/tags/gc.md>), [java](<https://devfeed.tech/tags/java.md>), [memory](<https://devfeed.tech/tags/memory.md>), [object](<https://devfeed.tech/tags/object.md>)

### AI overview

This tutorial explains how weak references work in Java garbage-collected environments. It describes how they allow objects, such as memory-intensive images, to be reclaimed when needed, and discusses Codename One's weak-reference APIs and platform limitations.

### Source excerpt

One of the less familiar features of Java is the mess of weak/soft/phantom references. This is a confusing mess and it's compounded by the fact that other languages (such as the reference counting Swift/Objective-C) have used these terms with a different meaning. To simplify this weak references in a garbage collected language allows you to keep a pointer (reference) to an object that won't force it to stay in RAM.

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