diff --git a/perf/README.md b/perf/README.md
index 524f717545..dcc3ebd75d 100644
--- a/perf/README.md
+++ b/perf/README.md
@@ -49,4 +49,7 @@ Liberty benchmarks from https://github.com/OpenLiberty - including liberty-dt7-s
#### renaissance
Renaissance benchmarks from https://github.com/renaissance-benchmarks/renaissance - including renaissance-akka-uct, renaissance-als, renaissance-chi-square, renaissance-db-shootout, renaissance-dec-tree, renaissance-finagle-chirper, renaissance-finagle-http, renaissance-fj-kmeans, renaissance-future-genetic, renaissance-gauss-mix, renaissance-log-regression, renaissance-mnemonics, renaissance-movie-lens, renaissance-naive-bayes, renaissance-par-mnemonics, renaissance-philosophers and renaissance-scala-kmeans
+#### specjbb [licence required]
+SPECjbb 2015 benchmark from https://www.spec.org/jbb2015/
+
Additional benchmarks are being reviewed for addition and if you wish to include more, please comment in the open performance benchmarks [issue 1112](https://github.com/adoptium/aqa-tests/issues/1112).
diff --git a/perf/specjbb/README.md b/perf/specjbb/README.md
new file mode 100644
index 0000000000..4667d0735e
--- /dev/null
+++ b/perf/specjbb/README.md
@@ -0,0 +1,34 @@
+
+
+
+## SPECjbb 2015
+
+SPECjbb is a Java Client/Server performance testing benchmark.
+Please visit its product page for more information, including a user guide: https://www.spec.org/jbb2015/
+
+## Prerequisites
+Since SPECjbb requires a license to run, this aqa-test config requires that a licensed copy of the benchmark already exists on the machine that you are running on.
+
+## Setup
+
+Set the `SPECJBB_SRC` environment variable to the absolute path of your SPECjbb benchmark directory
+
+```sh
+export SPECJBB_SRC=/Users/aqa-tester/SPECjbb2015-1.03
+```
+
+## Run
+
+This test target is part of the `dev` level, and the test target name is, `SPECjbb2015-multijvm-simple`. You can use the following commands to run it:
+```
+make _SPECjbb2015-multijvm-simple
+```
\ No newline at end of file
diff --git a/perf/specjbb/build.xml b/perf/specjbb/build.xml
new file mode 100644
index 0000000000..cde6290d9b
--- /dev/null
+++ b/perf/specjbb/build.xml
@@ -0,0 +1,112 @@
+
+
+
+
+
+
+ Specjbb suite
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/perf/specjbb/playlist.xml b/perf/specjbb/playlist.xml
new file mode 100644
index 0000000000..1629feec65
--- /dev/null
+++ b/perf/specjbb/playlist.xml
@@ -0,0 +1,33 @@
+
+
+
+ run/testenv.mk
+
+
+
+
+ SPECjbb2015-multijvm-simple
+ . $(RUN_OPTIONS)/specjbb-multijvm-simple.sh; bash $(RUN_SCRIPTS)/run_multi.sh; $(TEST_STATUS)
+
+ dev
+
+
+ perf
+
+
+ microsoft
+
+
+
diff --git a/perf/specjbb/run/options/specjbb-multijvm-simple.sh b/perf/specjbb/run/options/specjbb-multijvm-simple.sh
new file mode 100644
index 0000000000..5f0743f1f0
--- /dev/null
+++ b/perf/specjbb/run/options/specjbb-multijvm-simple.sh
@@ -0,0 +1,27 @@
+#!/usr/bin/env bash
+
+# This will configure a basic run of SPECjbb in multi-jvm mode
+# Therefore, the topography of the run includes 1 group consisting of
+# 1 TransactionInjector and 1 Backend
+
+export GROUP_COUNT=1
+export TI_JVM_COUNT=1
+export NUM_OF_RUNS=1
+
+export SPECJBB_OPTS_C="-Dspecjbb.group.count=$GROUP_COUNT -Dspecjbb.txi.pergroup.count=$TI_JVM_COUNT"
+export SPECJBB_OPTS_TI=""
+export SPECJBB_OPTS_BE=""
+
+# The Controller, TransactionInjector, and Backend (aka System Under Test; SUT) are configured to meet the minimum
+# hardware requirements suggested by SPECjbb
+# (see the SPECjbb 2015 user guide, section 2.3 'Minimum hardware requirements', for more details)
+#
+# This implies that a machine should have atleast 8GB of memory and 8 CPU cores to run this test
+export JAVA_OPTS_C="-Xms2g -Xmx2g -Xmn1536m -XX:+UseParallelGC -XX:ParallelGCThreads=2 -XX:CICompilerCount=4"
+export JAVA_OPTS_TI="${JAVA_OPTS_C}"
+export JAVA_OPTS_BE="-Xms4g -Xmx4g -Xmn3g -XX:+UseParallelGC -XX:ParallelGCThreads=4 -XX:-UseAdaptiveSizePolicy"
+
+export MODE_ARGS_C=""
+export MODE_ARGS_TI=""
+export MODE_ARGS_BE=""
+
diff --git a/perf/specjbb/run/run_multi.sh b/perf/specjbb/run/run_multi.sh
new file mode 100755
index 0000000000..c89c34f222
--- /dev/null
+++ b/perf/specjbb/run/run_multi.sh
@@ -0,0 +1,79 @@
+#!/usr/bin/env bash
+
+
+echo "Backend opts: $JAVA_OPTS_BE"
+echo "Number of runs: ${NUM_OF_RUNS}"
+echo "Results dir: ${RESULTS_DIR}"
+
+for ((n=1; $n<=$NUM_OF_RUNS; n=$n+1)); do
+
+ # Create result directory
+ temp="${RESULTS_DIR%\"}"
+ temp="${temp#\"}"
+ timestamp=$(date '+%y-%m-%d_%H%M%S')
+ result="${temp}/${timestamp}"
+ mkdir -pv $result
+
+ # Copy current config to the result directory
+ cp -r $SPECJBB_CONFIG $result
+
+ cd $result
+
+ echo "Run $n: $timestamp"
+ echo "Launching SPECjbb2015 in MultiJVM mode..."
+ echo
+
+ JAVA="${JAVA%\"}"
+ JAVA="${JAVA#\"}"
+ echo "Start Controller JVM"
+ $JAVA $JAVA_OPTS_C $SPECJBB_OPTS_C -jar $SPECJBB_JAR -m MULTICONTROLLER $MODE_ARGS_C 2>controller.log 2>&1 | tee controller.out &
+
+ CTRL_PID=$!
+ echo "Controller PID = $CTRL_PID"
+
+ sleep 3
+
+ for ((gnum=1; $gnum<$GROUP_COUNT+1; gnum=$gnum+1)); do
+
+ GROUPID=Group$gnum
+ echo -e "\nStarting JVMs from $GROUPID:"
+
+ for ((jnum=1; $jnum<$TI_JVM_COUNT+1; jnum=$jnum+1)); do
+
+ JVMID=txiJVM$jnum
+ TI_NAME=$GROUPID.TxInjector.$JVMID
+
+ echo " Start $TI_NAME"
+ $JAVA $JAVA_OPTS_TI $SPECJBB_OPTS_TI -jar $SPECJBB_JAR -m TXINJECTOR -G=$GROUPID -J=$JVMID $MODE_ARGS_TI > $TI_NAME.log 2>&1 &
+ echo -e "\t$TI_NAME PID = $!"
+ sleep 1
+ done
+
+ JVMID=beJVM
+ BE_NAME=$GROUPID.Backend.$JVMID
+
+ # Add GC logging to the backend's JVM options
+ JAVA_OPTS_BE_WITH_GC_LOG="$JAVA_OPTS_BE -Xlog:gc*:file=${BE_NAME}_gc.log"
+ echo " Start $BE_NAME"
+ $JAVA $JAVA_OPTS_BE_WITH_GC_LOG $SPECJBB_OPTS_BE -jar $SPECJBB_JAR -m BACKEND -G=$GROUPID -J=$JVMID $MODE_ARGS_BE > $BE_NAME.log 2>&1 &
+ echo -e "\t$BE_NAME PID = $!"
+ sleep 1
+
+ done
+
+ echo
+ echo "SPECjbb2015 is running..."
+ echo "Please monitor $result/controller.out for progress"
+
+ wait $CTRL_PID
+ echo
+ echo "Controller has stopped"
+
+ echo "SPECjbb2015 has finished"
+ echo
+
+ cd $WORKING_DIR
+
+done
+
+exit 0
diff --git a/perf/specjbb/run/testenv.mk b/perf/specjbb/run/testenv.mk
new file mode 100644
index 0000000000..b6d290d763
--- /dev/null
+++ b/perf/specjbb/run/testenv.mk
@@ -0,0 +1,10 @@
+#!/usr/bin/env bash
+
+SPECJBB_BUILD=$(JVM_TEST_ROOT)/perf/specjbb
+
+export JAVA=$(JAVA_COMMAND)
+export SPECJBB_JAR=$(SPECJBB_BUILD)/suite/specjbb2015.jar
+export SPECJBB_CONFIG=$(SPECJBB_BUILD)/suite/config
+export RUN_SCRIPTS=$(SPECJBB_BUILD)/run
+export RUN_OPTIONS=$(SPECJBB_BUILD)/run/options
+export RESULTS_DIR=$(REPORTDIR)