A Performance Analysis of Modern Garbage Collectors in the JDK 20 Environment
Run GCs
Help
--b_suite
: Evaluation benchmark suite (dacapo
,renaissance
)--benchmark
: Evaluation benchmark dataset--max_heap
: Maximum heap size available (in power of 2 and greater than 512 MB)--varying_heap
: Varying heap size
Example
- For
xalan
benchmark dataset fromdacapo
benchmark suite withmax_heap = 2048
invarying_heap
environment the GC Logs can generate using -python performance_analysis.py --b_suite dacapo --benchmark xalan --max_heap 2048 --varying_heap True
Dacapo Benchmark Suite
The DaCapo-9.12-bach benchmark suite, released in 2009, consists of the following benchmarks:
avrora
- simulates a number of programs run on a grid of AVR microcontrollersbatik
- produces a number of Scalable Vector Graphics (SVG) images based on the unit tests in Apache Batikeclipse
- executes some of the (non-gui) jdt performance tests for the Eclipse IDEfop
- takes an XSL-FO file, parses it and formats it, generating a PDF file.h2
- executes a JDBCbench-like in-memory benchmark, executing a number of transactions against a model of a banking application, replacing the hsqldb benchmarkjython
- inteprets a the pybench Python benchmarkluindex
- Uses lucene to indexes a set of documents; the works of Shakespeare and the King James Biblelusearch
- Uses lucene to do a text search of keywords over a corpus of data comprising the works of Shakespeare and the King James Biblepmd
- analyzes a set of Java classes for a range of source code problemssunflow
- renders a set of images using ray tracingtomcat
- runs a set of queries against a Tomcat server retrieving and verifying the resulting webpagestradebeans
- runs the daytrader benchmark via a Jave Beans to a GERONIMO backend with an in memory h2 as the underlying databasetradesoap
- runs the daytrader benchmark via a SOAP to a GERONIMO backend with in memory h2 as the underlying databasexalan
- transforms XML documents into HTML
Renaissance Benchmark Suite
The following is the complete list of benchmarks, separated into groups.
apache-spark:
als
- Runs the ALS algorithm from the Spark ML library.chi-square
- Runs the chi-square test from Spark MLlib.dec-tree
- Runs the Random Forest algorithm from the Spark ML library.gauss-mix
- Computes a Gaussian mixture model using expectation-maximization.log-regression
- Runs the Logistic Regression algorithm from the Spark ML library.movie-lens
- Recommends movies using the ALS algorithm.naive-bayes
- Runs the multinomial Naive Bayes algorithm from the Spark ML library.page-rank
- Runs a number of PageRank iterations, using RDDs.
concurrency:
akka-uct
- Runs the Unbalanced Cobwebbed Tree actor workload in Akka.fj-kmeans
- Runs the k-means algorithm using the fork/join framework.reactors
- Runs benchmarks inspired by the Savina microbenchmark workloads in a sequence on Reactors.IO.
database:
db-shootout
- Executes a shootout test using several in-memory databases.neo4j-analytics
- Executes Neo4J graph queries against a movie database.
functional:
future-genetic
- Runs a genetic algorithm using the Jenetics library and futures.mnemonics
- Solves the phone mnemonics problem using JDK streams.par-mnemonics
- Solves the phone mnemonics problem using parallel JDK streams.rx-scrabble
- Solves the Scrabble puzzle using the Rx streams.scrabble
- Solves the Scrabble puzzle using JDK Streams.
scala:
dotty
- Runs the Dotty compiler on a set of source code files.philosophers
- Solves a variant of the dining philosophers problem using ScalaSTM.scala-doku
- Solves Sudoku Puzzles using Scala collections.scala-kmeans
- Runs the K-Means algorithm using Scala collections.scala-stm-bench7
- Runs the stmbench7 benchmark using ScalaSTM.
web:
finagle-chirper
- Simulates a microblogging service using Twitter Finagle.finagle-http
- Sends many small Finagle HTTP requests to a Finagle HTTP server and awaits response.
Performance Analysis
We use GCeasy - A Universal GC Log Analyzer to analyze the log files found after running GCs. We use both Fixed Heap and Varying Heap environments for run the garbage collectors. The results found using GC analyzers are processed into these CSV files. But these, CSV files not includes all of our experimental results, the works are still ongoing for the processing of GC logs, the working results are given in this spreed sheet. To draw the graphs for the purpose of analysis the results we use following python script -
python graph_drawing.py --csv [csv file name] --gc [column name that includes list of GCs] --benchmark [column name that includes list of benchmark]
The associated graphs and figures are given in the Figures folder, and the report of this project work is given here.