Skip to content

Releases: jemalloc/jemalloc

2.0.0

18 Apr 16:57
Compare
Choose a tag to compare

This version focuses on the experimental *allocm() API, and on improved run-time configuration/introspection. Nonetheless, numerous performance improvements are also included.

New features:

  • Implement the experimental {,r,s,d}allocm() API, which provides a superset
    of the functionality available via malloc(), calloc(), posix_memalign(),
    realloc(), malloc_usable_size(), and free(). These functions can be used to
    allocate/reallocate aligned zeroed memory, ask for optional extra memory
    during reallocation, prevent object movement during reallocation, etc.
  • Replace JEMALLOC_OPTIONS/JEMALLOC_PROF_PREFIX with MALLOC_CONF, which is
    more human-readable, and more flexible. For example:
    JEMALLOC_OPTIONS=AJP
    is now:
    MALLOC_CONF=abort:true,fill:true,stats_print:true
  • Port to Apple OS X. Sponsored by Mozilla.
  • Make it possible for the application to control thread-->arena mappings via
    the "thread.arena" mallctl.
  • Add compile-time support for all TLS-related functionality via pthreads TSD.
    This is mainly of interest for OS X, which does not support TLS, but has a
    TSD implementation with similar performance.
  • Override memalign() and valloc() if they are provided by the system.
  • Add the "arenas.purge" mallctl, which can be used to synchronously purge all
    dirty unused pages.
  • Make cumulative heap profiling data optional, so that it is possible to
    limit the amount of memory consumed by heap profiling data structures.
  • Add per thread allocation counters that can be accessed via the
    "thread.allocated" and "thread.deallocated" mallctls.

Incompatible changes:

  • Remove JEMALLOC_OPTIONS and malloc_options (see MALLOC_CONF above).
  • Increase default backtrace depth from 4 to 128 for heap profiling.
  • Disable interval-based profile dumps by default.

Bug fixes:

  • Remove bad assertions in fork handler functions. These assertions could
    cause aborts for some combinations of configure settings.
  • Fix strerror_r() usage to deal with non-standard semantics in GNU libc.
  • Fix leak context reporting. This bug tended to cause the number of contexts
    to be underreported (though the reported number of objects and bytes were
    correct).
  • Fix a realloc() bug for large in-place growing reallocation. This bug could
    cause memory corruption, but it was hard to trigger.
  • Fix an allocation bug for small allocations that could be triggered if
    multiple threads raced to create a new run of backing pages.
  • Enhance the heap profiler to trigger samples based on usable size, rather
    than request size.
  • Fix a heap profiling bug due to sometimes losing track of requested object
    size for sampled objects.

1.0.3

18 Apr 16:58
Compare
Choose a tag to compare

Bug fixes:

  • Fix the libunwind-based implementation of stack backtracing (used for heap
    profiling). This bug could cause zero-length backtraces to be reported.
  • Add a missing mutex unlock in library initialization code. If multiple
    threads raced to initialize malloc, some of them could end up permanently
    blocked.

1.0.2

18 Apr 16:59
Compare
Choose a tag to compare

Bug fixes:

  • Fix junk filling of large objects, which could cause memory corruption.
  • Add MAP_NORESERVE support for chunk mapping, because otherwise virtual
    memory limits could cause swap file configuration to fail. Contributed by
    Jordan DeLong.

1.0.1

18 Apr 17:00
Compare
Choose a tag to compare

Bug fixes:

  • Fix compilation when --enable-fill is specified.
  • Fix threads-related profiling bugs that affected accuracy and caused memory
    to be leaked during thread exit.
  • Fix dirty page purging race conditions that could cause crashes.
  • Fix crash in tcache flushing code during thread destruction.

1.0.0

18 Apr 17:01
Compare
Choose a tag to compare

This release focuses on speed and run-time introspection. Numerous algorithmic improvements make this release substantially faster than its predecessors.

New features:

  • Implement autoconf-based configuration system.
  • Add mallctl*(), for the purposes of introspection and run-time
    configuration.
  • Make it possible for the application to manually flush a thread's cache, via
    the "tcache.flush" mallctl.
  • Base maximum dirty page count on proportion of active memory.
  • Compute various addtional run-time statistics, including per size class
    statistics for large objects.
  • Expose malloc_stats_print(), which can be called repeatedly by the
    application.
  • Simplify the malloc_message() signature to only take one string argument,
    and incorporate an opaque data pointer argument for use by the application
    in combination with malloc_stats_print().
  • Add support for allocation backed by one or more swap files, and allow the
    application to disable over-commit if swap files are in use.
  • Implement allocation profiling and leak checking.

Removed features:

  • Remove the dynamic arena rebalancing code, since thread-specific caching
    reduces its utility.

Bug fixes:

  • Modify chunk allocation to work when address space layout randomization
    (ASLR) is in use.
  • Fix thread cleanup bugs related to TLS destruction.
  • Handle 0-size allocation requests in posix_memalign().
  • Fix a chunk leak. The leaked chunks were never touched, so this impacted
    virtual memory usage, but not physical memory usage.