https://github.com/googlielmo/baa
A simple tool to examine Java methods at the bytecode level and offer basic optimization suggestions.
https://github.com/googlielmo/baa
bytecode code-analysis-tool jvm static-analysis
Last synced: about 1 month ago
JSON representation
A simple tool to examine Java methods at the bytecode level and offer basic optimization suggestions.
- Host: GitHub
- URL: https://github.com/googlielmo/baa
- Owner: googlielmo
- License: other
- Created: 2025-04-11T15:55:00.000Z (12 months ago)
- Default Branch: main
- Last Pushed: 2025-04-14T14:48:00.000Z (12 months ago)
- Last Synced: 2025-10-10T22:25:57.829Z (6 months ago)
- Topics: bytecode, code-analysis-tool, jvm, static-analysis
- Language: Java
- Homepage:
- Size: 30.3 KB
- Stars: 2
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# BAA: Bytecode Analysis Assistant
A simple tool to examine Java methods at the bytecode level and offer basic optimization suggestions.
## Overview
BAA inspects Java bytecode to gather information about methods, potentially helping developers understand their code at the bytecode level.
Basic metrics collected:
- Bytecode size
- Object allocations
- Method calls
- Boxing/unboxing operations
- Basic recursion detection
- Simple loop identification
## Usage
```bash
java -jar baa.jar [options] [ | --target=]
```
### Options
- `--help` - Show help message
- `--method=#` - Analyze a specific method
- `--output=json|text|csv` - Output format (default: text)
- `--color=true|false` - Enable or disable colored output (default: true)
- `--threshold=` - Filter by footprint size (0-3)
### Examples
Analyze a method in a class file:
```bash
java -jar baa.jar --method=com.example.Service#processRequest target/classes/com/example/Service.class
```
Analyze with JSON output:
```bash
java -jar baa.jar --method=com.example.Service#processRequest --output=json app.jar
```
Export to CSV:
```bash
java -jar baa.jar --output=csv app.jar > results.csv
```
## Sample Output
```
Analysis Report for 1 methods
================================================================================
Method: Baa#main([Ljava/lang/String;)V
Overall footprint rating: CRITICAL
============================================================
METRICS:
Bytecode size: 60 bytes
Allocations: 1
Types:
- Baa
External calls: 10
Calls to (first 5):
- Baa#parseOptions
- Map#isEmpty
- Map#containsKey
- PrintStream#println
- Map#get
- ... and 5 more
Boxing operations: 0
Recursion detected: 3 recursive call patterns
Details:
- call to method in same class: Baa#parseOptions
- call to method in same class: Baa#
- call to method in same class: Baa#run
OPTIMIZATION SUGGESTIONS:
• Consider rewriting mutual recursion as iteration to improve performance and reduce stack usage
Impact: High
================================================================================
End of Report
```
## Building
```bash
mvn clean package
```
Creates a JAR file in the `target` directory.
## How It Works
1. Reads class files using ASM bytecode library
2. Examines bytecode instructions for basic metrics
3. Attempts to identify loops through backward jumps
4. Tries to detect simple recursive patterns
5. Generates basic suggestions based on findings
6. Formats results as requested
## Current Capabilities
- Basic allocation detection
- Simple method call tracking
- Boxing/unboxing identification
- Limited recursion detection
- Basic loop identification
- Multiple output formats
## Limitations
- Cannot estimate loop bounds
- No inter-method analysis
- Suggestions may not improve actual performance
- Very basic data flow analysis
- May miss complex patterns
## Potential Future Work
- Improved control flow analysis
- Better data flow tracking
- More accurate method call cost estimation
- Exception handler examination
- Memory access pattern detection
- Basic escape analysis
- Loop bound estimation where possible
- IDE integration
## License
Licensed under the BSD License. See the [LICENSE](LICENSE) file for details.
ASM is licensed under the BSD license. See the [ASM License](https://asm.ow2.io/license.html) for details.