March 24, 2018

Compare Multiple JDK Versions Startup Time

Script file: jdk-startup-time-test.py

#!/usr/bin/env python3
# Author: Zemian Deng 2018-03-24
#
# This script will test multiple JDK versions of startup time in your system
# We assume all JDK are installed in $HOME/apps directory with
# names matching in 'jdk_versions' list.
# Also we asusme you compiled `hello.java` with lowest JDK
# you have in the same directory as this script. This is
# used for testing the JVM loading time.
#
# NOTE: Running the script using Cygwin is a LOT slower than
# running it natively in cmd.exe shell! This is because
# time for Cygwin to start Java is very slow!
#

import time, subprocess, os
home_dir = os.path.expanduser('~')
app_dir = home_dir + '/apps'
jdk_versions = [
'jdk-6u29',
'jdk-7u80',
'jdk-8u161',
'jdk-9.0.4',
'jdk-10']
def test_jdk_startup(jdk):
        runs = []
        java_cmd = app_dir + '/' + jdk + '/bin/java'
        #print(f"Testing {java_cmd}")
        for _ in range(10):
                t1 = time.time()
                subprocess.check_output([java_cmd, 'hello'])
                t2 = time.time()
                runs.append(t2 - t1)
        return sum(runs) / len(runs)

# Now test it
for jdk in jdk_versions:
        t = test_jdk_startup(jdk)
        print(f"{jdk:20} avg start-time {t:.3}s")

Here is a sample of output:

python3 jdk-startup-time-test.py

jdk-6u29             avg start-time 0.301s
jdk-7u80             avg start-time 0.122s
jdk-8u161            avg start-time 0.178s
jdk-9.0.4            avg start-time 0.359s
jdk-10               avg start-time 0.323s