Heatmaps and Native memory profiling
v4.0
Features
- async-profiler#895, async-profiler#905:
jfrconvbinary and numerous converter enhancements - async-profiler#944: Interactive Heatmap
- async-profiler#1064: Native memory leak profiler
- async-profiler#1002: An option to display instruction addresses
- async-profiler#1007: Optimize wall clock profiling
- async-profiler#1073: Productize VMStructs-based stack walker:
--cstack vm/vmx - async-profiler#1169: C API for accessing thread-local profiling context
Improvements
- async-profiler#923: Support JDK 23+
- async-profiler#952: Solve musl and glibc compatibility issues; link
libstdc++statically - async-profiler#955:
--libpathoption to specify path tolibasyncProfiler.soin a container - async-profiler#1018:
--grainconverter option to coarsen flame graphs - async-profiler#1046:
--nostopoption to continue profiling outside--begin/--endwindow - async-profiler#1178:
--invertedoption to flip flame graphs vertically - async-profiler#1009: Allows collecting allocation and live object traces at the same time
- async-profiler#925: An option to accumulate JFR events in memory instead of flushing to a file
- async-profiler#929: Load symbols from debuginfod cache
- async-profiler#982: Sample contended locks by overflowing interval bucket
- async-profiler#993: Filter native frames in allocation profile
- async-profiler#896: FlameGraph:
Alt+Clickto remove stacks - async-profiler#1097: FlameGraph:
N/Shift+Nto navigate through search results - async-profiler#1182: Retain by-thread grouping when reversing FlameGraph
- async-profiler#1167: Log when no samples are collected
- async-profiler#1044: Fall back to
ctimerfor CPU profiling when perf_events are unavailable - async-profiler#1068: Count missed samples when estimating total CPU time in
ctimermode - async-profiler#1142: Use counter-timer register for timestamps on ARM64
- async-profiler#1123: Support
clock=tscwithout a JVM - async-profiler#1070: Demangle Rust v0 symbols
- async-profiler#1007: Use
ExecutionSampleevent for CPU profiling andWallClockSamplefor Wall clock profiling - async-profiler#1011: Obtain
can_generate_sampled_object_alloc_eventsJVMTI capability only when needed - async-profiler#1013: Intercept java.util.concurrent locks more efficiently
- async-profiler#759: Discover available profiling signal automatically
- async-profiler#884: Record event timestamps early
- async-profiler#885: Print error message if JVM fails to load libasyncProfiler
- async-profiler#892: Resolve tracepoint id in
asprof - Suppress dynamic attach warning on JDK 21+
Bug fixes
- async-profiler#1143: Crash on macOS when using thread filter
- async-profiler#1125: Fixed parsing concurrently loaded libraries
- async-profiler#1095: jfr print fails when a recording has empty pools
- async-profiler#1084: Fixed Logging related races
- async-profiler#1074: Parse both .rela.dyn and .rela.plt sections
- async-profiler#1003: Support both tracefs and debugfs for kernel tracepoints
- async-profiler#986: Profiling output respects loglevel
- async-profiler#981: Avoid JVM crash by deleting JNI refs after
GetMethodDeclaringClass - async-profiler#934: Fix crash on Zing in a native thread
- async-profiler#843: Fix race between parsing and concurrent unloading of shared libraries
- async-profiler#1147, async-profiler#1151: Deadlocks with jemalloc and tcmalloc profilers
- Stack walking fixes for ARM64
- Converter fixes for
jfrsyncprofiles - Fixed parsing non-PIC executables and shared objects with non-standard section layout
- Fixed recursion in
pthread_createwhen using native profiling API - Fixed crashes on Alpine when profiling native apps
- Fixed warnings with
-Xcheck:jni - Fixed "Unsupported JVM" on OpenJ9 JDK 21
- Fixed DefineClass crash on OpenJ9
- JfrReader should handle custom events properly
- Handle truncated JFRs
Project Infrastructure
- Restructure and update documentation
- Implement test framework; add new integration tests
- Unit test framework for C++ code
- Run CI on all supported platforms
- Test multiple JDK versions in CI
- Add GHA to validate license headers
- Add Markdown checker and formatter
- Add Issue and Pull Request templates
- Add Contributing Guidelines and Code of Conduct
- Run static analyzer and fix found issues (async-profiler#1034, async-profiler#1039, async-profiler#1049, async-profiler#1051, async-profiler#1098)
- Provide Dockerfile for building async-profiler release packages
- Publish nightly builds automatically