| Name | Modified | Size | Downloads / Week |
|---|---|---|---|
| Parent folder | |||
| jemalloc-5.4.0.tar.bz2 | 2026-09-17 | 913.8 kB | |
| 5.4.0 source code.tar.gz | 2026-09-17 | 1.0 MB | |
| 5.4.0 source code.zip | 2026-09-17 | 1.3 MB | |
| README.md | 2026-09-17 | 5.9 kB | |
| Totals: 4 Items | 3.2 MB | 6 | |
This release contains over 160 commits, focusing on the technical debts cleaning including refactorings, bug fixes, test coverage improvement, and option cleanups. The release also includes portability improvements per upstream issues report.
New features:
- Add
EXTENT_ALLOC_FLAG_PINNEDso custom extent-allocation hooks can mark non-reclaimable mappings, such as HugeTLB pages, for preferential reuse outside the decay and purge pipeline. Add the mallctl interfacesstats.pinned,stats.arenas.<i>.pinned,stats.arenas.<i>.extents.<j>.npinned,stats.arenas.<i>.extents.<j>.pinned_bytes, andstats.arenas.<i>.mutexes.extents_pinned.{counter}to report pinned-memory usage and mutex statistics. (@binliu19: be2de8cc) - Allow resuming per-CPU arena selection via
thread.arena. (@algunenano: 68c35f65) - Better align the contents of human-readable and JSON malloc statistics. (@spredolac: 68fe1be1, 30b1a410, 04aad97f)
- Replace the runtime
experimental_infallible_newoption with the compile-time--enable-cxx-infallible-newoption, enabling compiler-level optimizations and optimization in move constructors, and fix thenew(std::nothrow)contract (@spredolac: 160ab9d7, fe336672)
Incompatible changes:
- Adapt tcache fill and retention targets per bin to demand observed
between GC events, replacing the fixed refill/flush policy. Remove
seven legacy non-experimental controls:
lg_tcache_nslots_mul,tcache_nslots_small_min,tcache_nslots_small_max,tcache_nslots_large,tcache_gc_delay_bytes,lg_tcache_flush_small_div, andlg_tcache_flush_large_div. Correspondingmalloc_confsettings are silently ignored, matchingopt.*mallctls return ENOENT, andtcache_ncached_maxremains supported. (@spredolac: d13fe91a)
Bug fixes:
- Preserve
errnoacrossfree,free_sized, andfree_aligned_sized, and acrossprocess_madvise-based page purging. (@spredolac: 3a779661, 86f05828) - Fix numeric overflow checks in size classes. (@spredolac: 6b245225)
- Accept NULL in
free_sized()andfree_aligned_sized()(C23 correctness). (@bigbruno: 7ce8b916) - Fix TSD lifecycle edge cases by 1) initializing thread-cache bins before marking the cache enabled, preventing reentrant bootstrap allocations from using uninitialized state, and 2) avoiding TSD recreation for late deallocations after thread teardown on generic-TSD platforms. (@fzakaria: 54f22c83, @spredolac: fb5499aa)
- Use
O_CLOEXECwhen opening the THP sysfs file ininit_thp_state. (@ibookstein: d0705543) - Fix duplicate
opt.stats_printandopt.stats_print_optsfields inmalloc_stats_printoutput. (@spredolac: dfe3a2ed) - Fix a potential deadlock during
arena_reset. (@guangli-dai: 6957341f) - Fix a prof-sampling / guard-page interaction bug in the SAN. (@gctony: e36a0fa5)
Optimizations and refactors:
- Modularize jemalloc's front end by extracting arena management,
initialization, fork orchestration, and allocation dispatch from
jemalloc.c; untangle tcache/arena ownership; and consolidate the internal header graph to eliminate circular dependencies. (@spredolac: ba1e2fe4, 88745978, 9d757223, de9ad145, ...) - Simplify ctl dispatch by refactoring arena helpers, internalizing an
implementation-only control, replacing control-flow macros with typed
helpers, and organizing
ctl.cby subsystem. (@spredolac: 9e143468, 901365d4, 4e903a0a, 5bc8d6e9) - Cap the base-block growth heuristic to avoid virtual-memory exhaustion under rare racy conditions. (@guangli-dai: 2f4db8cf)
- Move background-thread lifecycle and state operations into the background-thread module, clarifying ownership independently of PAC/HPA callers. (@guangli-dai: f1f07923)
- Simplify the page-allocation boundary by replacing PAI vtable dispatch
with direct PAC/HPA calls, removing the obsolete
pai_t/pai.habstraction, and moving deferred-work and decay orchestration out of the arena. (@guangli-dai: 1dfa6f7a, 8edd1012, d410f43e) - Refactor statistics collection and rendering into separate gather/emission stages and descriptor-driven tables. (@spredolac: 184f304d, 80c8fcb4)
- Introduce an OS abstraction layer and move platform-dependent file/process I/O, time, synchronization, CPU, virtual-memory, atfork, error-handling, profiling, thread-yield, and configuration-access operations out of allocator core code. (@guangli-dai: c4158aca, c8e2e013, ...)
Portability improvements:
- Replace the
std::__throw_bad_alloccall with standard C++ (#2900). (@lexprfuncall: 1a15fe33) - Make
arena_suse a flexible array member (bin_t all_bins[]) for C99 or newer. (@grueninger: 300b58b4) - Fix rdtscp detection with
--with-lg-vaddr. (@xinydev: e8a0d2b4) - Fix
malloc_getcpuon macOS to read the current CPU number correctly. (@algunenano: 5aabbc87) - Use
CLOCK_MONOTONICfor background-thread sleep to prevent clock-rollback stalls, and detect monotonic-condvar support at configure time. (@antonio2368: ebacec3a, 8361239b) - Fix compilation warnings on macOS. (@gctony: abb0a8a0)
- Fix thread-exit TSD cleanup on MinGW builds. (@gctony: 1e923170)
- Fix GCC 16 build warnings by removing
-Wpedanticviolations in macro and function syntax and explicitly NUL-terminating profiling thread-name copies to resolve-Wstringop-truncation. (@grueninger: 5acdcee6, c22d929a, @jasonangelov: 6a245e02) - Parse PID-namespace symlinks without glibc-dependent
strtok/atol, and return identifiers asuint64_t. (@guangli-dai: 278d90a5)