This is a living list of tools for program debloating and software specialization.
Slicer4J an accurate, low-overhead dynamic slicer for Java programs (paper).
BloatLibD detects offuscated third-party libraries that are bloated using a Jar2vect model (paper).
JDBL automatically removes unnecessary code from Java applications through dynamic analysis (paper).
DepClean automatically detects and removes unused dependencies in Maven projects (paper).
JReduce is a tool for reducing Java class files and jar files. (paper).
jlink is a tool to assemble and optimize a set of Java modules and their dependencies into a custom runtime image.
Proguard is a shrinker, optimizer and obfuscator of Java bytecode.
Piranha is a tool for refactoring code related to feature flag APIs (paper).
JShrink is a Java shrinker and obfuscator.
docker-slim a tool to minify and secure docker containers.
JavaSlicer is an open-source dynamic slicing tool developed at Saarland University.
RAZOR is a framework for post-deployment software debloating (paper).
Nibbler is a tatic analysis tool to automatically find functions in the program and its shared library functions that are not used by the program. (paper).
R8 is the Google substitute of Proguard.
bpftrace High-level tracing language for Linux eBPF.
STrace A diagnostic, debugging and instructional userspace utility for Linux.
JDCallgraph Dynamic call graph generation for Java.
constant-pool-scanner Simple utility to scan Java bytecode for class references in the constant pool.
java-callgraph Programs for producing static and dynamic (runtime) call graphs for Java programs.
jvm-callgraph Call graph generator for JVM bytecode.
jvm-tools Small set of tools for JVM troublshooting, monitoring and profiling.
bytecode-examples Java Bytecode Engineering Examples & Tutorials.
maven-lifecycle-logger Logger to record maven lifecycle events and timing.
dex-method-counts Command-line tool to count per-package methods in Android .dex files.
DTrace A comprehensive dynamic tracing framework