From 0277c3540e53c1399cf7d8d53ce7c9c2241b2c7f Mon Sep 17 00:00:00 2001 From: bern-SOPTIM Date: Mon, 15 Dec 2025 17:06:56 +0100 Subject: [PATCH] GH-3643: jena-benchmarks: Drop older shaded Jena baselines; keep only latest Jena 5 baseline - Removed jena-benchmarks from parent POM - Updated benchmarks to use Jena version 5.6.0 and remove deprecated references. - Removed older shaded versions of Jena: 4.8.0, 5.1.0 and 5.5.0 - fixed code analysis warnings - fixed old *480 names to *560 - now clearly use GraphMemValue vs GraphMemFast, discarding old graph names in test parametes - updated org.apache.jena.mem.graph.helper.GraphTripleNodeHelper560 to support all graph implementations - fixed scale in memory consumption rounding - de-duplicated JHMDefaultOptions.java moved it to jena.jmh an renamed it to JmhDefaultOptions.java --- jena-benchmarks/jena-benchmarks-jmh/pom.xml | 18 +-- .../java/org/apache/jena/JenaVersion.java | 2 +- .../jena/atlas/lib/cache/TestCaches.java | 118 +++++++-------- .../query/BenchmarkSpatialQueries.java | 34 ++--- .../geosparql/query/SpatialQueryTask.java | 6 +- ...yTask550.java => SpatialQueryTask560.java} | 52 +++---- .../query/SpatialQueryTaskCurrent.java | 7 +- .../spatial/index/BenchmarkSpatialIndex.java | 19 +-- ...tialIndex510.java => SpatialIndex560.java} | 57 ++++---- .../spatial/index/SpatialIndexCurrent.java | 13 +- .../spatial/index/SpatialIndexLifeCycle.java | 4 +- .../JmhDefaultOptions.java} | 12 +- .../apache/jena/mem/graph/TestGraphAdd.java | 40 ++--- .../mem/graph/TestGraphContainsAnything.java | 102 ++++++------- .../mem/graph/TestGraphContainsTriple.java | 47 +++--- .../apache/jena/mem/graph/TestGraphCopy.java | 19 +-- .../jena/mem/graph/TestGraphDelete.java | 53 +++---- .../TestGraphFindAllWithForEachRemaining.java | 39 ++--- .../TestGraphFindAllWithHasNextAndNext.java | 35 +++-- .../graph/TestGraphFindByMatchAndCount.java | 98 ++++++------- .../TestGraphFindByMatchAndGetFirst.java | 96 ++++++------ .../mem/graph/TestGraphInitializeIndex.java | 11 +- .../mem/graph/TestGraphMemoryConsumption.java | 37 ++--- .../jena/mem/graph/TestGraphStreamAll.java | 45 +++--- .../graph/TestGraphStreamByMatchAndCount.java | 96 ++++++------ .../TestGraphStreamByMatchAndFindAny.java | 96 ++++++------ .../apache/jena/mem/graph/helper/Context.java | 18 ++- ...480.java => GraphTripleNodeHelper560.java} | 37 +++-- .../helper/GraphTripleNodeHelperCurrent.java | 36 ++--- .../mem/graph/helper/JMHDefaultOptions.java | 59 -------- .../jena/mem/graph/helper/Releases.java | 4 +- .../jena/mem/map/node/HashCommonNodeMap.java | 2 +- .../apache/jena/mem/map/node/TestMapAdd.java | 12 +- .../jena/mem/map/node/TestMapContains.java | 12 +- .../jena/mem/set/triple/TestSetAdd.java | 15 +- .../jena/mem/set/triple/TestSetContains.java | 14 +- .../jena/mem/set/triple/TestSetIterate.java | 16 +- .../set/triple/TestSetMemoryConsumption.java | 23 ++- .../jena/mem/set/triple/TestSetRemove.java | 14 +- .../jena/mem/set/triple/TestSetStreamAll.java | 18 +-- .../jena/mem/set/triple/TestSetUpdate.java | 21 ++- ...arseArraySpliteratorsForeachRemaining.java | 65 +++------ ...SparseArraySpliteratorsStreamParallel.java | 66 +++------ ...TestSparseArraySpliteratorsTryAdvance.java | 66 +++------ .../jena/riot/lang/rdfxml/TestXMLParser.java | 67 +++------ .../benchmark/QueryTaskBuilderRegistry.java | 6 +- .../engine/benchmark/QueryTaskReader.java | 13 +- .../engine/benchmark/QueryTaskResult.java | 32 +--- .../engine/benchmark/QueryTaskTestUtils.java | 4 +- .../sparql/engine/join/BenchmarkHashJoin.java | 15 +- .../{QueryTask480.java => QueryTask560.java} | 28 ++-- ...ilder480.java => QueryTaskBuilder560.java} | 4 +- .../engine/join/TestBenchmarkHashJoin.java | 3 +- .../apache/jena/sparql/expr/TestCoalesce.java | 37 +++-- .../jena-benchmarks-shadedJena480/pom.xml | 131 ----------------- .../jena-benchmarks-shadedJena510/pom.xml | 137 ------------------ .../pom.xml | 24 +-- jena-benchmarks/pom.xml | 12 +- pom.xml | 7 - 59 files changed, 824 insertions(+), 1350 deletions(-) rename jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/geosparql/query/{SpatialQueryTask550.java => SpatialQueryTask560.java} (55%) rename jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/geosparql/spatial/index/{SpatialIndex510.java => SpatialIndex560.java} (52%) rename jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/{mem/helper/JMHDefaultOptions.java => jmh/JmhDefaultOptions.java} (97%) rename jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/graph/helper/{GraphTripleNodeHelper480.java => GraphTripleNodeHelper560.java} (62%) delete mode 100644 jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/graph/helper/JMHDefaultOptions.java rename jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/sparql/engine/join/{QueryTask480.java => QueryTask560.java} (77%) rename jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/sparql/engine/join/{QueryTaskBuilder480.java => QueryTaskBuilder560.java} (92%) delete mode 100644 jena-benchmarks/jena-benchmarks-shadedJena480/pom.xml delete mode 100644 jena-benchmarks/jena-benchmarks-shadedJena510/pom.xml rename jena-benchmarks/{jena-benchmarks-shadedJena550 => jena-benchmarks-shadedJena560}/pom.xml (89%) diff --git a/jena-benchmarks/jena-benchmarks-jmh/pom.xml b/jena-benchmarks/jena-benchmarks-jmh/pom.xml index 8a646cd9861..2f2c6473434 100644 --- a/jena-benchmarks/jena-benchmarks-jmh/pom.xml +++ b/jena-benchmarks/jena-benchmarks-jmh/pom.xml @@ -16,7 +16,7 @@ KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. - + SPDX-License-Identifier: Apache-2.0 --> @@ -92,21 +92,7 @@ org.apache.jena - jena-benchmarks-shadedJena480 - 6.1.0-SNAPSHOT - test - - - - org.apache.jena - jena-benchmarks-shadedJena510 - 6.1.0-SNAPSHOT - test - - - - org.apache.jena - jena-benchmarks-shadedJena550 + jena-benchmarks-shadedJena560 6.1.0-SNAPSHOT test diff --git a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/JenaVersion.java b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/JenaVersion.java index 616c65de4eb..5c4e3c6d3ab 100644 --- a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/JenaVersion.java +++ b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/JenaVersion.java @@ -23,7 +23,7 @@ public enum JenaVersion { CURRENT(JenaVersion.class.getPackage().getImplementationVersion()), - JENA_4_8_0("4.8.0"); + JENA_5_6_0("5.6.0"); private final String version; diff --git a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/atlas/lib/cache/TestCaches.java b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/atlas/lib/cache/TestCaches.java index f0dac395b5a..43a637ecd55 100644 --- a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/atlas/lib/cache/TestCaches.java +++ b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/atlas/lib/cache/TestCaches.java @@ -25,7 +25,7 @@ import org.apache.jena.atlas.lib.CacheFactory; import org.apache.jena.graph.Graph; import org.apache.jena.graph.Node; -import org.apache.jena.mem.graph.helper.JMHDefaultOptions; +import org.apache.jena.jmh.JmhDefaultOptions; import org.apache.jena.riot.RDFDataMgr; import org.apache.jena.sparql.graph.GraphFactory; import org.junit.Assert; @@ -51,8 +51,8 @@ public class TestCaches { @Param({ "Caffeine", "Simple", - "Jena510.Caffeine", - "Jena510.Simple" + "Jena560.Caffeine", + "Jena560.Simple" }) public String param1_Cache; @@ -60,30 +60,27 @@ public class TestCaches { private Cache cache; - private static int calculateRealCacheSize(int minCacheSize) { + private static int calculateRealCacheSize() { // the cache size is a power of 2 --> that is a requirement for the CacheSimpleFast // to start with fair conditions for the caches, we use the same size for all caches - var cacheSize = Integer.highestOneBit(minCacheSize); - if (cacheSize < minCacheSize) { + var cacheSize = Integer.highestOneBit(TestCaches.DEFAULT_CACHE_SIZE); + if (cacheSize < TestCaches.DEFAULT_CACHE_SIZE) { cacheSize <<= 1; } return cacheSize; } private static Cache createCache(String cacheName) { - var cacheSize = calculateRealCacheSize(DEFAULT_CACHE_SIZE); - switch (cacheName) { - case "Caffeine": - return CacheFactory.createCache(cacheSize); - case "Simple": - return CacheFactory.createSimpleCache(cacheSize); - case "Jena510.Caffeine": - return new CacheFromJena510Wrapped<>(org.apache.shadedJena510.atlas.lib.CacheFactory.createCache(cacheSize)); - case "Jena510.Simple": - return new CacheFromJena510Wrapped<>(org.apache.shadedJena510.atlas.lib.CacheFactory.createSimpleCache(cacheSize)); - default: - throw new IllegalArgumentException("Unknown Cache: " + cacheName); - } + var cacheSize = calculateRealCacheSize(); + return switch (cacheName) { + case "Caffeine" -> CacheFactory.createCache(cacheSize); + case "Simple" -> CacheFactory.createSimpleCache(cacheSize); + case "Jena560.Caffeine" -> + new CacheFromJena560Wrapped<>(org.apache.shadedJena560.atlas.lib.CacheFactory.createCache(cacheSize)); + case "Jena560.Simple" -> + new CacheFromJena560Wrapped<>(org.apache.shadedJena560.atlas.lib.CacheFactory.createSimpleCache(cacheSize)); + default -> throw new IllegalArgumentException("Unknown Cache: " + cacheName); + }; } @Benchmark @@ -175,63 +172,58 @@ private static void fillCacheByPut(Cache cacheToFill, Graph g) { }); } - private static class CacheFromJena510Wrapped implements Cache { - - private final org.apache.shadedJena510.atlas.lib.Cache wrappedCache; - - public CacheFromJena510Wrapped(org.apache.shadedJena510.atlas.lib.Cache cacheFromJena510) { - this.wrappedCache = cacheFromJena510; - } + private record CacheFromJena560Wrapped( + org.apache.shadedJena560.atlas.lib.Cache wrappedCache) implements Cache { @Override - public boolean containsKey(K k) { - return wrappedCache.containsKey(k); - } + public boolean containsKey(K k) { + return wrappedCache.containsKey(k); + } - @Override - public V getIfPresent(K k) { - return wrappedCache.getIfPresent(k); - } + @Override + public V getIfPresent(K k) { + return wrappedCache.getIfPresent(k); + } - @Override - public V get(K k, Function callable) { - return wrappedCache.get(k, callable); - } + @Override + public V get(K k, Function callable) { + return wrappedCache.get(k, callable); + } - @Override - public void put(K k, V thing) { - wrappedCache.put(k, thing); - } + @Override + public void put(K k, V thing) { + wrappedCache.put(k, thing); + } - @Override - public void remove(K k) { - wrappedCache.remove(k); - } + @Override + public void remove(K k) { + wrappedCache.remove(k); + } - @Override - public Iterator keys() { - return wrappedCache.keys(); - } + @Override + public Iterator keys() { + return wrappedCache.keys(); + } - @Override - public boolean isEmpty() { - return wrappedCache.isEmpty(); - } + @Override + public boolean isEmpty() { + return wrappedCache.isEmpty(); + } - @Override - public void clear() { - wrappedCache.clear(); - } + @Override + public void clear() { + wrappedCache.clear(); + } - @Override - public long size() { - return wrappedCache.size(); + @Override + public long size() { + return wrappedCache.size(); + } } - } @Setup(Level.Trial) - public void setupTrial() throws Exception { + public void setupTrial() { this.graph = GraphFactory.createGraphMem(); RDFDataMgr.read(this.graph, this.param0_GraphUri); } @@ -244,7 +236,7 @@ public void setupIteration() { @Test public void benchmark() throws Exception { - var opt = JMHDefaultOptions.getDefaults(this.getClass()) + var opt = JmhDefaultOptions.getDefaults(this.getClass()) .build(); var results = new Runner(opt).run(); Assert.assertNotNull(results); diff --git a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/geosparql/query/BenchmarkSpatialQueries.java b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/geosparql/query/BenchmarkSpatialQueries.java index c7d3ffe0571..174810d22fd 100644 --- a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/geosparql/query/BenchmarkSpatialQueries.java +++ b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/geosparql/query/BenchmarkSpatialQueries.java @@ -46,14 +46,7 @@ import org.locationtech.jts.geom.Envelope; import org.locationtech.jts.geom.Geometry; import org.locationtech.jts.geom.util.AffineTransformation; -import org.openjdk.jmh.annotations.Benchmark; -import org.openjdk.jmh.annotations.Level; -import org.openjdk.jmh.annotations.Mode; -import org.openjdk.jmh.annotations.Param; -import org.openjdk.jmh.annotations.Scope; -import org.openjdk.jmh.annotations.Setup; -import org.openjdk.jmh.annotations.State; -import org.openjdk.jmh.annotations.TearDown; +import org.openjdk.jmh.annotations.*; import org.openjdk.jmh.results.format.ResultFormatType; import org.openjdk.jmh.runner.Runner; import org.openjdk.jmh.runner.RunnerException; @@ -68,10 +61,10 @@ @State(Scope.Benchmark) public class BenchmarkSpatialQueries { - private static Map idToQuery = new LinkedHashMap<>(); + private static final Map idToQuery = new LinkedHashMap<>(); - private Node featureNode = NodeFactory.createURI("urn:test:geosparql:feature1"); - private Node geometryNode = NodeFactory.createURI("urn:test:geosparql:geometry1"); + private final Node featureNode = NodeFactory.createURI("urn:test:geosparql:feature1"); + private final Node geometryNode = NodeFactory.createURI("urn:test:geosparql:geometry1"); private static final String q1 = """ PREFIX geo: @@ -126,23 +119,20 @@ public class BenchmarkSpatialQueries { @Param({ "current", - "5.5.0" + "5.6.0" }) public String p5_jenaVersion; private SpatialQueryTask task; @Benchmark - public void run() throws Exception { + public void run() { long count = task.exec(); - if (true) { - System.out.println("Counted: " + count); - } + System.out.println("Counted: " + count); } private static GeometryWrapper toWrapperWkt(Geometry geometry) { - GeometryWrapper result = new GeometryWrapper(geometry, Geo.WKT); - return result; + return new GeometryWrapper(geometry, Geo.WKT); } @Setup(Level.Trial) @@ -186,12 +176,12 @@ public void setupTrial() throws Exception { try (ByteArrayOutputStream out = new ByteArrayOutputStream()) { RDFDataMgr.write(out, graph, fmt); out.flush(); - data = new String(out.toByteArray(), StandardCharsets.UTF_8); + data = out.toString(StandardCharsets.UTF_8); } task = switch (p5_jenaVersion) { case "current" -> new SpatialQueryTaskCurrent(); - case "5.5.0" -> new SpatialQueryTask550(); + case "5.6.0" -> new SpatialQueryTask560(); default -> throw new RuntimeException("No task registered for this jena version:" + p5_jenaVersion); }; @@ -211,10 +201,6 @@ public void setupTrial() throws Exception { task.setQuery(queryString); } - @TearDown(Level.Trial) - public void tearDownTrial() throws Exception { - } - public static ChainedOptionsBuilder getDefaults(Class c) { return new OptionsBuilder() // Specify which benchmarks to run. diff --git a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/geosparql/query/SpatialQueryTask.java b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/geosparql/query/SpatialQueryTask.java index 2246f0e814a..11282f340c1 100644 --- a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/geosparql/query/SpatialQueryTask.java +++ b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/geosparql/query/SpatialQueryTask.java @@ -22,9 +22,9 @@ package org.apache.jena.geosparql.query; public interface SpatialQueryTask { - void setData(String trigString) throws Exception; - void setInferenceMode(boolean enableInferences, boolean materialize) throws Exception; - void setQuery(String queryString) throws Exception; + void setData(String trigString); + void setInferenceMode(boolean enableInferences, boolean materialize); + void setQuery(String queryString); void setIndex(boolean isEnabled); long exec(); } diff --git a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/geosparql/query/SpatialQueryTask550.java b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/geosparql/query/SpatialQueryTask560.java similarity index 55% rename from jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/geosparql/query/SpatialQueryTask550.java rename to jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/geosparql/query/SpatialQueryTask560.java index f0b1889ba61..fe3c7e40086 100644 --- a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/geosparql/query/SpatialQueryTask550.java +++ b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/geosparql/query/SpatialQueryTask560.java @@ -21,35 +21,32 @@ package org.apache.jena.geosparql.query; -import java.util.stream.Stream; +import org.apache.jena.geosparql.configuration.GeoSPARQLOperations; +import org.apache.jena.geosparql.spatial.SpatialIndexException; +import org.apache.jena.geosparql.spatial.index.v2.SpatialIndexLib; +import org.apache.jena.graph.Graph; +import org.apache.jena.rdfs.RDFSFactory; +import org.apache.jena.riot.Lang; +import org.apache.jena.riot.RDFParser; +import org.apache.jena.sparql.core.DatasetGraph; +import org.apache.jena.sparql.core.DatasetGraphFactory; +import org.apache.jena.sparql.exec.QueryExec; +import org.apache.jena.sparql.exec.RowSetOps; -import org.apache.shadedJena550.geosparql.configuration.GeoSPARQLOperations; -import org.apache.shadedJena550.geosparql.spatial.SpatialIndexException; -import org.apache.shadedJena550.geosparql.spatial.index.v2.SpatialIndexLib; -import org.apache.shadedJena550.graph.Graph; -import org.apache.shadedJena550.rdfs.RDFSFactory; -import org.apache.shadedJena550.riot.Lang; -import org.apache.shadedJena550.riot.RDFParser; -import org.apache.shadedJena550.sparql.core.DatasetGraph; -import org.apache.shadedJena550.sparql.core.DatasetGraphFactory; -import org.apache.shadedJena550.sparql.core.Quad; -import org.apache.shadedJena550.sparql.exec.QueryExec; -import org.apache.shadedJena550.sparql.exec.RowSetOps; - -public class SpatialQueryTask550 - implements SpatialQueryTask +public class SpatialQueryTask560 + implements SpatialQueryTask { - private DatasetGraph baseDsg = null; - private DatasetGraph effectiveDsg = null; + private org.apache.jena.sparql.core.DatasetGraph baseDsg = null; + private org.apache.jena.sparql.core.DatasetGraph effectiveDsg = null; private String query; @Override - public void setData(String trigString) throws Exception { - baseDsg = RDFParser.create().fromString(trigString).lang(Lang.TRIG).toDatasetGraph(); + public void setData(String ttlString) { + baseDsg = RDFParser.create().fromString(ttlString).lang(Lang.TRIG).toDatasetGraph(); } @Override - public void setQuery(String queryString) throws Exception { + public void setQuery(String queryString) { this.query = queryString; } @@ -60,21 +57,13 @@ public void setInferenceMode(boolean enableInferences, boolean materialize) { DatasetGraph virtualDsg = RDFSFactory.datasetRDFS(baseDsg, vocab); if (materialize) { effectiveDsg = DatasetGraphFactory.create(); - - // Bugged in 5.5.0 because find() is not overridden to yield inferences: - // effectiveDsg.addAll(virtualDsg); - - try (Stream stream = virtualDsg.stream(null, null, null, null)) { - stream.forEach(effectiveDsg::add); - } + effectiveDsg.addAll(virtualDsg); } else { effectiveDsg = virtualDsg; } } else { effectiveDsg = baseDsg; } - - // RDFDataMgr.write(System.err, effectiveDsg, RDFFormat.TRIG_PRETTY); } @Override @@ -91,8 +80,7 @@ public void setIndex(boolean isEnabled) { @Override public long exec() { try (QueryExec qe = QueryExec.dataset(effectiveDsg).query(query).build()) { - long count = RowSetOps.count(qe.select()); - return count; + return RowSetOps.count(qe.select()); } } } diff --git a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/geosparql/query/SpatialQueryTaskCurrent.java b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/geosparql/query/SpatialQueryTaskCurrent.java index 28a9c14bb3e..024bc1767ce 100644 --- a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/geosparql/query/SpatialQueryTaskCurrent.java +++ b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/geosparql/query/SpatialQueryTaskCurrent.java @@ -41,12 +41,12 @@ public class SpatialQueryTaskCurrent private String query; @Override - public void setData(String ttlString) throws Exception { + public void setData(String ttlString) { baseDsg = RDFParser.create().fromString(ttlString).lang(Lang.TRIG).toDatasetGraph(); } @Override - public void setQuery(String queryString) throws Exception { + public void setQuery(String queryString) { this.query = queryString; } @@ -80,8 +80,7 @@ public void setIndex(boolean isEnabled) { @Override public long exec() { try (QueryExec qe = QueryExec.dataset(effectiveDsg).query(query).build()) { - long count = RowSetOps.count(qe.select()); - return count; + return RowSetOps.count(qe.select()); } } } diff --git a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/geosparql/spatial/index/BenchmarkSpatialIndex.java b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/geosparql/spatial/index/BenchmarkSpatialIndex.java index 1961a7ff140..ebd384a724a 100644 --- a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/geosparql/spatial/index/BenchmarkSpatialIndex.java +++ b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/geosparql/spatial/index/BenchmarkSpatialIndex.java @@ -35,14 +35,7 @@ import org.apache.jena.riot.RDFFormat; import org.apache.jena.sparql.graph.GraphFactory; import org.locationtech.jts.geom.Envelope; -import org.openjdk.jmh.annotations.Benchmark; -import org.openjdk.jmh.annotations.Level; -import org.openjdk.jmh.annotations.Mode; -import org.openjdk.jmh.annotations.Param; -import org.openjdk.jmh.annotations.Scope; -import org.openjdk.jmh.annotations.Setup; -import org.openjdk.jmh.annotations.State; -import org.openjdk.jmh.annotations.TearDown; +import org.openjdk.jmh.annotations.*; import org.openjdk.jmh.results.format.ResultFormatType; import org.openjdk.jmh.runner.Runner; import org.openjdk.jmh.runner.RunnerException; @@ -59,7 +52,7 @@ public class BenchmarkSpatialIndex { @Param({ "current", - "5.1.0" + "5.6.0" }) public String param0_jenaVersion; @@ -95,7 +88,7 @@ public void setupTrial() throws Exception { try (ByteArrayOutputStream out = new ByteArrayOutputStream()) { RDFDataMgr.write(out, graph, fmt); out.flush(); - data = new String(out.toByteArray(), StandardCharsets.UTF_8); + data = out.toString(StandardCharsets.UTF_8); } String srs = param2_srs.isEmpty() ? null : param2_srs; @@ -104,11 +97,11 @@ public void setupTrial() throws Exception { case "current": spatialIndexLifeCycle = SpatialIndexCurrent.setup(data, envelope, srs, false); break; - case "5.1.0": - spatialIndexLifeCycle = SpatialIndex510.setup(data, envelope, srs, false); + case "5.6.0": + spatialIndexLifeCycle = SpatialIndex560.setup(data, envelope, srs, false); break; default: - throw new RuntimeException("No task registered for this jena version:" + param0_jenaVersion); + throw new RuntimeException("No task registered for this Jena version:" + param0_jenaVersion); } spatialIndexLifeCycle.init(); diff --git a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/geosparql/spatial/index/SpatialIndex510.java b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/geosparql/spatial/index/SpatialIndex560.java similarity index 52% rename from jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/geosparql/spatial/index/SpatialIndex510.java rename to jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/geosparql/spatial/index/SpatialIndex560.java index 2253aa6c5c5..6bbdcaee96f 100644 --- a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/geosparql/spatial/index/SpatialIndex510.java +++ b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/geosparql/spatial/index/SpatialIndex560.java @@ -23,64 +23,65 @@ import java.nio.file.Files; import java.nio.file.Path; -import org.apache.shadedJena510.geosparql.configuration.GeoSPARQLOperations; -import org.apache.shadedJena510.geosparql.spatial.SpatialIndex; -import org.apache.shadedJena510.geosparql.spatial.SpatialIndexException; -import org.apache.shadedJena510.query.Dataset; -import org.apache.shadedJena510.riot.Lang; -import org.apache.shadedJena510.riot.RDFParserBuilder; +import org.apache.jena.geosparql.configuration.GeoSPARQLOperations; +import org.apache.jena.geosparql.spatial.index.v2.SpatialIndexIoKryo; +import org.apache.jena.geosparql.spatial.index.v2.SpatialIndexLib; +import org.apache.jena.geosparql.spatial.index.v2.SpatialIndexPerGraph; +import org.apache.jena.query.DatasetFactory; +import org.apache.jena.riot.Lang; +import org.apache.jena.riot.RDFParserBuilder; +import org.apache.jena.sparql.core.DatasetGraph; import org.junit.Assert; import org.locationtech.jts.geom.Envelope; -public class SpatialIndex510 - implements SpatialIndexLifeCycle +public class SpatialIndex560 + implements SpatialIndexLifeCycle { - protected Dataset ds; - protected Envelope envelope; - protected String srs; - protected boolean validate; + protected final DatasetGraph dsg; + protected final Envelope envelope; + protected final String srs; + protected final boolean validate; - public SpatialIndex510(Dataset ds, Envelope envelope, String srs, boolean validate) { + public SpatialIndex560(DatasetGraph dsg, Envelope envelope, String srs, boolean validate) { super(); - this.ds = ds; + this.dsg = dsg; this.envelope = envelope; this.validate = validate; this.srs = srs; } - public static SpatialIndex510 setup(String data, Envelope envelope, String srs, boolean validate) throws SpatialIndexException { - Dataset ds = RDFParserBuilder.create().fromString(data).lang(Lang.TURTLE).toDataset(); - return new SpatialIndex510(ds, envelope, srs, validate); + public static SpatialIndexCurrent setup(String data, Envelope envelope, String srs, boolean validate) { + DatasetGraph dsg = RDFParserBuilder.create().fromString(data).lang(Lang.TURTLE).toDatasetGraph(); + return new SpatialIndexCurrent(dsg, envelope, srs, validate); } protected Path indexFile; protected String finalSrs = null; - protected SpatialIndex indexA; - protected SpatialIndex indexB; + protected SpatialIndexPerGraph indexA; + protected SpatialIndexPerGraph indexB; @Override public void init() { - ds.getContext().remove(SpatialIndex.SPATIAL_INDEX_SYMBOL); + SpatialIndexLib.setSpatialIndex(dsg.getContext(), null); } @Override public void findSrs() { finalSrs = srs == null - ? GeoSPARQLOperations.findModeSRS(ds) - : srs; + ? GeoSPARQLOperations.findModeSRS(DatasetFactory.wrap(dsg)) + : srs; } @Override public void build() throws Exception { indexFile = Files.createTempFile("jena-", ".spatial-index"); - Files.deleteIfExists(indexFile); // buildSpatialIndex in v1 will attempt to load the file first - - indexA = SpatialIndex.buildSpatialIndex(ds, finalSrs, indexFile.toFile()); + indexA = SpatialIndexLib.buildSpatialIndex(dsg, finalSrs); + SpatialIndexIoKryo.save(indexFile, indexA); } @Override public void load() throws Exception { - indexB = SpatialIndex.load(indexFile.toFile()); + indexB = SpatialIndexIoKryo.load(indexFile); } @Override @@ -88,8 +89,8 @@ public void close() throws Exception { Files.deleteIfExists(indexFile); if (validate) { - int itemCountA = indexA.query(envelope).size(); - int itemCountB = indexB.query(envelope).size(); + int itemCountA = indexA.query(envelope, null).size(); + int itemCountB = indexB.query(envelope, null).size(); // Assert.assertTrue(itemCountA > 0); Assert.assertEquals(itemCountA, itemCountB); } diff --git a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/geosparql/spatial/index/SpatialIndexCurrent.java b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/geosparql/spatial/index/SpatialIndexCurrent.java index 55fac8d44db..7412a871896 100644 --- a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/geosparql/spatial/index/SpatialIndexCurrent.java +++ b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/geosparql/spatial/index/SpatialIndexCurrent.java @@ -24,10 +24,9 @@ import java.nio.file.Path; import org.apache.jena.geosparql.configuration.GeoSPARQLOperations; -import org.apache.jena.geosparql.spatial.SpatialIndexException; import org.apache.jena.geosparql.spatial.index.v2.SpatialIndexIoKryo; -import org.apache.jena.geosparql.spatial.index.v2.SpatialIndexPerGraph; import org.apache.jena.geosparql.spatial.index.v2.SpatialIndexLib; +import org.apache.jena.geosparql.spatial.index.v2.SpatialIndexPerGraph; import org.apache.jena.query.DatasetFactory; import org.apache.jena.riot.Lang; import org.apache.jena.riot.RDFParserBuilder; @@ -38,10 +37,10 @@ public class SpatialIndexCurrent implements SpatialIndexLifeCycle { - protected DatasetGraph dsg; - protected Envelope envelope; - protected String srs; - protected boolean validate; + protected final DatasetGraph dsg; + protected final Envelope envelope; + protected final String srs; + protected final boolean validate; public SpatialIndexCurrent(DatasetGraph dsg, Envelope envelope, String srs, boolean validate) { super(); @@ -51,7 +50,7 @@ public SpatialIndexCurrent(DatasetGraph dsg, Envelope envelope, String srs, bool this.srs = srs; } - public static SpatialIndexCurrent setup(String data, Envelope envelope, String srs, boolean validate) throws SpatialIndexException { + public static SpatialIndexCurrent setup(String data, Envelope envelope, String srs, boolean validate) { DatasetGraph dsg = RDFParserBuilder.create().fromString(data).lang(Lang.TURTLE).toDatasetGraph(); return new SpatialIndexCurrent(dsg, envelope, srs, validate); } diff --git a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/geosparql/spatial/index/SpatialIndexLifeCycle.java b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/geosparql/spatial/index/SpatialIndexLifeCycle.java index 41edb5252c9..2fa97fde70a 100644 --- a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/geosparql/spatial/index/SpatialIndexLifeCycle.java +++ b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/geosparql/spatial/index/SpatialIndexLifeCycle.java @@ -21,8 +21,8 @@ package org.apache.jena.geosparql.spatial.index; public interface SpatialIndexLifeCycle { - void init() throws Exception; - void findSrs() throws Exception; + void init(); + void findSrs(); void build() throws Exception; void load() throws Exception; void close() throws Exception; diff --git a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/helper/JMHDefaultOptions.java b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/jmh/JmhDefaultOptions.java similarity index 97% rename from jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/helper/JMHDefaultOptions.java rename to jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/jmh/JmhDefaultOptions.java index 6ab6a62a24a..fe97134a847 100644 --- a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/helper/JMHDefaultOptions.java +++ b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/jmh/JmhDefaultOptions.java @@ -18,7 +18,11 @@ * * SPDX-License-Identifier: Apache-2.0 */ -package org.apache.jena.mem.helper; +package org.apache.jena.jmh; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.concurrent.TimeUnit; import org.openjdk.jmh.annotations.Mode; import org.openjdk.jmh.results.format.ResultFormatType; @@ -26,14 +30,10 @@ import org.openjdk.jmh.runner.options.OptionsBuilder; import org.openjdk.jmh.runner.options.TimeValue; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.concurrent.TimeUnit; - /** * Default options for JMH benchmarks for graphs. */ -public class JMHDefaultOptions { +public class JmhDefaultOptions { public static ChainedOptionsBuilder getDefaults(Class c) { return new OptionsBuilder() // Specify which benchmarks to run. diff --git a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/graph/TestGraphAdd.java b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/graph/TestGraphAdd.java index 955a4f7e881..fc8c64d547f 100644 --- a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/graph/TestGraphAdd.java +++ b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/graph/TestGraphAdd.java @@ -21,18 +21,17 @@ package org.apache.jena.mem.graph; +import java.util.List; + +import org.apache.jena.jmh.JmhDefaultOptions; import org.apache.jena.graph.Triple; import org.apache.jena.mem.graph.helper.Context; -import org.apache.jena.mem.graph.helper.JMHDefaultOptions; import org.apache.jena.mem.graph.helper.Releases; import org.junit.Assert; import org.junit.Test; import org.openjdk.jmh.annotations.*; import org.openjdk.jmh.runner.Runner; -import java.util.List; - - @State(Scope.Benchmark) public class TestGraphAdd { @@ -45,17 +44,20 @@ public class TestGraphAdd { @Param({ "GraphMemFast (current)", - "GraphMemRoaring EAGER (current)", + "GraphMemValue (current)", +// "GraphMemRoaring EAGER (current)", // "GraphMemRoaring LAZY (current)", - "GraphMemRoaring LAZY_PARALLEL (current)", - "GraphMemRoaring MINIMAL (current)", -// "GraphMem (Jena 4.8.0)", +// "GraphMemRoaring LAZY_PARALLEL (current)", +// "GraphMemRoaring MINIMAL (current)", +// "GraphMemValue (Jena 5.6.0)", + "GraphMemFast (Jena 5.6.0)", + "GraphMemValue (Jena 5.6.0)", }) public String param1_GraphImplementation; java.util.function.Supplier graphAdd; private Context trialContext; private List triplesCurrent; - private List triples480; + private List triples560; @Benchmark public Object graphAdd() { @@ -69,25 +71,25 @@ private Object graphAddCurrent() { return sutCurrent; } - private Object graphAdd480() { - var sut480 = Releases.v480.createGraph(trialContext.getGraphClass()); - triples480.forEach(sut480::add); - Assert.assertEquals(triples480.size(), sut480.size()); - return sut480; + private Object graphAdd560() { + var sut560 = Releases.v560.createGraph(trialContext.getGraphClass()); + triples560.forEach(sut560::add); + Assert.assertEquals(triples560.size(), sut560.size()); + return sut560; } @Setup(Level.Trial) - public void setupTrial() throws Exception { + public void setupTrial() { this.trialContext = new Context(param1_GraphImplementation); switch (this.trialContext.getJenaVersion()) { case CURRENT: triplesCurrent = Releases.current.readTriples(param0_GraphUri); this.graphAdd = this::graphAddCurrent; break; - case JENA_4_8_0: - triples480 = Releases.v480.readTriples(param0_GraphUri); - this.graphAdd = this::graphAdd480; + case JENA_5_6_0: + triples560 = Releases.v560.readTriples(param0_GraphUri); + this.graphAdd = this::graphAdd560; break; default: throw new IllegalArgumentException("Unknown Jena version: " + this.trialContext.getJenaVersion()); @@ -96,7 +98,7 @@ public void setupTrial() throws Exception { @Test public void benchmark() throws Exception { - var opt = JMHDefaultOptions.getDefaults(this.getClass()) + var opt = JmhDefaultOptions.getDefaults(this.getClass()) .build(); var results = new Runner(opt).run(); Assert.assertNotNull(results); diff --git a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/graph/TestGraphContainsAnything.java b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/graph/TestGraphContainsAnything.java index 1ee65c69cca..b46c4271346 100644 --- a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/graph/TestGraphContainsAnything.java +++ b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/graph/TestGraphContainsAnything.java @@ -21,11 +21,16 @@ package org.apache.jena.mem.graph; +import java.util.Collections; +import java.util.List; +import java.util.Random; +import java.util.function.Predicate; + +import org.apache.jena.jmh.JmhDefaultOptions; import org.apache.jena.graph.Graph; import org.apache.jena.graph.Triple; import org.apache.jena.mem.GraphMemRoaring; import org.apache.jena.mem.graph.helper.Context; -import org.apache.jena.mem.graph.helper.JMHDefaultOptions; import org.apache.jena.mem.graph.helper.Releases; import org.junit.Assert; @@ -33,11 +38,6 @@ import org.openjdk.jmh.annotations.*; import org.openjdk.jmh.runner.Runner; -import java.util.Collections; -import java.util.List; -import java.util.Random; -import java.util.function.Predicate; - @State(Scope.Benchmark) public class TestGraphContainsAnything { @@ -51,17 +51,21 @@ public class TestGraphContainsAnything { @Param({ "GraphMemFast (current)", - "GraphMemRoaring EAGER (current)", + "GraphMemValue (current)", +// "GraphMemRoaring EAGER (current)", // "GraphMemRoaring LAZY (current)", - "GraphMemRoaring LAZY_PARALLEL (current)", -// "GraphMem (Jena 4.8.0)", +// "GraphMemRoaring LAZY_PARALLEL (current)", +// "GraphMemRoaring MINIMAL (current)", +// "GraphMemValue (Jena 5.6.0)", + "GraphMemFast (Jena 5.6.0)", + "GraphMemValue (Jena 5.6.0)", }) public String param1_GraphImplementation; java.util.function.Function graphContains; private Graph sutCurrent; - private org.apache.shadedJena480.graph.Graph sut480; + private org.apache.shadedJena560.graph.Graph sut560; private List triplesToFindCurrent; - private List triplesToFind480; + private List triplesToFind560; @Benchmark public boolean graphContainsS__() { @@ -105,10 +109,10 @@ private boolean graphContainsCurrent(String pattern) { return found; } - private boolean graphContains480(String pattern) { - var containsPredicate = getContainsPredicateByPattern480(pattern); + private boolean graphContains560(String pattern) { + var containsPredicate = getContainsPredicateByPattern560(pattern); var found = false; - for (var t : triplesToFind480) { + for (var t : triplesToFind560) { found = containsPredicate.test(t); Assert.assertTrue(found); } @@ -116,45 +120,31 @@ private boolean graphContains480(String pattern) { } Predicate getContainsPredicateByPatternCurrent(String pattern) { - switch (pattern) { - case "S__": - return t -> sutCurrent.contains(t.getSubject(), null, null); - case "_P_": - return t -> sutCurrent.contains(null, t.getPredicate(), null); - case "__O": - return t -> sutCurrent.contains(null, null, t.getObject()); - case "SP_": - return t -> sutCurrent.contains(t.getSubject(), t.getPredicate(), null); - case "S_O": - return t -> sutCurrent.contains(t.getSubject(), null, t.getObject()); - case "_PO": - return t -> sutCurrent.contains(null, t.getPredicate(), t.getObject()); - default: - throw new IllegalArgumentException("Unknown pattern: " + pattern); - } + return switch (pattern) { + case "S__" -> t -> sutCurrent.contains(t.getSubject(), null, null); + case "_P_" -> t -> sutCurrent.contains(null, t.getPredicate(), null); + case "__O" -> t -> sutCurrent.contains(null, null, t.getObject()); + case "SP_" -> t -> sutCurrent.contains(t.getSubject(), t.getPredicate(), null); + case "S_O" -> t -> sutCurrent.contains(t.getSubject(), null, t.getObject()); + case "_PO" -> t -> sutCurrent.contains(null, t.getPredicate(), t.getObject()); + default -> throw new IllegalArgumentException("Unknown pattern: " + pattern); + }; } - Predicate getContainsPredicateByPattern480(String pattern) { - switch (pattern) { - case "S__": - return t -> sut480.contains(t.getSubject(), null, null); - case "_P_": - return t -> sut480.contains(null, t.getPredicate(), null); - case "__O": - return t -> sut480.contains(null, null, t.getObject()); - case "SP_": - return t -> sut480.contains(t.getSubject(), t.getPredicate(), null); - case "S_O": - return t -> sut480.contains(t.getSubject(), null, t.getObject()); - case "_PO": - return t -> sut480.contains(null, t.getPredicate(), t.getObject()); - default: - throw new IllegalArgumentException("Unknown pattern: " + pattern); - } + Predicate getContainsPredicateByPattern560(String pattern) { + return switch (pattern) { + case "S__" -> t -> sut560.contains(t.getSubject(), null, null); + case "_P_" -> t -> sut560.contains(null, t.getPredicate(), null); + case "__O" -> t -> sut560.contains(null, null, t.getObject()); + case "SP_" -> t -> sut560.contains(t.getSubject(), t.getPredicate(), null); + case "S_O" -> t -> sut560.contains(t.getSubject(), null, t.getObject()); + case "_PO" -> t -> sut560.contains(null, t.getPredicate(), t.getObject()); + default -> throw new IllegalArgumentException("Unknown pattern: " + pattern); + }; } @Setup(Level.Trial) - public void setupTrial() throws Exception { + public void setupTrial() { var trialContext = new Context(param1_GraphImplementation); switch (trialContext.getJenaVersion()) { case CURRENT: { @@ -178,17 +168,17 @@ public void setupTrial() throws Exception { Collections.shuffle(this.triplesToFindCurrent, new Random(4721)); } break; - case JENA_4_8_0: { - this.sut480 = Releases.v480.createGraph(trialContext.getGraphClass()); - this.graphContains = this::graphContains480; + case JENA_5_6_0: { + this.sut560 = Releases.v560.createGraph(trialContext.getGraphClass()); + this.graphContains = this::graphContains560; - var triples = Releases.v480.readTriples(param0_GraphUri); - triples.forEach(this.sut480::add); + var triples = Releases.v560.readTriples(param0_GraphUri); + triples.forEach(this.sut560::add); /* Shuffle is import because the order might play a role. We want to test the performance of the contains method regardless of the order */ - this.triplesToFind480 = Releases.v480.cloneTriples(triples); - Collections.shuffle(this.triplesToFind480, new Random(4721)); + this.triplesToFind560 = Releases.v560.cloneTriples(triples); + Collections.shuffle(this.triplesToFind560, new Random(4721)); } break; default: @@ -198,7 +188,7 @@ public void setupTrial() throws Exception { @Test public void benchmark() throws Exception { - var opt = JMHDefaultOptions.getDefaults(this.getClass()) + var opt = JmhDefaultOptions.getDefaults(this.getClass()) .build(); var results = new Runner(opt).run(); Assert.assertNotNull(results); diff --git a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/graph/TestGraphContainsTriple.java b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/graph/TestGraphContainsTriple.java index 2ab46c3a95e..2b24b79944b 100644 --- a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/graph/TestGraphContainsTriple.java +++ b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/graph/TestGraphContainsTriple.java @@ -21,19 +21,19 @@ package org.apache.jena.mem.graph; +import java.util.List; +import java.util.Random; + import org.apache.jena.graph.Graph; import org.apache.jena.graph.Triple; +import org.apache.jena.jmh.JmhDefaultOptions; import org.apache.jena.mem.graph.helper.Context; -import org.apache.jena.mem.graph.helper.JMHDefaultOptions; import org.apache.jena.mem.graph.helper.Releases; import org.junit.Assert; import org.junit.Test; import org.openjdk.jmh.annotations.*; import org.openjdk.jmh.runner.Runner; -import java.util.List; -import java.util.Random; - @State(Scope.Benchmark) public class TestGraphContainsTriple { @@ -47,18 +47,21 @@ public class TestGraphContainsTriple { @Param({ "GraphMemFast (current)", - "GraphMemRoaring EAGER (current)", + "GraphMemValue (current)", +// "GraphMemRoaring EAGER (current)", // "GraphMemRoaring LAZY (current)", - "GraphMemRoaring LAZY_PARALLEL (current)", - "GraphMemRoaring MINIMAL (current)", -// "GraphMem (Jena 4.8.0)", +// "GraphMemRoaring LAZY_PARALLEL (current)", +// "GraphMemRoaring MINIMAL (current)", +// "GraphMemValue (Jena 5.6.0)", + "GraphMemFast (Jena 5.6.0)", + "GraphMemValue (Jena 5.6.0)", }) public String param1_GraphImplementation; java.util.function.Supplier graphContains; private Graph sutCurrent; - private org.apache.shadedJena480.graph.Graph sut480; + private org.apache.shadedJena560.graph.Graph sut560; private List triplesToFindCurrent; - private List triplesToFind480; + private List triplesToFind560; @Benchmark public boolean graphContains() { @@ -74,10 +77,10 @@ private boolean graphContainsCurrent() { return found; } - private boolean graphContains480() { + private boolean graphContains560() { var found = false; - for (var t : triplesToFind480) { - found = sut480.contains(t); + for (var t : triplesToFind560) { + found = sut560.contains(t); Assert.assertTrue(found); } return found; @@ -85,7 +88,7 @@ private boolean graphContains480() { @Setup(Level.Trial) - public void setupTrial() throws Exception { + public void setupTrial() { var trialContext = new Context(param1_GraphImplementation); switch (trialContext.getJenaVersion()) { case CURRENT: { @@ -102,18 +105,18 @@ public void setupTrial() throws Exception { java.util.Collections.shuffle(this.triplesToFindCurrent, new Random(4721)); } break; - case JENA_4_8_0: { - this.sut480 = Releases.v480.createGraph(trialContext.getGraphClass()); - this.graphContains = this::graphContains480; + case JENA_5_6_0: { + this.sut560 = Releases.v560.createGraph(trialContext.getGraphClass()); + this.graphContains = this::graphContains560; - var triples = Releases.v480.readTriples(param0_GraphUri); - triples.forEach(this.sut480::add); + var triples = Releases.v560.readTriples(param0_GraphUri); + triples.forEach(this.sut560::add); /*clone the triples because they should not be the same objects*/ - this.triplesToFind480 = Releases.v480.cloneTriples(triples); + this.triplesToFind560 = Releases.v560.cloneTriples(triples); /* Shuffle is import because the order might play a role. We want to test the performance of the contains method regardless of the order */ - java.util.Collections.shuffle(this.triplesToFind480, new Random(4721)); + java.util.Collections.shuffle(this.triplesToFind560, new Random(4721)); } break; default: @@ -123,7 +126,7 @@ public void setupTrial() throws Exception { @Test public void benchmark() throws Exception { - var opt = JMHDefaultOptions.getDefaults(this.getClass()) + var opt = JmhDefaultOptions.getDefaults(this.getClass()) .build(); var results = new Runner(opt).run(); Assert.assertNotNull(results); diff --git a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/graph/TestGraphCopy.java b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/graph/TestGraphCopy.java index 76f17b8e3e6..09a4ca1f94f 100644 --- a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/graph/TestGraphCopy.java +++ b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/graph/TestGraphCopy.java @@ -21,9 +21,11 @@ package org.apache.jena.mem.graph; +import java.util.function.Supplier; + +import org.apache.jena.jmh.JmhDefaultOptions; import org.apache.jena.mem.GraphMem; import org.apache.jena.mem.graph.helper.Context; -import org.apache.jena.mem.graph.helper.JMHDefaultOptions; import org.apache.jena.mem.graph.helper.Releases; import org.junit.Assert; @@ -31,8 +33,6 @@ import org.openjdk.jmh.annotations.*; import org.openjdk.jmh.runner.Runner; -import java.util.function.Supplier; - @State(Scope.Benchmark) public class TestGraphCopy { @@ -46,10 +46,10 @@ public class TestGraphCopy { @Param({ "GraphMemFast (current)", - "GraphMemRoaring EAGER (current)", - "GraphMemRoaring LAZY (current)", - "GraphMemRoaring LAZY_PARALLEL (current)", - "GraphMemRoaring MINIMAL (current)", +// "GraphMemRoaring EAGER (current)", +// "GraphMemRoaring LAZY (current)", +// "GraphMemRoaring LAZY_PARALLEL (current)", +// "GraphMemRoaring MINIMAL (current)", }) public String param1_GraphImplementation; @@ -80,7 +80,7 @@ private GraphMem findAndAddAll() { } @Setup(Level.Trial) - public void setupTrial() throws Exception { + public void setupTrial() { var trialContext = new Context(param1_GraphImplementation); switch (trialContext.getJenaVersion()) { case CURRENT: { @@ -91,6 +91,7 @@ public void setupTrial() throws Exception { triples.forEach(this.sutCurrent::add); } break; + case JENA_5_6_0: default: throw new IllegalArgumentException("Unsupported Jena version: " + trialContext.getJenaVersion()); } @@ -108,7 +109,7 @@ public void setupTrial() throws Exception { @Test public void benchmark() throws Exception { - var opt = JMHDefaultOptions.getDefaults(this.getClass()) + var opt = JmhDefaultOptions.getDefaults(this.getClass()) .build(); var results = new Runner(opt).run(); Assert.assertNotNull(results); diff --git a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/graph/TestGraphDelete.java b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/graph/TestGraphDelete.java index e715d08a118..1e5e9e38caa 100644 --- a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/graph/TestGraphDelete.java +++ b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/graph/TestGraphDelete.java @@ -21,19 +21,19 @@ package org.apache.jena.mem.graph; +import java.util.List; +import java.util.Random; + import org.apache.jena.graph.Graph; import org.apache.jena.graph.Triple; +import org.apache.jena.jmh.JmhDefaultOptions; import org.apache.jena.mem.graph.helper.Context; -import org.apache.jena.mem.graph.helper.JMHDefaultOptions; import org.apache.jena.mem.graph.helper.Releases; import org.junit.Assert; import org.junit.Test; import org.openjdk.jmh.annotations.*; import org.openjdk.jmh.runner.Runner; -import java.util.List; -import java.util.Random; - @State(Scope.Benchmark) public class TestGraphDelete { @@ -46,21 +46,24 @@ public class TestGraphDelete { @Param({ "GraphMemFast (current)", - "GraphMemRoaring EAGER (current)", + "GraphMemValue (current)", +// "GraphMemRoaring EAGER (current)", // "GraphMemRoaring LAZY (current)", - "GraphMemRoaring LAZY_PARALLEL (current)", - "GraphMemRoaring MINIMAL (current)", -// "GraphMem (Jena 4.8.0)", +// "GraphMemRoaring LAZY_PARALLEL (current)", +// "GraphMemRoaring MINIMAL (current)", +// "GraphMemValue (Jena 5.6.0)", + "GraphMemFast (Jena 5.6.0)", + "GraphMemValue (Jena 5.6.0)", }) public String param1_GraphImplementation; java.util.function.Supplier graphDelete; private Context trialContext; private Graph sutCurrent; - private org.apache.shadedJena480.graph.Graph sut480; + private org.apache.shadedJena560.graph.Graph sut560; private List allTriplesCurrent; - private List allTriples480; + private List allTriples560; private List triplesToDeleteFromSutCurrent; - private List triplesToDeleteFromSut480; + private List triplesToDeleteFromSut560; @Benchmark public int graphDelete() { @@ -73,10 +76,10 @@ private int graphDeleteCurrent() { return this.sutCurrent.size(); } - private int graphDelete480() { - triplesToDeleteFromSut480.forEach(t -> this.sut480.delete(t)); - Assert.assertTrue(this.sut480.isEmpty()); - return this.sut480.size(); + private int graphDelete560() { + triplesToDeleteFromSut560.forEach(t -> this.sut560.delete(t)); + Assert.assertTrue(this.sut560.isEmpty()); + return this.sut560.size(); } @Setup(Level.Invocation) @@ -92,14 +95,14 @@ public void setupInvocation() { java.util.Collections.shuffle(this.triplesToDeleteFromSutCurrent, new Random(4721)); break; - case JENA_4_8_0: - this.sut480 = Releases.v480.createGraph(this.trialContext.getGraphClass()); - this.allTriples480.forEach(this.sut480::add); + case JENA_5_6_0: + this.sut560 = Releases.v560.createGraph(this.trialContext.getGraphClass()); + this.allTriples560.forEach(this.sut560::add); /*cloning is important so that the triples are not reference equal */ - this.triplesToDeleteFromSut480 = Releases.v480.cloneTriples(this.allTriples480); + this.triplesToDeleteFromSut560 = Releases.v560.cloneTriples(this.allTriples560); /* Shuffle is import because the order might play a role. We want to test the performance of the contains method regardless of the order */ - java.util.Collections.shuffle(this.triplesToDeleteFromSut480, new Random(4721)); + java.util.Collections.shuffle(this.triplesToDeleteFromSut560, new Random(4721)); break; default: @@ -108,16 +111,16 @@ public void setupInvocation() { } @Setup(Level.Trial) - public void setupTrial() throws Exception { + public void setupTrial() { this.trialContext = new Context(param1_GraphImplementation); switch (this.trialContext.getJenaVersion()) { case CURRENT: this.allTriplesCurrent = Releases.current.readTriples(param0_GraphUri); this.graphDelete = this::graphDeleteCurrent; break; - case JENA_4_8_0: - this.allTriples480 = Releases.v480.readTriples(param0_GraphUri); - this.graphDelete = this::graphDelete480; + case JENA_5_6_0: + this.allTriples560 = Releases.v560.readTriples(param0_GraphUri); + this.graphDelete = this::graphDelete560; break; default: throw new IllegalArgumentException("Unknown Jena version: " + this.trialContext.getJenaVersion()); @@ -126,7 +129,7 @@ public void setupTrial() throws Exception { @Test public void benchmark() throws Exception { - var opt = JMHDefaultOptions.getDefaults(this.getClass()) + var opt = JmhDefaultOptions.getDefaults(this.getClass()) .build(); var results = new Runner(opt).run(); Assert.assertNotNull(results); diff --git a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/graph/TestGraphFindAllWithForEachRemaining.java b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/graph/TestGraphFindAllWithForEachRemaining.java index 37b37586bf1..2e22f361528 100644 --- a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/graph/TestGraphFindAllWithForEachRemaining.java +++ b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/graph/TestGraphFindAllWithForEachRemaining.java @@ -23,8 +23,8 @@ import org.apache.jena.atlas.iterator.ActionCount; import org.apache.jena.graph.Graph; +import org.apache.jena.jmh.JmhDefaultOptions; import org.apache.jena.mem.graph.helper.Context; -import org.apache.jena.mem.graph.helper.JMHDefaultOptions; import org.apache.jena.mem.graph.helper.Releases; import org.junit.Assert; import org.junit.Test; @@ -46,16 +46,19 @@ public class TestGraphFindAllWithForEachRemaining { @Param({ "GraphMemFast (current)", - "GraphMemRoaring EAGER (current)", + "GraphMemValue (current)", +// "GraphMemRoaring EAGER (current)", // "GraphMemRoaring LAZY (current)", - "GraphMemRoaring LAZY_PARALLEL (current)", - "GraphMemRoaring MINIMAL (current)", -// "GraphMem (Jena 4.8.0)", +// "GraphMemRoaring LAZY_PARALLEL (current)", +// "GraphMemRoaring MINIMAL (current)", +// "GraphMemValue (Jena 5.6.0)", + "GraphMemFast (Jena 5.6.0)", + "GraphMemValue (Jena 5.6.0)", }) public String param1_GraphImplementation; java.util.function.Supplier graphFindAll; private Graph sutCurrent; - private org.apache.shadedJena480.graph.Graph sut480; + private org.apache.shadedJena560.graph.Graph sut560; @Benchmark public Long graphFindAll() { @@ -65,23 +68,23 @@ public Long graphFindAll() { private Long graphFindAllCurrent() { var actionCounter = new ActionCount<>(); var iter = sutCurrent.find(); - iter.forEachRemaining(actionCounter::accept); + iter.forEachRemaining(actionCounter); iter.close(); assertEquals(sutCurrent.size(), actionCounter.getCount()); return actionCounter.getCount(); } - private Long graphFindAll480() { + private Long graphFindAll560() { var actionCounter = new ActionCount<>(); - var iter = sut480.find(); - iter.forEachRemaining(actionCounter::accept); + var iter = sut560.find(); + iter.forEachRemaining(actionCounter); iter.close(); - assertEquals(sut480.size(), actionCounter.getCount()); + assertEquals(sut560.size(), actionCounter.getCount()); return actionCounter.getCount(); } @Setup(Level.Trial) - public void setupTrial() throws Exception { + public void setupTrial() { Context trialContext = new Context(param1_GraphImplementation); switch (trialContext.getJenaVersion()) { case CURRENT: { @@ -92,12 +95,12 @@ public void setupTrial() throws Exception { triples.forEach(this.sutCurrent::add); } break; - case JENA_4_8_0: { - this.sut480 = Releases.v480.createGraph(trialContext.getGraphClass()); - this.graphFindAll = this::graphFindAll480; + case JENA_5_6_0: { + this.sut560 = Releases.v560.createGraph(trialContext.getGraphClass()); + this.graphFindAll = this::graphFindAll560; - var triples = Releases.v480.readTriples(param0_GraphUri); - triples.forEach(this.sut480::add); + var triples = Releases.v560.readTriples(param0_GraphUri); + triples.forEach(this.sut560::add); } break; default: @@ -107,7 +110,7 @@ public void setupTrial() throws Exception { @Test public void benchmark() throws Exception { - var opt = JMHDefaultOptions.getDefaults(this.getClass()) + var opt = JmhDefaultOptions.getDefaults(this.getClass()) .build(); var results = new Runner(opt).run(); Assert.assertNotNull(results); diff --git a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/graph/TestGraphFindAllWithHasNextAndNext.java b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/graph/TestGraphFindAllWithHasNextAndNext.java index 86dd03db789..aa1a2af80a9 100644 --- a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/graph/TestGraphFindAllWithHasNextAndNext.java +++ b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/graph/TestGraphFindAllWithHasNextAndNext.java @@ -23,8 +23,8 @@ import org.apache.jena.atlas.iterator.ActionCount; import org.apache.jena.graph.Graph; +import org.apache.jena.jmh.JmhDefaultOptions; import org.apache.jena.mem.graph.helper.Context; -import org.apache.jena.mem.graph.helper.JMHDefaultOptions; import org.apache.jena.mem.graph.helper.Releases; import org.junit.Assert; import org.junit.Test; @@ -46,16 +46,19 @@ public class TestGraphFindAllWithHasNextAndNext { @Param({ "GraphMemFast (current)", - "GraphMemRoaring EAGER (current)", + "GraphMemValue (current)", +// "GraphMemRoaring EAGER (current)", // "GraphMemRoaring LAZY (current)", - "GraphMemRoaring LAZY_PARALLEL (current)", - "GraphMemRoaring MINIMAL (current)", -// "GraphMem (Jena 4.8.0)", +// "GraphMemRoaring LAZY_PARALLEL (current)", +// "GraphMemRoaring MINIMAL (current)", +// "GraphMemValue (Jena 5.6.0)", + "GraphMemFast (Jena 5.6.0)", + "GraphMemValue (Jena 5.6.0)", }) public String param1_GraphImplementation; java.util.function.Supplier graphFindAll; private Graph sutCurrent; - private org.apache.shadedJena480.graph.Graph sut480; + private org.apache.shadedJena560.graph.Graph sut560; @Benchmark public Long graphFindAll() { @@ -73,19 +76,19 @@ private Long graphFindAllCurrent() { return actionCounter.getCount(); } - private Long graphFindAll480() { + private Long graphFindAll560() { var actionCounter = new ActionCount<>(); - var iter = sut480.find(); + var iter = sut560.find(); while (iter.hasNext()) { actionCounter.accept(iter.next()); } iter.close(); - assertEquals(sut480.size(), actionCounter.getCount()); + assertEquals(sut560.size(), actionCounter.getCount()); return actionCounter.getCount(); } @Setup(Level.Trial) - public void setupTrial() throws Exception { + public void setupTrial() { Context trialContext = new Context(param1_GraphImplementation); switch (trialContext.getJenaVersion()) { case CURRENT: { @@ -96,12 +99,12 @@ public void setupTrial() throws Exception { triples.forEach(this.sutCurrent::add); } break; - case JENA_4_8_0: { - this.sut480 = Releases.v480.createGraph(trialContext.getGraphClass()); - this.graphFindAll = this::graphFindAll480; + case JENA_5_6_0: { + this.sut560 = Releases.v560.createGraph(trialContext.getGraphClass()); + this.graphFindAll = this::graphFindAll560; - var triples = Releases.v480.readTriples(param0_GraphUri); - triples.forEach(this.sut480::add); + var triples = Releases.v560.readTriples(param0_GraphUri); + triples.forEach(this.sut560::add); } break; default: @@ -111,7 +114,7 @@ public void setupTrial() throws Exception { @Test public void benchmark() throws Exception { - var opt = JMHDefaultOptions.getDefaults(this.getClass()) + var opt = JmhDefaultOptions.getDefaults(this.getClass()) .build(); var results = new Runner(opt).run(); Assert.assertNotNull(results); diff --git a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/graph/TestGraphFindByMatchAndCount.java b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/graph/TestGraphFindByMatchAndCount.java index e167a45224a..5809f70edd2 100644 --- a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/graph/TestGraphFindByMatchAndCount.java +++ b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/graph/TestGraphFindByMatchAndCount.java @@ -24,9 +24,9 @@ import org.apache.jena.atlas.iterator.Iter; import org.apache.jena.graph.Graph; import org.apache.jena.graph.Triple; +import org.apache.jena.jmh.JmhDefaultOptions; import org.apache.jena.mem.GraphMemRoaring; import org.apache.jena.mem.graph.helper.Context; -import org.apache.jena.mem.graph.helper.JMHDefaultOptions; import org.apache.jena.mem.graph.helper.Releases; import org.junit.Test; @@ -54,10 +54,14 @@ public class TestGraphFindByMatchAndCount { @Param({ "GraphMemFast (current)", - "GraphMemRoaring EAGER (current)", + "GraphMemValue (current)", +// "GraphMemRoaring EAGER (current)", // "GraphMemRoaring LAZY (current)", - "GraphMemRoaring LAZY_PARALLEL (current)", -// "GraphMem (Jena 4.8.0)", +// "GraphMemRoaring LAZY_PARALLEL (current)", +// "GraphMemRoaring MINIMAL (current)", +// "GraphMemValue (Jena 5.6.0)", + "GraphMemFast (Jena 5.6.0)", + "GraphMemValue (Jena 5.6.0)", }) public String param1_GraphImplementation; @@ -65,9 +69,9 @@ public class TestGraphFindByMatchAndCount { public int param2_sampleSize; Function graphFindByMatchesAndCount; private Graph sutCurrent; - private org.apache.shadedJena480.graph.Graph sut480; + private org.apache.shadedJena560.graph.Graph sut560; private List triplesToFindCurrent; - private List triplesToFind480; + private List triplesToFind560; @Benchmark public Object graphFindS__() { @@ -104,60 +108,46 @@ private int graphFindByMatchesAndCount(String pattern) { var findFunction = getFindFunctionByPatternCurrent(pattern); var total = 0; for (Triple sample : this.triplesToFindCurrent) { - total += Iter.count(findFunction.apply(sample)); + total += (int) Iter.count(findFunction.apply(sample)); } return total; } - private Object graphFindByMatchesAndCount480(String pattern) { - var findFunction = getFindFunctionByPattern480(pattern); + private Object graphFindByMatchesAndCount560(String pattern) { + var findFunction = getFindFunctionByPattern560(pattern); var total = 0; - for (org.apache.shadedJena480.graph.Triple sample : this.triplesToFind480) { - total += Iter.count(findFunction.apply(sample)); + for (org.apache.shadedJena560.graph.Triple sample : this.triplesToFind560) { + total += (int) Iter.count(findFunction.apply(sample)); } return total; } Function> getFindFunctionByPatternCurrent(String pattern) { - switch (pattern) { - case "S__": - return t -> sutCurrent.find(t.getSubject(), null, null); - case "_P_": - return t -> sutCurrent.find(null, t.getPredicate(), null); - case "__O": - return t -> sutCurrent.find(null, null, t.getObject()); - case "SP_": - return t -> sutCurrent.find(t.getSubject(), t.getPredicate(), null); - case "S_O": - return t -> sutCurrent.find(t.getSubject(), null, t.getObject()); - case "_PO": - return t -> sutCurrent.find(null, t.getPredicate(), t.getObject()); - default: - throw new IllegalArgumentException("Unknown pattern: " + pattern); - } + return switch (pattern) { + case "S__" -> t -> sutCurrent.find(t.getSubject(), null, null); + case "_P_" -> t -> sutCurrent.find(null, t.getPredicate(), null); + case "__O" -> t -> sutCurrent.find(null, null, t.getObject()); + case "SP_" -> t -> sutCurrent.find(t.getSubject(), t.getPredicate(), null); + case "S_O" -> t -> sutCurrent.find(t.getSubject(), null, t.getObject()); + case "_PO" -> t -> sutCurrent.find(null, t.getPredicate(), t.getObject()); + default -> throw new IllegalArgumentException("Unknown pattern: " + pattern); + }; } - Function> getFindFunctionByPattern480(String pattern) { - switch (pattern) { - case "S__": - return t -> sut480.find(t.getSubject(), null, null); - case "_P_": - return t -> sut480.find(null, t.getPredicate(), null); - case "__O": - return t -> sut480.find(null, null, t.getObject()); - case "SP_": - return t -> sut480.find(t.getSubject(), t.getPredicate(), null); - case "S_O": - return t -> sut480.find(t.getSubject(), null, t.getObject()); - case "_PO": - return t -> sut480.find(null, t.getPredicate(), t.getObject()); - default: - throw new IllegalArgumentException("Unknown pattern: " + pattern); - } + Function> getFindFunctionByPattern560(String pattern) { + return switch (pattern) { + case "S__" -> t -> sut560.find(t.getSubject(), null, null); + case "_P_" -> t -> sut560.find(null, t.getPredicate(), null); + case "__O" -> t -> sut560.find(null, null, t.getObject()); + case "SP_" -> t -> sut560.find(t.getSubject(), t.getPredicate(), null); + case "S_O" -> t -> sut560.find(t.getSubject(), null, t.getObject()); + case "_PO" -> t -> sut560.find(null, t.getPredicate(), t.getObject()); + default -> throw new IllegalArgumentException("Unknown pattern: " + pattern); + }; } @Setup(Level.Trial) - public void setupTrial() throws Exception { + public void setupTrial() { Context trialContext = new Context(param1_GraphImplementation); switch (trialContext.getJenaVersion()) { case CURRENT: { @@ -184,22 +174,22 @@ public void setupTrial() throws Exception { java.util.Collections.shuffle(this.triplesToFindCurrent, new Random(4721)); } break; - case JENA_4_8_0: { - this.sut480 = Releases.v480.createGraph(trialContext.getGraphClass()); - this.graphFindByMatchesAndCount = this::graphFindByMatchesAndCount480; + case JENA_5_6_0: { + this.sut560 = Releases.v560.createGraph(trialContext.getGraphClass()); + this.graphFindByMatchesAndCount = this::graphFindByMatchesAndCount560; - var triples = Releases.v480.readTriples(param0_GraphUri); - triples.forEach(this.sut480::add); + var triples = Releases.v560.readTriples(param0_GraphUri); + triples.forEach(this.sut560::add); /*clone the triples because they should not be the same objects*/ - this.triplesToFind480 = new ArrayList<>(param2_sampleSize); + this.triplesToFind560 = new ArrayList<>(param2_sampleSize); var sampleIncrement = triples.size() / param2_sampleSize; for (var i = 0; i < triples.size(); i += sampleIncrement) { - this.triplesToFind480.add(Releases.v480.cloneTriple(triples.get(i))); + this.triplesToFind560.add(Releases.v560.cloneTriple(triples.get(i))); } /* Shuffle is import because the order might play a role. We want to test the performance of the contains method regardless of the order */ - java.util.Collections.shuffle(this.triplesToFind480, new Random(4721)); + java.util.Collections.shuffle(this.triplesToFind560, new Random(4721)); } break; default: @@ -209,7 +199,7 @@ public void setupTrial() throws Exception { @Test public void benchmark() throws Exception { - var opt = JMHDefaultOptions.getDefaults(this.getClass()) + var opt = JmhDefaultOptions.getDefaults(this.getClass()) .build(); var results = new Runner(opt).run(); assertNotNull(results); diff --git a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/graph/TestGraphFindByMatchAndGetFirst.java b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/graph/TestGraphFindByMatchAndGetFirst.java index fdac34a5efa..793d42cbea4 100644 --- a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/graph/TestGraphFindByMatchAndGetFirst.java +++ b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/graph/TestGraphFindByMatchAndGetFirst.java @@ -23,9 +23,9 @@ import org.apache.jena.graph.Graph; import org.apache.jena.graph.Triple; +import org.apache.jena.jmh.JmhDefaultOptions; import org.apache.jena.mem.GraphMemRoaring; import org.apache.jena.mem.graph.helper.Context; -import org.apache.jena.mem.graph.helper.JMHDefaultOptions; import org.apache.jena.mem.graph.helper.Releases; import org.junit.Test; @@ -53,17 +53,21 @@ public class TestGraphFindByMatchAndGetFirst { @Param({ "GraphMemFast (current)", - "GraphMemRoaring EAGER (current)", + "GraphMemValue (current)", +// "GraphMemRoaring EAGER (current)", // "GraphMemRoaring LAZY (current)", - "GraphMemRoaring LAZY_PARALLEL (current)", -// "GraphMem (Jena 4.8.0)", +// "GraphMemRoaring LAZY_PARALLEL (current)", +// "GraphMemRoaring MINIMAL (current)", +// "GraphMemValue (Jena 5.6.0)", + "GraphMemFast (Jena 5.6.0)", + "GraphMemValue (Jena 5.6.0)", }) public String param1_GraphImplementation; java.util.function.Function graphFind; private Graph sutCurrent; - private org.apache.shadedJena480.graph.Graph sut480; + private org.apache.shadedJena560.graph.Graph sut560; private List triplesToFindCurrent; - private List triplesToFind480; + private List triplesToFind560; @Benchmark public Object graphFindS__() { @@ -107,11 +111,11 @@ private Object graphFindByMatchesAndGetFirstCurrent(String pattern) { return t; } - private Object graphFindByMatchesAndGetFirst480(String pattern) { - var findFunction = getFindFunctionByPattern480(pattern); - org.apache.shadedJena480.graph.Triple t = null; - for (org.apache.shadedJena480.graph.Triple sample : this.triplesToFind480) { - final Iterator it = findFunction.apply(sample); + private Object graphFindByMatchesAndGetFirst560(String pattern) { + var findFunction = getFindFunctionByPattern560(pattern); + org.apache.shadedJena560.graph.Triple t = null; + for (org.apache.shadedJena560.graph.Triple sample : this.triplesToFind560) { + final Iterator it = findFunction.apply(sample); assertTrue(it.hasNext()); t = it.next(); assertNotNull(t); @@ -120,45 +124,31 @@ private Object graphFindByMatchesAndGetFirst480(String pattern) { } Function> getFindFunctionByPatternCurrent(String pattern) { - switch (pattern) { - case "S__": - return t -> sutCurrent.find(t.getSubject(), null, null); - case "_P_": - return t -> sutCurrent.find(null, t.getPredicate(), null); - case "__O": - return t -> sutCurrent.find(null, null, t.getObject()); - case "SP_": - return t -> sutCurrent.find(t.getSubject(), t.getPredicate(), null); - case "S_O": - return t -> sutCurrent.find(t.getSubject(), null, t.getObject()); - case "_PO": - return t -> sutCurrent.find(null, t.getPredicate(), t.getObject()); - default: - throw new IllegalArgumentException("Unknown pattern: " + pattern); - } + return switch (pattern) { + case "S__" -> t -> sutCurrent.find(t.getSubject(), null, null); + case "_P_" -> t -> sutCurrent.find(null, t.getPredicate(), null); + case "__O" -> t -> sutCurrent.find(null, null, t.getObject()); + case "SP_" -> t -> sutCurrent.find(t.getSubject(), t.getPredicate(), null); + case "S_O" -> t -> sutCurrent.find(t.getSubject(), null, t.getObject()); + case "_PO" -> t -> sutCurrent.find(null, t.getPredicate(), t.getObject()); + default -> throw new IllegalArgumentException("Unknown pattern: " + pattern); + }; } - Function> getFindFunctionByPattern480(String pattern) { - switch (pattern) { - case "S__": - return t -> sut480.find(t.getSubject(), null, null); - case "_P_": - return t -> sut480.find(null, t.getPredicate(), null); - case "__O": - return t -> sut480.find(null, null, t.getObject()); - case "SP_": - return t -> sut480.find(t.getSubject(), t.getPredicate(), null); - case "S_O": - return t -> sut480.find(t.getSubject(), null, t.getObject()); - case "_PO": - return t -> sut480.find(null, t.getPredicate(), t.getObject()); - default: - throw new IllegalArgumentException("Unknown pattern: " + pattern); - } + Function> getFindFunctionByPattern560(String pattern) { + return switch (pattern) { + case "S__" -> t -> sut560.find(t.getSubject(), null, null); + case "_P_" -> t -> sut560.find(null, t.getPredicate(), null); + case "__O" -> t -> sut560.find(null, null, t.getObject()); + case "SP_" -> t -> sut560.find(t.getSubject(), t.getPredicate(), null); + case "S_O" -> t -> sut560.find(t.getSubject(), null, t.getObject()); + case "_PO" -> t -> sut560.find(null, t.getPredicate(), t.getObject()); + default -> throw new IllegalArgumentException("Unknown pattern: " + pattern); + }; } @Setup(Level.Trial) - public void setupTrial() throws Exception { + public void setupTrial() { Context trialContext = new Context(param1_GraphImplementation); switch (trialContext.getJenaVersion()) { case CURRENT: { @@ -181,18 +171,18 @@ public void setupTrial() throws Exception { java.util.Collections.shuffle(this.triplesToFindCurrent, new Random(4721)); } break; - case JENA_4_8_0: { - this.sut480 = Releases.v480.createGraph(trialContext.getGraphClass()); - this.graphFind = this::graphFindByMatchesAndGetFirst480; + case JENA_5_6_0: { + this.sut560 = Releases.v560.createGraph(trialContext.getGraphClass()); + this.graphFind = this::graphFindByMatchesAndGetFirst560; - var triples = Releases.v480.readTriples(param0_GraphUri); - triples.forEach(this.sut480::add); + var triples = Releases.v560.readTriples(param0_GraphUri); + triples.forEach(this.sut560::add); /*clone the triples because they should not be the same objects*/ - this.triplesToFind480 = Releases.v480.cloneTriples(triples); + this.triplesToFind560 = Releases.v560.cloneTriples(triples); /* Shuffle is import because the order might play a role. We want to test the performance of the contains method regardless of the order */ - java.util.Collections.shuffle(this.triplesToFind480, new Random(4721)); + java.util.Collections.shuffle(this.triplesToFind560, new Random(4721)); } break; default: @@ -202,7 +192,7 @@ public void setupTrial() throws Exception { @Test public void benchmark() throws Exception { - var opt = JMHDefaultOptions.getDefaults(this.getClass()) + var opt = JmhDefaultOptions.getDefaults(this.getClass()) .build(); var results = new Runner(opt).run(); assertNotNull(results); diff --git a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/graph/TestGraphInitializeIndex.java b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/graph/TestGraphInitializeIndex.java index 856a0d6a01f..76a23c5d35b 100644 --- a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/graph/TestGraphInitializeIndex.java +++ b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/graph/TestGraphInitializeIndex.java @@ -22,9 +22,9 @@ package org.apache.jena.mem.graph; import org.apache.jena.graph.Triple; +import org.apache.jena.jmh.JmhDefaultOptions; import org.apache.jena.mem.GraphMemRoaring; import org.apache.jena.mem.graph.helper.Context; -import org.apache.jena.mem.graph.helper.JMHDefaultOptions; import org.apache.jena.mem.graph.helper.Releases; import org.junit.Assert; @@ -39,8 +39,8 @@ public class TestGraphInitializeIndex { @Param({ -// "../testing/cheeses-0.1.ttl", -// "../testing/pizza.owl.rdf", + "../testing/cheeses-0.1.ttl", + "../testing/pizza.owl.rdf", "../testing/data.nt.gz", }) public String param0_GraphUri; @@ -76,13 +76,14 @@ private Object graphAddCurrent() { } @Setup(Level.Trial) - public void setupTrial() throws Exception { + public void setupTrial() { this.trialContext = new Context(param1_GraphImplementation); switch (this.trialContext.getJenaVersion()) { case CURRENT: triplesCurrent = Releases.current.readTriples(param0_GraphUri); this.graphAdd = this::graphAddCurrent; break; + case JENA_5_6_0: default: throw new IllegalArgumentException("Unknown Jena version: " + this.trialContext.getJenaVersion()); } @@ -90,7 +91,7 @@ public void setupTrial() throws Exception { @Test public void benchmark() throws Exception { - var opt = JMHDefaultOptions.getDefaults(this.getClass()) + var opt = JmhDefaultOptions.getDefaults(this.getClass()) .build(); var results = new Runner(opt).run(); Assert.assertNotNull(results); diff --git a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/graph/TestGraphMemoryConsumption.java b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/graph/TestGraphMemoryConsumption.java index dfc08c0fcbc..820aff9e2b8 100644 --- a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/graph/TestGraphMemoryConsumption.java +++ b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/graph/TestGraphMemoryConsumption.java @@ -23,8 +23,8 @@ import org.apache.commons.lang3.time.StopWatch; import org.apache.jena.graph.Triple; +import org.apache.jena.jmh.JmhDefaultOptions; import org.apache.jena.mem.graph.helper.Context; -import org.apache.jena.mem.graph.helper.JMHDefaultOptions; import org.apache.jena.mem.graph.helper.Releases; import org.junit.Assert; import org.junit.Test; @@ -32,6 +32,7 @@ import org.openjdk.jmh.runner.Runner; import java.math.BigDecimal; +import java.math.RoundingMode; import java.util.List; @State(Scope.Benchmark) @@ -46,30 +47,30 @@ public class TestGraphMemoryConsumption { @Param({ "GraphMemFast (current)", - "GraphMemRoaring EAGER (current)", + "GraphMemValue (current)", +// "GraphMemRoaring EAGER (current)", // "GraphMemRoaring LAZY (current)", - "GraphMemRoaring LAZY_PARALLEL (current)", - "GraphMemRoaring MINIMAL (current)", -// "GraphMem (Jena 4.8.0)", +// "GraphMemRoaring LAZY_PARALLEL (current)", +// "GraphMemRoaring MINIMAL (current)", +// "GraphMemValue (Jena 5.6.0)", + "GraphMemFast (Jena 5.6.0)", + "GraphMemValue (Jena 5.6.0)", }) public String param1_GraphImplementation; java.util.function.Supplier graphFill; private Context trialContext; private List allTriplesCurrent; - private List allTriples480; + private List allTriples560; /** * This method is used to get the memory consumption of the current JVM. * * @return the memory consumption in MB */ - @SuppressWarnings("removal") private static double runGcAndGetUsedMemoryInMB() { - System.runFinalization(); System.gc(); - Runtime.getRuntime().runFinalization(); Runtime.getRuntime().gc(); - return BigDecimal.valueOf(Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory()).divide(BigDecimal.valueOf(1024L)).divide(BigDecimal.valueOf(1024L)).doubleValue(); + return BigDecimal.valueOf(Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory()).divide(BigDecimal.valueOf(1024L), 3, RoundingMode.HALF_UP).divide(BigDecimal.valueOf(1024L), 3, RoundingMode.HALF_UP).doubleValue(); } @Benchmark @@ -91,11 +92,11 @@ private Object graphFillCurrent() { return sut; } - private Object graphFill480() { + private Object graphFill560() { var memoryBefore = runGcAndGetUsedMemoryInMB(); var stopwatch = StopWatch.createStarted(); - var sut = Releases.v480.createGraph(trialContext.getGraphClass()); - allTriples480.forEach(sut::add); + var sut = Releases.v560.createGraph(trialContext.getGraphClass()); + allTriples560.forEach(sut::add); stopwatch.stop(); var memoryAfter = runGcAndGetUsedMemoryInMB(); System.out.printf("graphs: %d time to fill graphs: %s additional memory: %5.3f MB%n", @@ -106,16 +107,16 @@ private Object graphFill480() { } @Setup(Level.Trial) - public void setupTrial() throws Exception { + public void setupTrial() { this.trialContext = new Context(param1_GraphImplementation); switch (this.trialContext.getJenaVersion()) { case CURRENT: this.allTriplesCurrent = Releases.current.readTriples(param0_GraphUri); this.graphFill = this::graphFillCurrent; break; - case JENA_4_8_0: - this.allTriples480 = Releases.v480.readTriples(param0_GraphUri); - this.graphFill = this::graphFill480; + case JENA_5_6_0: + this.allTriples560 = Releases.v560.readTriples(param0_GraphUri); + this.graphFill = this::graphFill560; break; default: throw new IllegalArgumentException("Unknown Jena version: " + this.trialContext.getJenaVersion()); @@ -124,7 +125,7 @@ public void setupTrial() throws Exception { @Test public void benchmark() throws Exception { - var opt = JMHDefaultOptions.getDefaults(this.getClass()) + var opt = JmhDefaultOptions.getDefaults(this.getClass()) .warmupIterations(3) .measurementIterations(3) .build(); diff --git a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/graph/TestGraphStreamAll.java b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/graph/TestGraphStreamAll.java index 27a3c75e2d8..2adda61ba55 100644 --- a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/graph/TestGraphStreamAll.java +++ b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/graph/TestGraphStreamAll.java @@ -27,8 +27,8 @@ import org.junit.Test; import org.apache.jena.graph.Graph; +import org.apache.jena.jmh.JmhDefaultOptions; import org.apache.jena.mem.graph.helper.Context; -import org.apache.jena.mem.graph.helper.JMHDefaultOptions; import org.apache.jena.mem.graph.helper.Releases; import org.openjdk.jmh.annotations.*; import org.openjdk.jmh.runner.Runner; @@ -46,17 +46,20 @@ public class TestGraphStreamAll { @Param({ "GraphMemFast (current)", - "GraphMemRoaring EAGER (current)", - "GraphMemRoaring LAZY (current)", - "GraphMemRoaring LAZY_PARALLEL (current)", - "GraphMemRoaring MINIMAL (current)", -// "GraphMem (Jena 4.8.0)", + "GraphMemValue (current)", +// "GraphMemRoaring EAGER (current)", +// "GraphMemRoaring LAZY (current)", +// "GraphMemRoaring LAZY_PARALLEL (current)", +// "GraphMemRoaring MINIMAL (current)", +// "GraphMemValue (Jena 5.6.0)", + "GraphMemFast (Jena 5.6.0)", + "GraphMemValue (Jena 5.6.0)", }) public String param1_GraphImplementation; java.util.function.Supplier graphStream; java.util.function.Supplier graphStreamParallel; private Graph sutCurrent; - private org.apache.shadedJena480.graph.Graph sut480; + private org.apache.shadedJena560.graph.Graph sut560; @Benchmark public Object graphStream() { @@ -74,9 +77,9 @@ private Object graphStreamCurrent() { return list; } - private Object graphStream480() { - var list = sut480.stream().toList(); - assertEquals(sut480.size(), list.size()); + private Object graphStream560() { + var list = sut560.stream().toList(); + assertEquals(sut560.size(), list.size()); return list; } @@ -86,14 +89,14 @@ private Object graphStreamParallelCurrent() { return list; } - private Object graphStreamParallel480() { - var list = sut480.stream().parallel().toList(); - assertEquals(sut480.size(), list.size()); + private Object graphStreamParallel560() { + var list = sut560.stream().parallel().toList(); + assertEquals(sut560.size(), list.size()); return list; } @Setup(Level.Trial) - public void setupTrial() throws Exception { + public void setupTrial() { Context trialContext = new Context(param1_GraphImplementation); switch (trialContext.getJenaVersion()) { case CURRENT: { @@ -105,13 +108,13 @@ public void setupTrial() throws Exception { triples.forEach(this.sutCurrent::add); } break; - case JENA_4_8_0: { - this.sut480 = Releases.v480.createGraph(trialContext.getGraphClass()); - this.graphStream = this::graphStream480; - this.graphStreamParallel = this::graphStreamParallel480; + case JENA_5_6_0: { + this.sut560 = Releases.v560.createGraph(trialContext.getGraphClass()); + this.graphStream = this::graphStream560; + this.graphStreamParallel = this::graphStreamParallel560; - var triples = Releases.v480.readTriples(param0_GraphUri); - triples.forEach(this.sut480::add); + var triples = Releases.v560.readTriples(param0_GraphUri); + triples.forEach(this.sut560::add); } break; default: @@ -121,7 +124,7 @@ public void setupTrial() throws Exception { @Test public void benchmark() throws Exception { - var opt = JMHDefaultOptions.getDefaults(this.getClass()) + var opt = JmhDefaultOptions.getDefaults(this.getClass()) .build(); var results = new Runner(opt).run(); Assert.assertNotNull(results); diff --git a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/graph/TestGraphStreamByMatchAndCount.java b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/graph/TestGraphStreamByMatchAndCount.java index f60f4f18119..c0d37e4dd71 100644 --- a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/graph/TestGraphStreamByMatchAndCount.java +++ b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/graph/TestGraphStreamByMatchAndCount.java @@ -24,9 +24,9 @@ import org.apache.jena.atlas.iterator.ActionCount; import org.apache.jena.graph.Graph; import org.apache.jena.graph.Triple; +import org.apache.jena.jmh.JmhDefaultOptions; import org.apache.jena.mem.GraphMemRoaring; import org.apache.jena.mem.graph.helper.Context; -import org.apache.jena.mem.graph.helper.JMHDefaultOptions; import org.apache.jena.mem.graph.helper.Releases; import org.junit.Test; @@ -54,10 +54,14 @@ public class TestGraphStreamByMatchAndCount { @Param({ "GraphMemFast (current)", - "GraphMemRoaring EAGER (current)", + "GraphMemValue (current)", +// "GraphMemRoaring EAGER (current)", // "GraphMemRoaring LAZY (current)", - "GraphMemRoaring LAZY_PARALLEL (current)", -// "GraphMem (Jena 4.8.0)", +// "GraphMemRoaring LAZY_PARALLEL (current)", +// "GraphMemRoaring MINIMAL (current)", +// "GraphMemValue (Jena 5.6.0)", + "GraphMemFast (Jena 5.6.0)", + "GraphMemValue (Jena 5.6.0)", }) public String param1_GraphImplementation; @@ -65,13 +69,13 @@ public class TestGraphStreamByMatchAndCount { public int param2_sampleSize; Function graphStreamByMatchAndCount; private Graph sutCurrent; - private org.apache.shadedJena480.graph.Graph sut480; + private org.apache.shadedJena560.graph.Graph sut560; private List triplesToFindCurrent; - private List triplesToFind480; + private List triplesToFind560; private static int count(final Stream stream) { var actionCounter = new ActionCount<>(); - stream.forEach(actionCounter::accept); + stream.forEach(actionCounter); return (int) actionCounter.getCount(); } @@ -114,55 +118,41 @@ private int graphStreamByMatchAndCount(String pattern) { return total; } - private Object graphStreamByMatchAndCount480(String pattern) { - var streamFunction = getStreamFunctionByPattern480(pattern); + private Object graphStreamByMatchAndCount560(String pattern) { + var streamFunction = getStreamFunctionByPattern560(pattern); var total = 0; - for (org.apache.shadedJena480.graph.Triple sample : this.triplesToFind480) { + for (org.apache.shadedJena560.graph.Triple sample : this.triplesToFind560) { total += count(streamFunction.apply(sample)); } return total; } Function> getStreamFunctionByPatternCurrent(String pattern) { - switch (pattern) { - case "S__": - return t -> sutCurrent.stream(t.getSubject(), null, null); - case "_P_": - return t -> sutCurrent.stream(null, t.getPredicate(), null); - case "__O": - return t -> sutCurrent.stream(null, null, t.getObject()); - case "SP_": - return t -> sutCurrent.stream(t.getSubject(), t.getPredicate(), null); - case "S_O": - return t -> sutCurrent.stream(t.getSubject(), null, t.getObject()); - case "_PO": - return t -> sutCurrent.stream(null, t.getPredicate(), t.getObject()); - default: - throw new IllegalArgumentException("Unknown pattern: " + pattern); - } + return switch (pattern) { + case "S__" -> t -> sutCurrent.stream(t.getSubject(), null, null); + case "_P_" -> t -> sutCurrent.stream(null, t.getPredicate(), null); + case "__O" -> t -> sutCurrent.stream(null, null, t.getObject()); + case "SP_" -> t -> sutCurrent.stream(t.getSubject(), t.getPredicate(), null); + case "S_O" -> t -> sutCurrent.stream(t.getSubject(), null, t.getObject()); + case "_PO" -> t -> sutCurrent.stream(null, t.getPredicate(), t.getObject()); + default -> throw new IllegalArgumentException("Unknown pattern: " + pattern); + }; } - Function> getStreamFunctionByPattern480(String pattern) { - switch (pattern) { - case "S__": - return t -> sut480.stream(t.getSubject(), null, null); - case "_P_": - return t -> sut480.stream(null, t.getPredicate(), null); - case "__O": - return t -> sut480.stream(null, null, t.getObject()); - case "SP_": - return t -> sut480.stream(t.getSubject(), t.getPredicate(), null); - case "S_O": - return t -> sut480.stream(t.getSubject(), null, t.getObject()); - case "_PO": - return t -> sut480.stream(null, t.getPredicate(), t.getObject()); - default: - throw new IllegalArgumentException("Unknown pattern: " + pattern); - } + Function> getStreamFunctionByPattern560(String pattern) { + return switch (pattern) { + case "S__" -> t -> sut560.stream(t.getSubject(), null, null); + case "_P_" -> t -> sut560.stream(null, t.getPredicate(), null); + case "__O" -> t -> sut560.stream(null, null, t.getObject()); + case "SP_" -> t -> sut560.stream(t.getSubject(), t.getPredicate(), null); + case "S_O" -> t -> sut560.stream(t.getSubject(), null, t.getObject()); + case "_PO" -> t -> sut560.stream(null, t.getPredicate(), t.getObject()); + default -> throw new IllegalArgumentException("Unknown pattern: " + pattern); + }; } @Setup(Level.Trial) - public void setupTrial() throws Exception { + public void setupTrial() { Context trialContext = new Context(param1_GraphImplementation); switch (trialContext.getJenaVersion()) { case CURRENT: { @@ -188,22 +178,22 @@ public void setupTrial() throws Exception { java.util.Collections.shuffle(this.triplesToFindCurrent, new Random(4721)); } break; - case JENA_4_8_0: { - this.sut480 = Releases.v480.createGraph(trialContext.getGraphClass()); - this.graphStreamByMatchAndCount = this::graphStreamByMatchAndCount480; + case JENA_5_6_0: { + this.sut560 = Releases.v560.createGraph(trialContext.getGraphClass()); + this.graphStreamByMatchAndCount = this::graphStreamByMatchAndCount560; - var triples = Releases.v480.readTriples(param0_GraphUri); - triples.forEach(this.sut480::add); + var triples = Releases.v560.readTriples(param0_GraphUri); + triples.forEach(this.sut560::add); /*clone the triples because they should not be the same objects*/ - this.triplesToFind480 = new ArrayList<>(param2_sampleSize); + this.triplesToFind560 = new ArrayList<>(param2_sampleSize); var sampleIncrement = triples.size() / param2_sampleSize; for (var i = 0; i < triples.size(); i += sampleIncrement) { - this.triplesToFind480.add(Releases.v480.cloneTriple(triples.get(i))); + this.triplesToFind560.add(Releases.v560.cloneTriple(triples.get(i))); } /* Shuffle is import because the order might play a role. We want to test the performance of the contains method regardless of the order */ - java.util.Collections.shuffle(this.triplesToFind480, new Random(4721)); + java.util.Collections.shuffle(this.triplesToFind560, new Random(4721)); } break; default: @@ -213,7 +203,7 @@ public void setupTrial() throws Exception { @Test public void benchmark() throws Exception { - var opt = JMHDefaultOptions.getDefaults(this.getClass()) + var opt = JmhDefaultOptions.getDefaults(this.getClass()) .build(); var results = new Runner(opt).run(); assertNotNull(results); diff --git a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/graph/TestGraphStreamByMatchAndFindAny.java b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/graph/TestGraphStreamByMatchAndFindAny.java index de8b887a5bc..e79bac90bd5 100644 --- a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/graph/TestGraphStreamByMatchAndFindAny.java +++ b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/graph/TestGraphStreamByMatchAndFindAny.java @@ -23,9 +23,9 @@ import org.apache.jena.graph.Graph; import org.apache.jena.graph.Triple; +import org.apache.jena.jmh.JmhDefaultOptions; import org.apache.jena.mem.GraphMemRoaring; import org.apache.jena.mem.graph.helper.Context; -import org.apache.jena.mem.graph.helper.JMHDefaultOptions; import org.apache.jena.mem.graph.helper.Releases; import org.junit.Test; @@ -54,17 +54,21 @@ public class TestGraphStreamByMatchAndFindAny { @Param({ "GraphMemFast (current)", - "GraphMemRoaring EAGER (current)", + "GraphMemValue (current)", +// "GraphMemRoaring EAGER (current)", // "GraphMemRoaring LAZY (current)", - "GraphMemRoaring LAZY_PARALLEL (current)", -// "GraphMem (Jena 4.8.0)", +// "GraphMemRoaring LAZY_PARALLEL (current)", +// "GraphMemRoaring MINIMAL (current)", +// "GraphMemValue (Jena 5.6.0)", + "GraphMemFast (Jena 5.6.0)", + "GraphMemValue (Jena 5.6.0)", }) public String param1_GraphImplementation; java.util.function.Function graphStream; private Graph sutCurrent; - private org.apache.shadedJena480.graph.Graph sut480; + private org.apache.shadedJena560.graph.Graph sut560; private List triplesToFindCurrent; - private List triplesToFind480; + private List triplesToFind560; @Benchmark public Object graphStreamS__() { @@ -108,11 +112,11 @@ private Object graphStreamByMatchAndFindAnyCurrent(String pattern) { return t; } - private Object graphFindByMatcheAndFindAny480(String pattern) { - var streamFunction = getStreamFunctionByPattern480(pattern); - org.apache.shadedJena480.graph.Triple t = null; - for (org.apache.shadedJena480.graph.Triple sample : this.triplesToFind480) { - final Optional ot = streamFunction.apply(sample).findAny(); + private Object graphFindByMatchAndFindAny560(String pattern) { + var streamFunction = getStreamFunctionByPattern560(pattern); + org.apache.shadedJena560.graph.Triple t = null; + for (org.apache.shadedJena560.graph.Triple sample : this.triplesToFind560) { + final Optional ot = streamFunction.apply(sample).findAny(); assertTrue(ot.isPresent()); t = ot.get(); assertNotNull(t); @@ -121,45 +125,31 @@ private Object graphFindByMatcheAndFindAny480(String pattern) { } Function> getStreamFunctionByPatternCurrent(String pattern) { - switch (pattern) { - case "S__": - return t -> sutCurrent.stream(t.getSubject(), null, null); - case "_P_": - return t -> sutCurrent.stream(null, t.getPredicate(), null); - case "__O": - return t -> sutCurrent.stream(null, null, t.getObject()); - case "SP_": - return t -> sutCurrent.stream(t.getSubject(), t.getPredicate(), null); - case "S_O": - return t -> sutCurrent.stream(t.getSubject(), null, t.getObject()); - case "_PO": - return t -> sutCurrent.stream(null, t.getPredicate(), t.getObject()); - default: - throw new IllegalArgumentException("Unknown pattern: " + pattern); - } + return switch (pattern) { + case "S__" -> t -> sutCurrent.stream(t.getSubject(), null, null); + case "_P_" -> t -> sutCurrent.stream(null, t.getPredicate(), null); + case "__O" -> t -> sutCurrent.stream(null, null, t.getObject()); + case "SP_" -> t -> sutCurrent.stream(t.getSubject(), t.getPredicate(), null); + case "S_O" -> t -> sutCurrent.stream(t.getSubject(), null, t.getObject()); + case "_PO" -> t -> sutCurrent.stream(null, t.getPredicate(), t.getObject()); + default -> throw new IllegalArgumentException("Unknown pattern: " + pattern); + }; } - Function> getStreamFunctionByPattern480(String pattern) { - switch (pattern) { - case "S__": - return t -> sut480.stream(t.getSubject(), null, null); - case "_P_": - return t -> sut480.stream(null, t.getPredicate(), null); - case "__O": - return t -> sut480.stream(null, null, t.getObject()); - case "SP_": - return t -> sut480.stream(t.getSubject(), t.getPredicate(), null); - case "S_O": - return t -> sut480.stream(t.getSubject(), null, t.getObject()); - case "_PO": - return t -> sut480.stream(null, t.getPredicate(), t.getObject()); - default: - throw new IllegalArgumentException("Unknown pattern: " + pattern); - } + Function> getStreamFunctionByPattern560(String pattern) { + return switch (pattern) { + case "S__" -> t -> sut560.stream(t.getSubject(), null, null); + case "_P_" -> t -> sut560.stream(null, t.getPredicate(), null); + case "__O" -> t -> sut560.stream(null, null, t.getObject()); + case "SP_" -> t -> sut560.stream(t.getSubject(), t.getPredicate(), null); + case "S_O" -> t -> sut560.stream(t.getSubject(), null, t.getObject()); + case "_PO" -> t -> sut560.stream(null, t.getPredicate(), t.getObject()); + default -> throw new IllegalArgumentException("Unknown pattern: " + pattern); + }; } @Setup(Level.Trial) - public void setupTrial() throws Exception { + public void setupTrial() { Context trialContext = new Context(param1_GraphImplementation); switch (trialContext.getJenaVersion()) { case CURRENT: { @@ -181,18 +171,18 @@ public void setupTrial() throws Exception { java.util.Collections.shuffle(this.triplesToFindCurrent, new Random(4721)); } break; - case JENA_4_8_0: { - this.sut480 = Releases.v480.createGraph(trialContext.getGraphClass()); - this.graphStream = this::graphFindByMatcheAndFindAny480; + case JENA_5_6_0: { + this.sut560 = Releases.v560.createGraph(trialContext.getGraphClass()); + this.graphStream = this::graphFindByMatchAndFindAny560; - var triples = Releases.v480.readTriples(param0_GraphUri); - triples.forEach(this.sut480::add); + var triples = Releases.v560.readTriples(param0_GraphUri); + triples.forEach(this.sut560::add); /*clone the triples because they should not be the same objects*/ - this.triplesToFind480 = Releases.v480.cloneTriples(triples); + this.triplesToFind560 = Releases.v560.cloneTriples(triples); /* Shuffle is import because the order might play a role. We want to test the performance of the contains method regardless of the order */ - java.util.Collections.shuffle(this.triplesToFind480, new Random(4721)); + java.util.Collections.shuffle(this.triplesToFind560, new Random(4721)); } break; default: @@ -202,7 +192,7 @@ public void setupTrial() throws Exception { @Test public void benchmark() throws Exception { - var opt = JMHDefaultOptions.getDefaults(this.getClass()) + var opt = JmhDefaultOptions.getDefaults(this.getClass()) .build(); var results = new Runner(opt).run(); assertNotNull(results); diff --git a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/graph/helper/Context.java b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/graph/helper/Context.java index 39beea9225b..aa6c6d61583 100644 --- a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/graph/helper/Context.java +++ b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/graph/helper/Context.java @@ -32,7 +32,7 @@ public class Context { public Context(String graphImplementation) { switch (graphImplementation) { - case "GraphMem (current)": + case "GraphMemValue (current)": this.graphClass = GraphClass.GraphMemValue; this.jenaVersion = JenaVersion.CURRENT; break; @@ -45,9 +45,6 @@ public Context(String graphImplementation) { this.jenaVersion = JenaVersion.CURRENT; break; case "GraphMemRoaring (current)": - this.graphClass = GraphClass.GraphMemRoaringEager; - this.jenaVersion = JenaVersion.CURRENT; - break; case "GraphMemRoaring EAGER (current)": this.graphClass = GraphClass.GraphMemRoaringEager; this.jenaVersion = JenaVersion.CURRENT; @@ -68,9 +65,18 @@ public Context(String graphImplementation) { this.graphClass = GraphClass.GraphMemRoaringManual; this.jenaVersion = JenaVersion.CURRENT; break; - case "GraphMem (Jena 4.8.0)": + case "GraphMemValue (Jena 5.6.0)": this.graphClass = GraphClass.GraphMemValue; - this.jenaVersion = JenaVersion.JENA_4_8_0; + this.jenaVersion = JenaVersion.JENA_5_6_0; + break; + case "GraphMemFast (Jena 5.6.0)": + this.graphClass = GraphClass.GraphMemFast; + this.jenaVersion = JenaVersion.JENA_5_6_0; + break; + case "GraphMemRoaring (Jena 5.6.0)": + case "GraphMemRoaring EAGER (Jena 5.6.0)": + this.graphClass = GraphClass.GraphMemRoaringEager; + this.jenaVersion = JenaVersion.JENA_5_6_0; break; default: throw new IllegalArgumentException("Unknown graph implementation: " + graphImplementation); diff --git a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/graph/helper/GraphTripleNodeHelper480.java b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/graph/helper/GraphTripleNodeHelper560.java similarity index 62% rename from jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/graph/helper/GraphTripleNodeHelper480.java rename to jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/graph/helper/GraphTripleNodeHelper560.java index 2171bbd8c7a..8b4c20cc1ac 100644 --- a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/graph/helper/GraphTripleNodeHelper480.java +++ b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/graph/helper/GraphTripleNodeHelper560.java @@ -20,26 +20,35 @@ */ package org.apache.jena.mem.graph.helper; -import org.apache.shadedJena480.graph.Graph; -import org.apache.shadedJena480.graph.Node; -import org.apache.shadedJena480.graph.NodeFactory; -import org.apache.shadedJena480.graph.Triple; -import org.apache.shadedJena480.mem.GraphMem; -import org.apache.shadedJena480.riot.RDFDataMgr; - import java.util.ArrayList; import java.util.List; -import java.util.Objects; -public class GraphTripleNodeHelper480 implements GraphTripleNodeHelper { +import org.apache.shadedJena560.mem2.GraphMem2Fast; +import org.apache.shadedJena560.mem2.GraphMem2Legacy; +import org.apache.shadedJena560.mem2.GraphMem2Roaring; +import org.apache.shadedJena560.mem2.IndexingStrategy; +import org.apache.shadedJena560.graph.Graph; +import org.apache.shadedJena560.graph.Node; +import org.apache.shadedJena560.graph.NodeFactory; +import org.apache.shadedJena560.graph.Triple; +import org.apache.shadedJena560.mem.GraphMem; +import org.apache.shadedJena560.riot.RDFDataMgr; + +public class GraphTripleNodeHelper560 implements GraphTripleNodeHelper { @SuppressWarnings("deprecation") @Override public Graph createGraph(Context.GraphClass graphClass) { - if (Objects.requireNonNull(graphClass) == Context.GraphClass.GraphMemValue) { - return new GraphMem(); - } - throw new IllegalArgumentException("Unknown graph class: " + graphClass); + return switch (graphClass) { + case GraphMemValue -> new GraphMem(); + case GraphMemFast -> new GraphMem2Fast(); + case GraphMemLegacy -> new GraphMem2Legacy(); + case GraphMemRoaringEager -> new GraphMem2Roaring(IndexingStrategy.EAGER); + case GraphMemRoaringLazy -> new GraphMem2Roaring(IndexingStrategy.LAZY); + case GraphMemRoaringLazyParallel -> new GraphMem2Roaring(IndexingStrategy.LAZY_PARALLEL); + case GraphMemRoaringMinimal -> new GraphMem2Roaring(IndexingStrategy.MINIMAL); + case GraphMemRoaringManual -> new GraphMem2Roaring(IndexingStrategy.MANUAL); + }; } @SuppressWarnings("deprecation") @@ -72,7 +81,7 @@ public Triple cloneTriple(Triple triple) { @Override public Node cloneNode(Node node) { if (node.isLiteral()) { - return NodeFactory.createLiteralByValue(node.getLiteralLexicalForm(), node.getLiteralLanguage(), node.getLiteralDatatype()); + return NodeFactory.createLiteral(node.getLiteralLexicalForm(), node.getLiteralLanguage(), node.getLiteralDatatype()); } if (node.isURI()) { return NodeFactory.createURI(node.getURI()); diff --git a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/graph/helper/GraphTripleNodeHelperCurrent.java b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/graph/helper/GraphTripleNodeHelperCurrent.java index d6a29dd50ad..9806bb64184 100644 --- a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/graph/helper/GraphTripleNodeHelperCurrent.java +++ b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/graph/helper/GraphTripleNodeHelperCurrent.java @@ -20,6 +20,9 @@ */ package org.apache.jena.mem.graph.helper; +import java.util.ArrayList; +import java.util.List; + import org.apache.jena.graph.Graph; import org.apache.jena.graph.Node; import org.apache.jena.graph.NodeFactory; @@ -30,34 +33,21 @@ import org.apache.jena.mem.IndexingStrategy; import org.apache.jena.riot.RDFDataMgr; -import java.util.ArrayList; -import java.util.List; - public class GraphTripleNodeHelperCurrent implements GraphTripleNodeHelper { @SuppressWarnings("deprecation") @Override public Graph createGraph(Context.GraphClass graphClass) { - switch (graphClass) { - case GraphMemValue: - return new org.apache.jena.memvalue.GraphMemValue(); - case GraphMemFast: - return new GraphMemFast(); - case GraphMemLegacy: - return new GraphMemLegacy(); - case GraphMemRoaringEager: - return new GraphMemRoaring(IndexingStrategy.EAGER); - case GraphMemRoaringLazy: - return new GraphMemRoaring(IndexingStrategy.LAZY); - case GraphMemRoaringLazyParallel: - return new GraphMemRoaring(IndexingStrategy.LAZY_PARALLEL); - case GraphMemRoaringMinimal: - return new GraphMemRoaring(IndexingStrategy.MINIMAL); - case GraphMemRoaringManual: - return new GraphMemRoaring(IndexingStrategy.MANUAL); - default: - throw new IllegalArgumentException("Unknown graph class: " + graphClass); - } + return switch (graphClass) { + case GraphMemValue -> new org.apache.jena.memvalue.GraphMemValue(); + case GraphMemFast -> new GraphMemFast(); + case GraphMemLegacy -> new GraphMemLegacy(); + case GraphMemRoaringEager -> new GraphMemRoaring(IndexingStrategy.EAGER); + case GraphMemRoaringLazy -> new GraphMemRoaring(IndexingStrategy.LAZY); + case GraphMemRoaringLazyParallel -> new GraphMemRoaring(IndexingStrategy.LAZY_PARALLEL); + case GraphMemRoaringMinimal -> new GraphMemRoaring(IndexingStrategy.MINIMAL); + case GraphMemRoaringManual -> new GraphMemRoaring(IndexingStrategy.MANUAL); + }; } @Override diff --git a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/graph/helper/JMHDefaultOptions.java b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/graph/helper/JMHDefaultOptions.java deleted file mode 100644 index bab15c50737..00000000000 --- a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/graph/helper/JMHDefaultOptions.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - * - * SPDX-License-Identifier: Apache-2.0 - */ -package org.apache.jena.mem.graph.helper; - -import org.openjdk.jmh.annotations.Mode; -import org.openjdk.jmh.results.format.ResultFormatType; -import org.openjdk.jmh.runner.options.ChainedOptionsBuilder; -import org.openjdk.jmh.runner.options.OptionsBuilder; -import org.openjdk.jmh.runner.options.TimeValue; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.concurrent.TimeUnit; - -/** - * Default options for JMH benchmarks for graphs. - */ -public class JMHDefaultOptions { - public static ChainedOptionsBuilder getDefaults(Class c) { - return new OptionsBuilder() - // Specify which benchmarks to run. - // You can be more specific if you'd like to run only one benchmark per test. - .include(c.getName()) - // Set the following options as needed - .mode(Mode.AverageTime) - .timeUnit(TimeUnit.SECONDS) - .warmupTime(TimeValue.NONE) - .warmupIterations(5) - .measurementIterations(15) - .measurementTime(TimeValue.NONE) - .threads(1) - .forks(1) - .shouldFailOnError(true) - .shouldDoGC(true) - //.jvmArgs("-XX:+UnlockDiagnosticVMOptions", "-XX:+PrintInlining") - .jvmArgs("-Xmx12G") - //.addProfiler(WinPerfAsmProfiler.class) - .resultFormat(ResultFormatType.JSON) - .result(c.getSimpleName() + "_" + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + ".json"); - } -} diff --git a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/graph/helper/Releases.java b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/graph/helper/Releases.java index de39fad16e0..bf8d3411ae3 100644 --- a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/graph/helper/Releases.java +++ b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/graph/helper/Releases.java @@ -29,6 +29,6 @@ */ public class Releases { - public static GraphTripleNodeHelper current = new GraphTripleNodeHelperCurrent(); - public static GraphTripleNodeHelper v480 = new GraphTripleNodeHelper480(); + public static final GraphTripleNodeHelper current = new GraphTripleNodeHelperCurrent(); + public static final GraphTripleNodeHelper v560 = new GraphTripleNodeHelper560(); } diff --git a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/map/node/HashCommonNodeMap.java b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/map/node/HashCommonNodeMap.java index 601d62a41eb..95f2975b353 100644 --- a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/map/node/HashCommonNodeMap.java +++ b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/map/node/HashCommonNodeMap.java @@ -30,7 +30,7 @@ public class HashCommonNodeMap extends HashCommonMap { * capacity and the corresponding threshold. All the key elements start out * null. * - * @param initialCapacity + * @param initialCapacity Initial capacity */ public HashCommonNodeMap(int initialCapacity) { super(initialCapacity); diff --git a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/map/node/TestMapAdd.java b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/map/node/TestMapAdd.java index 70c5cb09dfa..b40b4adf214 100644 --- a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/map/node/TestMapAdd.java +++ b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/map/node/TestMapAdd.java @@ -21,19 +21,19 @@ package org.apache.jena.mem.map.node; +import java.util.HashMap; +import java.util.List; + import org.apache.jena.graph.Node; import org.apache.jena.graph.Triple; +import org.apache.jena.jmh.JmhDefaultOptions; import org.apache.jena.mem.graph.helper.Releases; -import org.apache.jena.mem.helper.JMHDefaultOptions; import org.junit.Assert; import org.junit.Test; import org.openjdk.jmh.annotations.*; import org.openjdk.jmh.runner.Runner; -import java.util.HashMap; -import java.util.List; - @State(Scope.Benchmark) public class TestMapAdd { @@ -88,7 +88,7 @@ private Object addToHashCommonNodeMap(Triple.Field field) { } @Setup(Level.Trial) - public void setupTrial() throws Exception { + public void setupTrial() { triples = Releases.current.readTriples(param0_GraphUri); switch (param1_SetImplementation) { case "HashMap": @@ -107,7 +107,7 @@ public void setupTrial() throws Exception { @Test public void benchmark() throws Exception { - var opt = JMHDefaultOptions.getDefaults(this.getClass()) + var opt = JmhDefaultOptions.getDefaults(this.getClass()) .build(); var results = new Runner(opt).run(); Assert.assertNotNull(results); diff --git a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/map/node/TestMapContains.java b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/map/node/TestMapContains.java index c1d5dbca435..6898d85393a 100644 --- a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/map/node/TestMapContains.java +++ b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/map/node/TestMapContains.java @@ -21,19 +21,19 @@ package org.apache.jena.mem.map.node; +import java.util.HashMap; +import java.util.List; + import org.apache.jena.graph.Node; import org.apache.jena.graph.Triple; +import org.apache.jena.jmh.JmhDefaultOptions; import org.apache.jena.mem.graph.helper.Releases; -import org.apache.jena.mem.helper.JMHDefaultOptions; import org.junit.Assert; import org.junit.Test; import org.openjdk.jmh.annotations.*; import org.openjdk.jmh.runner.Runner; -import java.util.HashMap; -import java.util.List; - @State(Scope.Benchmark) public class TestMapContains { @@ -164,7 +164,7 @@ private boolean FastHashNodeMapContainsObjects() { } @Setup(Level.Trial) - public void setupTrial() throws Exception { + public void setupTrial() { var triples = Releases.current.readTriples(param0_GraphUri); this.triplesToFind = Releases.current.cloneTriples(triples); switch (param1_SetImplementation) { @@ -214,7 +214,7 @@ public void setupTrial() throws Exception { @Test public void benchmark() throws Exception { - var opt = JMHDefaultOptions.getDefaults(this.getClass()) + var opt = JmhDefaultOptions.getDefaults(this.getClass()) .build(); var results = new Runner(opt).run(); Assert.assertNotNull(results); diff --git a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/set/triple/TestSetAdd.java b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/set/triple/TestSetAdd.java index 4ebfa9d66d0..1bf8edf0e6f 100644 --- a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/set/triple/TestSetAdd.java +++ b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/set/triple/TestSetAdd.java @@ -21,18 +21,18 @@ package org.apache.jena.mem.set.triple; +import java.util.HashSet; +import java.util.List; + import org.apache.jena.graph.Triple; +import org.apache.jena.jmh.JmhDefaultOptions; import org.apache.jena.mem.graph.helper.Releases; -import org.apache.jena.mem.helper.JMHDefaultOptions; import org.junit.Assert; import org.junit.Test; import org.openjdk.jmh.annotations.*; import org.openjdk.jmh.runner.Runner; -import java.util.HashSet; -import java.util.List; - @State(Scope.Benchmark) public class TestSetAdd { @@ -59,8 +59,7 @@ public Object addToSet() { } private Object addToHashSet() { - var sut = new HashSet(); - triples.forEach(sut::add); + var sut = new HashSet<>(triples); Assert.assertEquals(triples.size(), sut.size()); return sut; } @@ -80,7 +79,7 @@ private Object addToFastHashTripleSet() { } @Setup(Level.Trial) - public void setupTrial() throws Exception { + public void setupTrial() { triples = Releases.current.readTriples(param0_GraphUri); switch (param1_SetImplementation) { case "HashSet": @@ -99,7 +98,7 @@ public void setupTrial() throws Exception { @Test public void benchmark() throws Exception { - var opt = JMHDefaultOptions.getDefaults(this.getClass()) + var opt = JmhDefaultOptions.getDefaults(this.getClass()) .build(); var results = new Runner(opt).run(); Assert.assertNotNull(results); diff --git a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/set/triple/TestSetContains.java b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/set/triple/TestSetContains.java index 30ace9836ec..6451d8acea3 100644 --- a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/set/triple/TestSetContains.java +++ b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/set/triple/TestSetContains.java @@ -21,18 +21,18 @@ package org.apache.jena.mem.set.triple; +import java.util.HashSet; +import java.util.List; + import org.apache.jena.graph.Triple; +import org.apache.jena.jmh.JmhDefaultOptions; import org.apache.jena.mem.graph.helper.Releases; -import org.apache.jena.mem.helper.JMHDefaultOptions; import org.junit.Assert; import org.junit.Test; import org.openjdk.jmh.annotations.*; import org.openjdk.jmh.runner.Runner; -import java.util.HashSet; -import java.util.List; - @State(Scope.Benchmark) public class TestSetContains { @@ -89,13 +89,13 @@ private boolean fastHashTripleSetContains() { } @Setup(Level.Trial) - public void setupTrial() throws Exception { + public void setupTrial() { var triples = Releases.current.readTriples(param0_GraphUri); this.triplesToFind = Releases.current.cloneTriples(triples); switch (param1_SetImplementation) { case "HashSet": this.tripleHashSet = new HashSet<>(triples.size()); - triples.forEach(tripleHashSet::add); + tripleHashSet.addAll(triples); this.setContains = this::hashSetContains; break; case "HashCommonTripleSet": @@ -115,7 +115,7 @@ public void setupTrial() throws Exception { @Test public void benchmark() throws Exception { - var opt = JMHDefaultOptions.getDefaults(this.getClass()) + var opt = JmhDefaultOptions.getDefaults(this.getClass()) .build(); var results = new Runner(opt).run(); Assert.assertNotNull(results); diff --git a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/set/triple/TestSetIterate.java b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/set/triple/TestSetIterate.java index fac7a6c462a..270cd7a1c74 100644 --- a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/set/triple/TestSetIterate.java +++ b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/set/triple/TestSetIterate.java @@ -21,20 +21,20 @@ package org.apache.jena.mem.set.triple; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; + import org.apache.jena.atlas.iterator.ActionCount; import org.apache.jena.graph.Triple; +import org.apache.jena.jmh.JmhDefaultOptions; import org.apache.jena.mem.graph.helper.Releases; -import org.apache.jena.mem.helper.JMHDefaultOptions; import org.junit.Assert; import org.junit.Test; import org.openjdk.jmh.annotations.*; import org.openjdk.jmh.runner.Runner; -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; - import static org.junit.Assert.assertEquals; @@ -95,12 +95,12 @@ private Iterator getIteratorFromFastHashTripleSet() { @Setup(Level.Trial) - public void setupTrial() throws Exception { + public void setupTrial() { this.triples = Releases.current.readTriples(param0_GraphUri); switch (param1_SetImplementation) { case "HashSet": this.hashSet = new HashSet<>(triples.size()); - triples.forEach(hashSet::add); + hashSet.addAll(triples); this.getIterator = this::getIteratorFromHashSet; break; case "HashCommonTripleSet": @@ -120,7 +120,7 @@ public void setupTrial() throws Exception { @Test public void benchmark() throws Exception { - var opt = JMHDefaultOptions.getDefaults(this.getClass()) + var opt = JmhDefaultOptions.getDefaults(this.getClass()) .build(); var results = new Runner(opt).run(); Assert.assertNotNull(results); diff --git a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/set/triple/TestSetMemoryConsumption.java b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/set/triple/TestSetMemoryConsumption.java index 0ea13bec91b..75d1a72d908 100644 --- a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/set/triple/TestSetMemoryConsumption.java +++ b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/set/triple/TestSetMemoryConsumption.java @@ -21,19 +21,20 @@ package org.apache.jena.mem.set.triple; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.HashSet; +import java.util.List; + import org.apache.commons.lang3.time.StopWatch; import org.apache.jena.graph.Triple; -import org.apache.jena.mem.graph.helper.JMHDefaultOptions; +import org.apache.jena.jmh.JmhDefaultOptions; import org.apache.jena.mem.graph.helper.Releases; import org.junit.Assert; import org.junit.Test; import org.openjdk.jmh.annotations.*; import org.openjdk.jmh.runner.Runner; -import java.math.BigDecimal; -import java.util.HashSet; -import java.util.List; - @State(Scope.Benchmark) public class TestSetMemoryConsumption { @@ -58,13 +59,10 @@ public class TestSetMemoryConsumption { * * @return the memory consumption in MB */ - @SuppressWarnings("removal") private static double runGcAndGetUsedMemoryInMB() { - System.runFinalization(); System.gc(); - Runtime.getRuntime().runFinalization(); Runtime.getRuntime().gc(); - return BigDecimal.valueOf(Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory()).divide(BigDecimal.valueOf(1024L)).divide(BigDecimal.valueOf(1024L)).doubleValue(); + return BigDecimal.valueOf(Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory()).divide(BigDecimal.valueOf(1024L), 3, RoundingMode.HALF_UP).divide(BigDecimal.valueOf(1024L), 3, RoundingMode.HALF_UP).doubleValue(); } @Benchmark @@ -82,8 +80,7 @@ public Object fillSet() { } private Object fillHashSet() { - var sut = new HashSet(); - triples.forEach(sut::add); + var sut = new HashSet<>(triples); Assert.assertEquals(triples.size(), sut.size()); return sut; } @@ -104,7 +101,7 @@ private Object fillFastHashTripleSet() { @Setup(Level.Trial) - public void setupTrial() throws Exception { + public void setupTrial() { triples = Releases.current.readTriples(param0_GraphUri); switch (param1_SetImplementation) { case "HashSet": @@ -123,7 +120,7 @@ public void setupTrial() throws Exception { @Test public void benchmark() throws Exception { - var opt = JMHDefaultOptions.getDefaults(this.getClass()) + var opt = JmhDefaultOptions.getDefaults(this.getClass()) .warmupIterations(3) .measurementIterations(3) .build(); diff --git a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/set/triple/TestSetRemove.java b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/set/triple/TestSetRemove.java index 8c7d3682065..93b814a4b79 100644 --- a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/set/triple/TestSetRemove.java +++ b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/set/triple/TestSetRemove.java @@ -21,18 +21,18 @@ package org.apache.jena.mem.set.triple; +import java.util.HashSet; +import java.util.List; + import org.apache.jena.graph.Triple; +import org.apache.jena.jmh.JmhDefaultOptions; import org.apache.jena.mem.graph.helper.Releases; -import org.apache.jena.mem.helper.JMHDefaultOptions; import org.junit.Assert; import org.junit.Test; import org.openjdk.jmh.annotations.*; import org.openjdk.jmh.runner.Runner; -import java.util.HashSet; -import java.util.List; - @State(Scope.Benchmark) public class TestSetRemove { @@ -84,7 +84,7 @@ public void setupInvocation() { switch (param1_SetImplementation) { case "HashSet": this.hashSet = new HashSet<>(triples.size()); - this.triples.forEach(hashSet::add); + hashSet.addAll(this.triples); break; case "HashCommonTripleSet": this.hashCommonTripleSet = new HashCommonTripleSet(triples.size()); @@ -100,7 +100,7 @@ public void setupInvocation() { } @Setup(Level.Trial) - public void setupTrial() throws Exception { + public void setupTrial() { this.triples = Releases.current.readTriples(param0_GraphUri); this.triplesToRemove = Releases.current.cloneTriples(triples); switch (param1_SetImplementation) { @@ -120,7 +120,7 @@ public void setupTrial() throws Exception { @Test public void benchmark() throws Exception { - var opt = JMHDefaultOptions.getDefaults(this.getClass()) + var opt = JmhDefaultOptions.getDefaults(this.getClass()) .build(); var results = new Runner(opt).run(); Assert.assertNotNull(results); diff --git a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/set/triple/TestSetStreamAll.java b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/set/triple/TestSetStreamAll.java index 4175ed02686..df775be3c53 100644 --- a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/set/triple/TestSetStreamAll.java +++ b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/set/triple/TestSetStreamAll.java @@ -21,20 +21,20 @@ package org.apache.jena.mem.set.triple; +import java.util.HashSet; +import java.util.List; +import java.util.Spliterator; +import java.util.stream.StreamSupport; + import org.apache.jena.graph.Triple; +import org.apache.jena.jmh.JmhDefaultOptions; import org.apache.jena.mem.graph.helper.Releases; -import org.apache.jena.mem.helper.JMHDefaultOptions; import org.junit.Assert; import org.junit.Test; import org.openjdk.jmh.annotations.*; import org.openjdk.jmh.runner.Runner; -import java.util.HashSet; -import java.util.List; -import java.util.Spliterator; -import java.util.stream.StreamSupport; - import static org.junit.Assert.assertEquals; @@ -89,12 +89,12 @@ private Spliterator getSpliteratorFromFastHashTripleSet() { } @Setup(Level.Trial) - public void setupTrial() throws Exception { + public void setupTrial() { this.triples = Releases.current.readTriples(param0_GraphUri); switch (param1_SetImplementation) { case "HashSet": this.hashSet = new HashSet<>(triples.size()); - triples.forEach(hashSet::add); + hashSet.addAll(triples); this.getSpliterator = this::getSpliteratorFromHashSet; break; case "HashCommonTripleSet": @@ -114,7 +114,7 @@ public void setupTrial() throws Exception { @Test public void benchmark() throws Exception { - var opt = JMHDefaultOptions.getDefaults(this.getClass()) + var opt = JmhDefaultOptions.getDefaults(this.getClass()) .build(); var results = new Runner(opt).run(); Assert.assertNotNull(results); diff --git a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/set/triple/TestSetUpdate.java b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/set/triple/TestSetUpdate.java index ed8dde7005c..b6a8d35cb48 100644 --- a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/set/triple/TestSetUpdate.java +++ b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/set/triple/TestSetUpdate.java @@ -21,20 +21,20 @@ package org.apache.jena.mem.set.triple; +import java.util.Collections; +import java.util.HashSet; +import java.util.List; +import java.util.Random; + import org.apache.jena.graph.Triple; +import org.apache.jena.jmh.JmhDefaultOptions; import org.apache.jena.mem.graph.helper.Releases; -import org.apache.jena.mem.helper.JMHDefaultOptions; import org.junit.Assert; import org.junit.Test; import org.openjdk.jmh.annotations.*; import org.openjdk.jmh.runner.Runner; -import java.util.Collections; -import java.util.HashSet; -import java.util.List; -import java.util.Random; - @State(Scope.Benchmark) public class TestSetUpdate { @@ -67,8 +67,7 @@ private int updateHashSet() { for (int i = 0; i < triplesToRemove.size(); i += 10) { triplesToRemove.subList(i, Math.min(i + 10, triplesToRemove.size())) .forEach(t -> this.hashSet.remove(t)); - triplesToRemove.subList(i, Math.min(i + 10, triplesToRemove.size())) - .forEach(t -> this.hashSet.add(t)); + this.hashSet.addAll(triplesToRemove.subList(i, Math.min(i + 10, triplesToRemove.size()))); assert this.hashSet.size() == triples.size(); } return this.hashSet.size(); @@ -102,7 +101,7 @@ public void setupInvocation() { switch (param1_SetImplementation) { case "HashSet": this.hashSet = new HashSet<>(triples.size()); - this.triples.forEach(hashSet::add); + hashSet.addAll(this.triples); break; case "HashCommonTripleSet": this.hashCommonTripleSet = new HashCommonTripleSet(triples.size()); @@ -118,7 +117,7 @@ public void setupInvocation() { } @Setup(Level.Trial) - public void setupTrial() throws Exception { + public void setupTrial() { this.triples = Releases.current.readTriples(param0_GraphUri); this.triplesToRemove = Releases.current.cloneTriples(triples); Collections.shuffle(triplesToRemove, new Random(4721)); @@ -139,7 +138,7 @@ public void setupTrial() throws Exception { @Test public void benchmark() throws Exception { - var opt = JMHDefaultOptions.getDefaults(this.getClass()) + var opt = JmhDefaultOptions.getDefaults(this.getClass()) .build(); var results = new Runner(opt).run(); Assert.assertNotNull(results); diff --git a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/spliterator/TestSparseArraySpliteratorsForeachRemaining.java b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/spliterator/TestSparseArraySpliteratorsForeachRemaining.java index 5a30b810528..54e19b413ef 100644 --- a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/spliterator/TestSparseArraySpliteratorsForeachRemaining.java +++ b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/spliterator/TestSparseArraySpliteratorsForeachRemaining.java @@ -21,22 +21,20 @@ package org.apache.jena.mem.spliterator; +import java.util.ArrayList; +import java.util.List; +import java.util.Spliterator; + import org.apache.jena.atlas.iterator.ActionCount; +import org.apache.jena.jmh.JmhDefaultOptions; + import org.junit.Assert; import org.junit.Test; + import org.openjdk.jmh.annotations.*; -import org.openjdk.jmh.results.format.ResultFormatType; import org.openjdk.jmh.runner.Runner; -import org.openjdk.jmh.runner.options.OptionsBuilder; -import org.openjdk.jmh.runner.options.TimeValue; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; -import java.util.Spliterator; -import java.util.concurrent.TimeUnit; +import static org.junit.Assert.assertNotNull; @State(Scope.Benchmark) public class TestSparseArraySpliteratorsForeachRemaining { @@ -50,8 +48,8 @@ public class TestSparseArraySpliteratorsForeachRemaining { "mem2.SparseArraySpliterator" }) public String param1_iteratorImplementation; - List arraysWithNulls = new ArrayList<>(stepsWithNull.length); - List elementsCounts = new ArrayList<>(stepsWithNull.length); + final List arraysWithNulls = new ArrayList<>(stepsWithNull.length); + final List elementsCounts = new ArrayList<>(stepsWithNull.length); @Benchmark public long testSpliteratorForeachRemaining() { @@ -63,7 +61,7 @@ public long testSpliteratorForeachRemaining() { var sut = createSut(arrayWithNulls, elementsCount); - sut.forEachRemaining(actionCounter::accept); + sut.forEachRemaining(actionCounter); total += actionCounter.getCount(); Assert.assertEquals(elementsCount.longValue(), actionCounter.getCount()); @@ -72,24 +70,24 @@ public long testSpliteratorForeachRemaining() { } public Spliterator createSut(Object[] arrayWithNulls, int elementsCount) { - var count = elementsCount; + @SuppressWarnings("UnnecessaryLocalVariable") var count = elementsCount; Runnable checkForConcurrentModification = () -> { if (count != elementsCount) { throw new RuntimeException("Concurrent modification detected"); } }; - switch (param1_iteratorImplementation) { - case "memvalue.SparseArraySpliterator": - return new org.apache.jena.memvalue.SparseArraySpliterator<>(arrayWithNulls, count, checkForConcurrentModification); - case "mem2.SparseArraySpliterator": - return new SparseArraySpliterator<>(arrayWithNulls, checkForConcurrentModification); - default: - throw new IllegalArgumentException("Unknown spliterator implementation: " + param1_iteratorImplementation); - } + return switch (param1_iteratorImplementation) { + case "memvalue.SparseArraySpliterator" -> + new org.apache.jena.memvalue.SparseArraySpliterator<>(arrayWithNulls, count, checkForConcurrentModification); + case "mem2.SparseArraySpliterator" -> + new SparseArraySpliterator<>(arrayWithNulls, checkForConcurrentModification); + default -> + throw new IllegalArgumentException("Unknown spliterator implementation: " + param1_iteratorImplementation); + }; } @Setup(Level.Trial) - public void setupTrial() throws Exception { + public void setupTrial() { for (int i = 0; i < stepsWithNull.length; i++) { var arrayWithNulls = new Object[param0_arraySize]; var stepsWithNull = TestSparseArraySpliteratorsForeachRemaining.stepsWithNull[i]; @@ -105,29 +103,12 @@ public void setupTrial() throws Exception { @Test public void benchmark() throws Exception { - var opt = new OptionsBuilder() - // Specify which benchmarks to run. - // You can be more specific if you'd like to run only one benchmark per test. - .include(this.getClass().getName()) - // Set the following options as needed - .mode(Mode.AverageTime) - .timeUnit(TimeUnit.SECONDS) - .warmupTime(TimeValue.NONE) + var opt = JmhDefaultOptions.getDefaults(this.getClass()) .warmupIterations(10) .measurementIterations(100) - .measurementTime(TimeValue.NONE) - .threads(1) - .forks(1) - .shouldFailOnError(true) - .shouldDoGC(true) - //.jvmArgs("-XX:+UnlockDiagnosticVMOptions", "-XX:+PrintInlining") - .jvmArgs("-Xmx12G") - //.addProfiler(WinPerfAsmProfiler.class) - .resultFormat(ResultFormatType.JSON) - .result(this.getClass().getSimpleName() + "_" + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + ".json") .build(); var results = new Runner(opt).run(); - Assert.assertNotNull(results); + assertNotNull(results); } } diff --git a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/spliterator/TestSparseArraySpliteratorsStreamParallel.java b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/spliterator/TestSparseArraySpliteratorsStreamParallel.java index 72f5da3ad7f..c28435e8f2a 100644 --- a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/spliterator/TestSparseArraySpliteratorsStreamParallel.java +++ b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/spliterator/TestSparseArraySpliteratorsStreamParallel.java @@ -21,23 +21,21 @@ package org.apache.jena.mem.spliterator; +import java.util.ArrayList; +import java.util.List; +import java.util.Spliterator; +import java.util.stream.StreamSupport; + import org.apache.jena.atlas.iterator.ActionCount; +import org.apache.jena.jmh.JmhDefaultOptions; + import org.junit.Assert; import org.junit.Test; + import org.openjdk.jmh.annotations.*; -import org.openjdk.jmh.results.format.ResultFormatType; import org.openjdk.jmh.runner.Runner; -import org.openjdk.jmh.runner.options.OptionsBuilder; -import org.openjdk.jmh.runner.options.TimeValue; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; -import java.util.Spliterator; -import java.util.concurrent.TimeUnit; -import java.util.stream.StreamSupport; +import static org.junit.Assert.assertNotNull; @State(Scope.Benchmark) public class TestSparseArraySpliteratorsStreamParallel { @@ -51,8 +49,8 @@ public class TestSparseArraySpliteratorsStreamParallel { "mem2.SparseArraySpliterator" }) public String param1_iteratorImplementation; - List arraysWithNulls = new ArrayList<>(stepsWithNull.length); - List elementsCounts = new ArrayList<>(stepsWithNull.length); + final List arraysWithNulls = new ArrayList<>(stepsWithNull.length); + final List elementsCounts = new ArrayList<>(stepsWithNull.length); @Benchmark public long testSpliteratorForeachRemaining() { @@ -73,25 +71,24 @@ public long testSpliteratorForeachRemaining() { } public Spliterator createSut(Object[] arrayWithNulls, int elementsCount) { - var count = elementsCount; + @SuppressWarnings("UnnecessaryLocalVariable") var count = elementsCount; Runnable checkForConcurrentModification = () -> { if (count != elementsCount) { throw new RuntimeException("Concurrent modification detected"); } }; - switch (param1_iteratorImplementation) { - case "memvalue.SparseArraySpliterator": - return new org.apache.jena.memvalue.SparseArraySpliterator<>(arrayWithNulls, count, checkForConcurrentModification); - case "mem2.SparseArraySpliterator": - return new SparseArraySpliterator<>(arrayWithNulls, checkForConcurrentModification); - - default: - throw new IllegalArgumentException("Unknown spliterator implementation: " + param1_iteratorImplementation); - } + return switch (param1_iteratorImplementation) { + case "memvalue.SparseArraySpliterator" -> + new org.apache.jena.memvalue.SparseArraySpliterator<>(arrayWithNulls, count, checkForConcurrentModification); + case "mem2.SparseArraySpliterator" -> + new SparseArraySpliterator<>(arrayWithNulls, checkForConcurrentModification); + default -> + throw new IllegalArgumentException("Unknown spliterator implementation: " + param1_iteratorImplementation); + }; } @Setup(Level.Trial) - public void setupTrial() throws Exception { + public void setupTrial() { for (int i = 0; i < stepsWithNull.length; i++) { var arrayWithNulls = new Object[param0_arraySize]; var stepsWithNull = TestSparseArraySpliteratorsStreamParallel.stepsWithNull[i]; @@ -107,29 +104,12 @@ public void setupTrial() throws Exception { @Test public void benchmark() throws Exception { - var opt = new OptionsBuilder() - // Specify which benchmarks to run. - // You can be more specific if you'd like to run only one benchmark per test. - .include(this.getClass().getName()) - // Set the following options as needed - .mode(Mode.AverageTime) - .timeUnit(TimeUnit.SECONDS) - .warmupTime(TimeValue.NONE) + var opt = JmhDefaultOptions.getDefaults(this.getClass()) .warmupIterations(10) .measurementIterations(100) - .measurementTime(TimeValue.NONE) - .threads(1) - .forks(1) - .shouldFailOnError(true) - .shouldDoGC(true) - //.jvmArgs("-XX:+UnlockDiagnosticVMOptions", "-XX:+PrintInlining") - .jvmArgs("-Xmx12G") - //.addProfiler(WinPerfAsmProfiler.class) - .resultFormat(ResultFormatType.JSON) - .result(this.getClass().getSimpleName() + "_" + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + ".json") .build(); var results = new Runner(opt).run(); - Assert.assertNotNull(results); + assertNotNull(results); } } diff --git a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/spliterator/TestSparseArraySpliteratorsTryAdvance.java b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/spliterator/TestSparseArraySpliteratorsTryAdvance.java index 1c9652e2731..d5582824587 100644 --- a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/spliterator/TestSparseArraySpliteratorsTryAdvance.java +++ b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/mem/spliterator/TestSparseArraySpliteratorsTryAdvance.java @@ -21,22 +21,20 @@ package org.apache.jena.mem.spliterator; +import java.util.ArrayList; +import java.util.List; +import java.util.Spliterator; + import org.apache.jena.atlas.iterator.ActionCount; +import org.apache.jena.jmh.JmhDefaultOptions; + import org.junit.Assert; import org.junit.Test; + import org.openjdk.jmh.annotations.*; -import org.openjdk.jmh.results.format.ResultFormatType; import org.openjdk.jmh.runner.Runner; -import org.openjdk.jmh.runner.options.OptionsBuilder; -import org.openjdk.jmh.runner.options.TimeValue; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; -import java.util.Spliterator; -import java.util.concurrent.TimeUnit; +import static org.junit.Assert.assertNotNull; @State(Scope.Benchmark) public class TestSparseArraySpliteratorsTryAdvance { @@ -50,8 +48,8 @@ public class TestSparseArraySpliteratorsTryAdvance { "mem2.SparseArraySpliterator" }) public String param1_iteratorImplementation; - List arraysWithNulls = new ArrayList<>(stepsWithNull.length); - List elementsCounts = new ArrayList<>(stepsWithNull.length); + final List arraysWithNulls = new ArrayList<>(stepsWithNull.length); + final List elementsCounts = new ArrayList<>(stepsWithNull.length); @Benchmark public long testSpliteratorTryAdvance() { @@ -64,7 +62,7 @@ public long testSpliteratorTryAdvance() { var sut = createSut(arrayWithNulls, elementsCount); do { - } while (sut.tryAdvance(actionCounter::accept)); + } while (sut.tryAdvance(actionCounter)); total += actionCounter.getCount(); Assert.assertEquals(elementsCount.longValue(), actionCounter.getCount()); @@ -74,25 +72,24 @@ public long testSpliteratorTryAdvance() { public Spliterator createSut(Object[] arrayWithNulls, int elementsCount) { - var count = elementsCount; + @SuppressWarnings("UnnecessaryLocalVariable") var count = elementsCount; Runnable checkForConcurrentModification = () -> { if (count != elementsCount) { throw new RuntimeException("Concurrent modification detected"); } }; - switch (param1_iteratorImplementation) { - case "memvalue.SparseArraySpliterator": - return new org.apache.jena.memvalue.SparseArraySpliterator<>(arrayWithNulls, count, checkForConcurrentModification); - case "mem2.SparseArraySpliterator": - return new SparseArraySpliterator<>(arrayWithNulls, checkForConcurrentModification); - - default: - throw new IllegalArgumentException("Unknown spliterator implementation: " + param1_iteratorImplementation); - } + return switch (param1_iteratorImplementation) { + case "memvalue.SparseArraySpliterator" -> + new org.apache.jena.memvalue.SparseArraySpliterator<>(arrayWithNulls, count, checkForConcurrentModification); + case "mem2.SparseArraySpliterator" -> + new SparseArraySpliterator<>(arrayWithNulls, checkForConcurrentModification); + default -> + throw new IllegalArgumentException("Unknown spliterator implementation: " + param1_iteratorImplementation); + }; } @Setup(Level.Trial) - public void setupTrial() throws Exception { + public void setupTrial() { for (int i = 0; i < stepsWithNull.length; i++) { var arrayWithNulls = new Object[param0_arraySize]; var stepsWithNull = TestSparseArraySpliteratorsTryAdvance.stepsWithNull[i]; @@ -108,29 +105,12 @@ public void setupTrial() throws Exception { @Test public void benchmark() throws Exception { - var opt = new OptionsBuilder() - // Specify which benchmarks to run. - // You can be more specific if you'd like to run only one benchmark per test. - .include(this.getClass().getName()) - // Set the following options as needed - .mode(Mode.AverageTime) - .timeUnit(TimeUnit.SECONDS) - .warmupTime(TimeValue.NONE) + var opt = JmhDefaultOptions.getDefaults(this.getClass()) .warmupIterations(10) .measurementIterations(100) - .measurementTime(TimeValue.NONE) - .threads(1) - .forks(1) - .shouldFailOnError(true) - .shouldDoGC(true) - //.jvmArgs("-XX:+UnlockDiagnosticVMOptions", "-XX:+PrintInlining") - .jvmArgs("-Xmx12G") - //.addProfiler(WinPerfAsmProfiler.class) - .resultFormat(ResultFormatType.JSON) - .result(this.getClass().getSimpleName() + "_" + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + ".json") .build(); var results = new Runner(opt).run(); - Assert.assertNotNull(results); + assertNotNull(results); } } diff --git a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/riot/lang/rdfxml/TestXMLParser.java b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/riot/lang/rdfxml/TestXMLParser.java index 0f6a145f077..41630053850 100644 --- a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/riot/lang/rdfxml/TestXMLParser.java +++ b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/riot/lang/rdfxml/TestXMLParser.java @@ -21,19 +21,21 @@ package org.apache.jena.riot.lang.rdfxml; +import java.nio.file.StandardOpenOption; + import org.apache.commons.io.input.BufferedFileChannelInputStream; import org.apache.jena.graph.Graph; +import org.apache.jena.jmh.JmhDefaultOptions; import org.apache.jena.mem.GraphMemFast; -import org.apache.jena.mem.graph.helper.JMHDefaultOptions; import org.apache.jena.riot.Lang; import org.apache.jena.riot.RDFParser; + import org.junit.Assert; import org.junit.Test; + import org.openjdk.jmh.annotations.*; import org.openjdk.jmh.runner.Runner; -import java.nio.file.StandardOpenOption; - @State(Scope.Benchmark) public class TestXMLParser { @@ -49,47 +51,26 @@ public class TestXMLParser { "RRX.RDFXML_SAX", "RRX.RDFXML_StAX_ev", "RRX.RDFXML_StAX_sr", - -// "RRX.RDFXML_ARP0", - "RRX.RDFXML_ARP1" }) public String param1_ParserLang; - @SuppressWarnings("removal") private static Lang getLang(String langName) { - switch (langName) { - case "RRX.RDFXML_SAX": - return RRX.RDFXML_SAX; - case "RRX.RDFXML_StAX_ev": - return RRX.RDFXML_StAX_ev; - case "RRX.RDFXML_StAX_sr": - return RRX.RDFXML_StAX_sr; - case "RRX.RDFXML_ARP1": - return RRX.RDFXML_ARP1; - default: - throw new IllegalArgumentException("Unknown lang: " + langName); - } + return switch (langName) { + case "RRX.RDFXML_SAX" -> RRX.RDFXML_SAX; + case "RRX.RDFXML_StAX_ev" -> RRX.RDFXML_StAX_ev; + case "RRX.RDFXML_StAX_sr" -> RRX.RDFXML_StAX_sr; + default -> throw new IllegalArgumentException("Unknown lang: " + langName); + }; } - @SuppressWarnings("removal") - private static org.apache.shadedJena510.riot.Lang getLangJena510(String langName) { - switch (langName) { - case "RRX.RDFXML_SAX": - return org.apache.shadedJena510.riot.lang.rdfxml.RRX.RDFXML_SAX; - case "RRX.RDFXML_StAX_ev": - return org.apache.shadedJena510.riot.lang.rdfxml.RRX.RDFXML_StAX_ev; - case "RRX.RDFXML_StAX_sr": - return org.apache.shadedJena510.riot.lang.rdfxml.RRX.RDFXML_StAX_sr; - - case "RRX.RDFXML_ARP0": - return org.apache.shadedJena510.riot.lang.rdfxml.RRX.RDFXML_ARP0; - case "RRX.RDFXML_ARP1": - return org.apache.shadedJena510.riot.lang.rdfxml.RRX.RDFXML_ARP1; - - default: - throw new IllegalArgumentException("Unknown lang: " + langName); - } + private static org.apache.shadedJena560.riot.Lang getLangJena560(String langName) { + return switch (langName) { + case "RRX.RDFXML_SAX" -> org.apache.shadedJena560.riot.lang.rdfxml.RRX.RDFXML_SAX; + case "RRX.RDFXML_StAX_ev" -> org.apache.shadedJena560.riot.lang.rdfxml.RRX.RDFXML_StAX_ev; + case "RRX.RDFXML_StAX_sr" -> org.apache.shadedJena560.riot.lang.rdfxml.RRX.RDFXML_StAX_sr; + default -> throw new IllegalArgumentException("Unknown lang: " + langName); + }; } @Benchmark @@ -110,16 +91,16 @@ public Graph parseXML() throws Exception { } @Benchmark - public org.apache.shadedJena510.graph.Graph parseXMLJena510() throws Exception { - final var graph = new org.apache.shadedJena510.mem2.GraphMem2Fast(); + public org.apache.shadedJena560.graph.Graph parseXMLJena560() throws Exception { + final var graph = new org.apache.shadedJena560.mem2.GraphMem2Fast(); try(final var is = new BufferedFileChannelInputStream.Builder() .setFile(this.param0_GraphUri) .setOpenOptions(StandardOpenOption.READ) .setBufferSize(64*4096) .get()) { - org.apache.shadedJena510.riot.RDFParser.source(is) + org.apache.shadedJena560.riot.RDFParser.source(is) .base("xx:") - .forceLang(getLangJena510(this.param1_ParserLang)) + .forceLang(getLangJena560(this.param1_ParserLang)) .checking(false) .parse(graph); } @@ -128,12 +109,12 @@ public org.apache.shadedJena510.graph.Graph parseXMLJena510() throws Exception { @Setup(Level.Trial) public void setup() { - org.apache.shadedJena510.riot.lang.rdfxml.RRX.register(); + org.apache.shadedJena560.riot.lang.rdfxml.RRX.register(); } @Test public void benchmark() throws Exception { - var opt = JMHDefaultOptions.getDefaults(this.getClass()) + var opt = JmhDefaultOptions.getDefaults(this.getClass()) .warmupIterations(2) .measurementIterations(4) .build(); diff --git a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/sparql/engine/benchmark/QueryTaskBuilderRegistry.java b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/sparql/engine/benchmark/QueryTaskBuilderRegistry.java index 977752dfc2a..b96245969f5 100644 --- a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/sparql/engine/benchmark/QueryTaskBuilderRegistry.java +++ b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/sparql/engine/benchmark/QueryTaskBuilderRegistry.java @@ -26,15 +26,15 @@ import java.util.concurrent.ConcurrentHashMap; import org.apache.jena.atlas.lib.Creator; -import org.apache.jena.sparql.engine.join.QueryTaskBuilder480; +import org.apache.jena.sparql.engine.join.QueryTaskBuilder560; import org.apache.jena.sparql.engine.join.QueryTaskBuilderCurrent; public class QueryTaskBuilderRegistry { private static final QueryTaskBuilderRegistry INSTANCE = new QueryTaskBuilderRegistry(); static { - INSTANCE.put("current", () -> new QueryTaskBuilderCurrent()); - INSTANCE.put("4.8.0", () -> new QueryTaskBuilder480()); + INSTANCE.put("current", QueryTaskBuilderCurrent::new); + INSTANCE.put("5.6.0", QueryTaskBuilder560::new); } private final Map> registry = new ConcurrentHashMap<>(); diff --git a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/sparql/engine/benchmark/QueryTaskReader.java b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/sparql/engine/benchmark/QueryTaskReader.java index 4b7219733b0..a2d6778edbf 100644 --- a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/sparql/engine/benchmark/QueryTaskReader.java +++ b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/sparql/engine/benchmark/QueryTaskReader.java @@ -26,11 +26,7 @@ import java.util.stream.Collectors; import org.apache.jena.atlas.lib.Creator; -import org.apache.jena.rdf.model.Model; -import org.apache.jena.rdf.model.Property; -import org.apache.jena.rdf.model.Resource; -import org.apache.jena.rdf.model.ResourceFactory; -import org.apache.jena.rdf.model.Statement; +import org.apache.jena.rdf.model.*; import org.apache.jena.riot.RDFDataMgr; /** Utility methods to read RDF query task descriptions and create {@link QueryTask} objects from them. */ @@ -57,7 +53,7 @@ public static QueryTask loadOne(String location, String jenaVersion, Creator load(String location, String jenaVersion, Creator taskBuilderCreator) { @@ -67,15 +63,14 @@ public static List load(String location, String jenaVersion, Creator< public static List load(Model model, String jenaVersion, Creator taskBuilderCreator) { List taskDescriptions = model.listResourcesWithProperty(queryString).toList(); - List result = taskDescriptions.stream() + return taskDescriptions.stream() .map(task -> configure(task, jenaVersion, taskBuilderCreator.create()).build()) .collect(Collectors.toList()); - return result; } public static QueryTaskBuilder configure(Resource taskDescription, String jenaVersion, QueryTaskBuilder taskBuilder) { String query = taskDescription.getRequiredProperty(queryString).getString(); - long size = Optional.ofNullable(taskDescription.getProperty(expectedResultSetSize)).map(Statement::getLong).orElse(-1l); + long size = Optional.ofNullable(taskDescription.getProperty(expectedResultSetSize)).map(Statement::getLong).orElse(-1L); Set skippedExecutions = taskDescription.listProperties(skipExecution).mapWith(Statement::getString).toSet(); boolean skipExecution = skippedExecutions.contains(jenaVersion); diff --git a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/sparql/engine/benchmark/QueryTaskResult.java b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/sparql/engine/benchmark/QueryTaskResult.java index eccf1e4680d..a39401095be 100644 --- a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/sparql/engine/benchmark/QueryTaskResult.java +++ b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/sparql/engine/benchmark/QueryTaskResult.java @@ -20,36 +20,12 @@ */ package org.apache.jena.sparql.engine.benchmark; -public class QueryTaskResult { - protected String queryString; - protected String originalOpString; - protected String optimizedOpString; - protected long resultSetSize; +import org.jspecify.annotations.NonNull; - public QueryTaskResult(String queryString, String originalOpString, String optimizedOpString, long resultSetSize) { - super(); - this.queryString = queryString; - this.originalOpString = originalOpString; - this.optimizedOpString = optimizedOpString; - this.resultSetSize = resultSetSize; - } - - public String getQueryString() { - return queryString; - } - - public String getOriginalOpString() { - return originalOpString; - } - - public String getOptimizedOpString() { - return optimizedOpString; - } - - public long getResultSetSize() { - return resultSetSize; - } +public record QueryTaskResult(String queryString, String originalOpString, String optimizedOpString, + long resultSetSize) { + @NonNull @Override public String toString() { return String.join("\n", diff --git a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/sparql/engine/benchmark/QueryTaskTestUtils.java b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/sparql/engine/benchmark/QueryTaskTestUtils.java index 9a7689202a0..e9d67dd9804 100644 --- a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/sparql/engine/benchmark/QueryTaskTestUtils.java +++ b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/sparql/engine/benchmark/QueryTaskTestUtils.java @@ -33,7 +33,7 @@ public static void execAndAssert(QueryTask task) { QueryTaskResult data = task.exec(); long expectedResultSetSize = task.getExpectedResultSetSize(); - long actualResultSetSize = data.getResultSetSize(); + long actualResultSetSize = data.resultSetSize(); if (!task.skipValidation()) { if (expectedResultSetSize >= 0) { @@ -49,7 +49,7 @@ public static void execAndAssert(QueryTask task) { System.err.println(String.join("\n", "Query exec result:", // "Query:", data.getOptimizedOpString(), - "Result count:", Long.toString(data.getResultSetSize()))); + "Result count:", Long.toString(data.resultSetSize()))); } } } diff --git a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/sparql/engine/join/BenchmarkHashJoin.java b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/sparql/engine/join/BenchmarkHashJoin.java index d59d1492a1f..12df18a1780 100644 --- a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/sparql/engine/join/BenchmarkHashJoin.java +++ b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/sparql/engine/join/BenchmarkHashJoin.java @@ -27,13 +27,8 @@ import org.apache.jena.sparql.engine.benchmark.QueryTask; import org.apache.jena.sparql.engine.benchmark.QueryTaskReader; import org.apache.jena.sparql.engine.benchmark.QueryTaskTestUtils; -import org.openjdk.jmh.annotations.Benchmark; -import org.openjdk.jmh.annotations.Level; -import org.openjdk.jmh.annotations.Mode; -import org.openjdk.jmh.annotations.Param; -import org.openjdk.jmh.annotations.Scope; -import org.openjdk.jmh.annotations.Setup; -import org.openjdk.jmh.annotations.State; + +import org.openjdk.jmh.annotations.*; import org.openjdk.jmh.results.format.ResultFormatType; import org.openjdk.jmh.runner.Runner; import org.openjdk.jmh.runner.RunnerException; @@ -47,7 +42,7 @@ public class BenchmarkHashJoin { @Param({ "current", - "4.8.0" + "5.6.0" }) public String param0_jenaVersion; @@ -66,12 +61,12 @@ public class BenchmarkHashJoin { private QueryTask task; @Benchmark - public void runTask() throws Exception { + public void runTask() { QueryTaskTestUtils.execAndAssert(task); } @Setup(Level.Trial) - public void setupTrial() throws Exception { + public void setupTrial() { task = QueryTaskReader.loadOne(param1_queryFile, param0_jenaVersion); } diff --git a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/sparql/engine/join/QueryTask480.java b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/sparql/engine/join/QueryTask560.java similarity index 77% rename from jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/sparql/engine/join/QueryTask480.java rename to jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/sparql/engine/join/QueryTask560.java index cd0539aff55..b1135728e50 100644 --- a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/sparql/engine/join/QueryTask480.java +++ b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/sparql/engine/join/QueryTask560.java @@ -24,25 +24,25 @@ import org.apache.jena.sparql.engine.benchmark.QueryTask; import org.apache.jena.sparql.engine.benchmark.QueryTaskResult; -import org.apache.shadedJena480.query.ARQ; -import org.apache.shadedJena480.query.ResultSet; -import org.apache.shadedJena480.query.ResultSetFormatter; -import org.apache.shadedJena480.sparql.ARQConstants; -import org.apache.shadedJena480.sparql.algebra.Op; -import org.apache.shadedJena480.sparql.algebra.optimize.Optimize; -import org.apache.shadedJena480.sparql.algebra.optimize.Rewrite; -import org.apache.shadedJena480.sparql.algebra.optimize.RewriteFactory; -import org.apache.shadedJena480.sparql.core.DatasetGraphFactory; -import org.apache.shadedJena480.sparql.exec.QueryExec; -import org.apache.shadedJena480.sparql.util.Context; -import org.apache.shadedJena480.sys.JenaSystem; +import org.apache.shadedJena560.query.ARQ; +import org.apache.shadedJena560.query.ResultSet; +import org.apache.shadedJena560.query.ResultSetFormatter; +import org.apache.shadedJena560.sparql.ARQConstants; +import org.apache.shadedJena560.sparql.algebra.Op; +import org.apache.shadedJena560.sparql.algebra.optimize.Optimize; +import org.apache.shadedJena560.sparql.algebra.optimize.Rewrite; +import org.apache.shadedJena560.sparql.algebra.optimize.RewriteFactory; +import org.apache.shadedJena560.sparql.core.DatasetGraphFactory; +import org.apache.shadedJena560.sparql.exec.QueryExec; +import org.apache.shadedJena560.sparql.util.Context; +import org.apache.shadedJena560.sys.JenaSystem; -public class QueryTask480 +public class QueryTask560 extends QueryTask { static { JenaSystem.init(); } - public QueryTask480(String queryString, long expectedResultSetSize, boolean skipExecution, boolean skipValidation) { + public QueryTask560(String queryString, long expectedResultSetSize, boolean skipExecution, boolean skipValidation) { super(queryString, expectedResultSetSize, skipExecution, skipValidation); } diff --git a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/sparql/engine/join/QueryTaskBuilder480.java b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/sparql/engine/join/QueryTaskBuilder560.java similarity index 92% rename from jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/sparql/engine/join/QueryTaskBuilder480.java rename to jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/sparql/engine/join/QueryTaskBuilder560.java index 9419f5b712c..4580d095b36 100644 --- a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/sparql/engine/join/QueryTaskBuilder480.java +++ b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/sparql/engine/join/QueryTaskBuilder560.java @@ -23,11 +23,11 @@ import org.apache.jena.sparql.engine.benchmark.QueryTask; import org.apache.jena.sparql.engine.benchmark.QueryTaskBuilder; -public class QueryTaskBuilder480 +public class QueryTaskBuilder560 extends QueryTaskBuilder { @Override public QueryTask build() { - return new QueryTask480(queryString, expectedResultSetSize, skipExecution, skipValidation); + return new QueryTask560(queryString, expectedResultSetSize, skipExecution, skipValidation); } } diff --git a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/sparql/engine/join/TestBenchmarkHashJoin.java b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/sparql/engine/join/TestBenchmarkHashJoin.java index 118d3f13a04..55117503430 100644 --- a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/sparql/engine/join/TestBenchmarkHashJoin.java +++ b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/sparql/engine/join/TestBenchmarkHashJoin.java @@ -24,6 +24,7 @@ import org.junit.Assert; import org.junit.Test; + import org.openjdk.jmh.results.RunResult; import org.openjdk.jmh.runner.Runner; import org.openjdk.jmh.runner.options.Options; @@ -32,7 +33,7 @@ public class TestBenchmarkHashJoin { @Test public void benchmark() throws Exception { Options opt = BenchmarkHashJoin.getDefaults(BenchmarkHashJoin.class).build(); - // JMHDefaultOptions.getDefaults(BenchmarkHashJoin.class).build(); + // JmhDefaultOptions.getDefaults(BenchmarkHashJoin.class).build(); Collection runResults = new Runner(opt).run(); Assert.assertNotNull(runResults); } diff --git a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/sparql/expr/TestCoalesce.java b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/sparql/expr/TestCoalesce.java index 4e49e07a14a..aff67d512c4 100644 --- a/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/sparql/expr/TestCoalesce.java +++ b/jena-benchmarks/jena-benchmarks-jmh/src/test/java/org/apache/jena/sparql/expr/TestCoalesce.java @@ -23,30 +23,27 @@ import org.apache.jena.graph.NodeFactory; -import org.apache.jena.mem.graph.helper.JMHDefaultOptions; +import org.apache.jena.jmh.JmhDefaultOptions; import org.apache.jena.sparql.engine.binding.Binding; import org.apache.jena.sparql.function.FunctionEnv; import org.apache.jena.sys.JenaSystem; + import org.junit.Assert; import org.junit.Test; + import org.openjdk.jmh.annotations.Benchmark; import org.openjdk.jmh.annotations.Scope; import org.openjdk.jmh.annotations.State; import org.openjdk.jmh.runner.Runner; -import java.util.Random; - - @State(Scope.Benchmark) public class TestCoalesce { static { JenaSystem.init(); - org.apache.shadedJena550.sys.JenaSystem.init(); + org.apache.shadedJena560.sys.JenaSystem.init(); } - final static Random rnd = new Random(); - @Benchmark public Long benchmarkCoalesceJenaCurrent() { var checksum = 0L; @@ -78,25 +75,25 @@ public Long benchmarkCoalesceJenaCurrent() { } @Benchmark - public Long benchmarkCoalesceJena550() { + public Long benchmarkCoalesceJena5601() { var checksum = 0L; // Create a Coalesce expression with some dummy expressions - var expressions = new org.apache.shadedJena550.sparql.expr.ExprList(); - expressions.add(new org.apache.shadedJena550.sparql.expr.ExprVar("var1")); - expressions.add(new org.apache.shadedJena550.sparql.expr.ExprVar("var2")); - expressions.add(new org.apache.shadedJena550.sparql.expr.ExprVar("var3")); - expressions.add(new org.apache.shadedJena550.sparql.expr.ExprVar("var4")); - expressions.add(new org.apache.shadedJena550.sparql.expr.ExprVar("var5")); - - var var3BoundLiteral = org.apache.shadedJena550.graph.NodeFactory.createLiteralString("Value5"); - var bindingBuilder = org.apache.shadedJena550.sparql.engine.binding.Binding.builder(); + var expressions = new org.apache.shadedJena560.sparql.expr.ExprList(); + expressions.add(new org.apache.shadedJena560.sparql.expr.ExprVar("var1")); + expressions.add(new org.apache.shadedJena560.sparql.expr.ExprVar("var2")); + expressions.add(new org.apache.shadedJena560.sparql.expr.ExprVar("var3")); + expressions.add(new org.apache.shadedJena560.sparql.expr.ExprVar("var4")); + expressions.add(new org.apache.shadedJena560.sparql.expr.ExprVar("var5")); + + var var3BoundLiteral = org.apache.shadedJena560.graph.NodeFactory.createLiteralString("Value5"); + var bindingBuilder = org.apache.shadedJena560.sparql.engine.binding.Binding.builder(); bindingBuilder.add(expressions.get(4).asVar(), var3BoundLiteral); var binding = bindingBuilder.build(); - org.apache.shadedJena550.sparql.function.FunctionEnv env = null; + org.apache.shadedJena560.sparql.function.FunctionEnv env = null; // Coalesce expression var coalesceExpr = - new org.apache.shadedJena550.sparql.expr.E_Coalesce(expressions); + new org.apache.shadedJena560.sparql.expr.E_Coalesce(expressions); for(var i=0; i<1000000; i++) { var result = coalesceExpr.eval(binding, env); @@ -109,7 +106,7 @@ public Long benchmarkCoalesceJena550() { @Test public void benchmark() throws Exception { - var opt = JMHDefaultOptions.getDefaults(this.getClass()) + var opt = JmhDefaultOptions.getDefaults(this.getClass()) .build(); var results = new Runner(opt).run(); Assert.assertNotNull(results); diff --git a/jena-benchmarks/jena-benchmarks-shadedJena480/pom.xml b/jena-benchmarks/jena-benchmarks-shadedJena480/pom.xml deleted file mode 100644 index ed2b5c5070f..00000000000 --- a/jena-benchmarks/jena-benchmarks-shadedJena480/pom.xml +++ /dev/null @@ -1,131 +0,0 @@ - - - - - 4.0.0 - - org.apache.jena - jena-benchmarks - 6.1.0-SNAPSHOT - - - Apache Jena - Benchmarks Shaded Jena 4.8.0 - jena-benchmarks-shadedJena480 - Shaded Apache Jena 4.8.0 for regression benchmarks - jar - - https://jena.apache.org/ - - - Apache Jena - https://jena.apache.org/ - - - - - Apache 2.0 License - https://www.apache.org/licenses/LICENSE-2.0 - - - - - ${maven.build.timestamp} - org.apache.jena.benchmarks.shadedJena480 - true - test - - - - - org.apache.jena - jena-base - 4.8.0 - - - org.apache.jena - jena-iri - 4.8.0 - - - org.apache.jena - jena-core - 4.8.0 - - - org.apache.jena - jena-arq - 4.8.0 - - - - - - - org.apache.maven.plugins - maven-shade-plugin - - - package - - shade - - - false - - - - - false - - - - - *:* - - - - - org.apache.jena - org.apache.shadedJena480 - - - - - *:* - - META-INF/*.SF - META-INF/*.DSA - META-INF/*.RSA - META-INF/DEPENDENCIES - META-INF/MANIFEST.MF - **/module-info.class - - - - - - - - - - - \ No newline at end of file diff --git a/jena-benchmarks/jena-benchmarks-shadedJena510/pom.xml b/jena-benchmarks/jena-benchmarks-shadedJena510/pom.xml deleted file mode 100644 index faa5014b99c..00000000000 --- a/jena-benchmarks/jena-benchmarks-shadedJena510/pom.xml +++ /dev/null @@ -1,137 +0,0 @@ - - - - - 4.0.0 - - org.apache.jena - jena-benchmarks - 6.1.0-SNAPSHOT - - - Apache Jena - Benchmarks Shaded Jena 5.1.0 - jena-benchmarks-shadedJena510 - Shaded Apache Jena 5.1.0 for regression benchmarks - jar - - https://jena.apache.org/ - - - Apache Jena - https://jena.apache.org/ - - - - - Apache 2.0 License - https://www.apache.org/licenses/LICENSE-2.0 - - - - - ${maven.build.timestamp} - org.apache.jena.benchmarks.shadedJena510 - true - test - - - - - org.apache.jena - jena-base - 5.1.0 - - - org.apache.jena - jena-iri - 5.1.0 - - - org.apache.jena - jena-core - 5.1.0 - - - org.apache.jena - jena-arq - 5.1.0 - - - org.apache.jena - jena-geosparql - 5.1.0 - - - - - - - org.apache.maven.plugins - maven-shade-plugin - - - package - - shade - - - false - - - - - false - - - - - *:* - - - - - org.apache.jena - org.apache.shadedJena510 - - - - - *:* - - META-INF/*.SF - META-INF/*.DSA - META-INF/*.RSA - META-INF/DEPENDENCIES - META-INF/MANIFEST.MF - **/module-info.class - META-INF/LICENSE-notice.md - - - - - - - - - - - diff --git a/jena-benchmarks/jena-benchmarks-shadedJena550/pom.xml b/jena-benchmarks/jena-benchmarks-shadedJena560/pom.xml similarity index 89% rename from jena-benchmarks/jena-benchmarks-shadedJena550/pom.xml rename to jena-benchmarks/jena-benchmarks-shadedJena560/pom.xml index 05a865fd7d9..9a0f4cb50b2 100644 --- a/jena-benchmarks/jena-benchmarks-shadedJena550/pom.xml +++ b/jena-benchmarks/jena-benchmarks-shadedJena560/pom.xml @@ -28,9 +28,9 @@ 6.1.0-SNAPSHOT - Apache Jena - Benchmarks Shaded Jena 5.5.0 - jena-benchmarks-shadedJena550 - Shaded Apache Jena 5.5.0 for regression benchmarks + Apache Jena - Benchmarks Shaded Jena 5.6.0 + jena-benchmarks-shadedJena560 + Shaded Apache Jena 5.6.0 for regression benchmarks jar https://jena.apache.org/ @@ -49,41 +49,43 @@ ${maven.build.timestamp} - org.apache.jena.benchmarks.shadedJena550 + org.apache.jena.benchmarks.shadedJena560 true test + + 5.6.0 org.apache.jena jena-base - 5.5.0 + ${ver.shadedJena} org.apache.jena jena-iri - 5.5.0 + ${ver.shadedJena} org.apache.jena jena-iri3986 - 5.5.0 + ${ver.shadedJena} org.apache.jena jena-core - 5.5.0 + ${ver.shadedJena} org.apache.jena jena-arq - 5.5.0 + ${ver.shadedJena} org.apache.jena jena-geosparql - 5.5.0 + ${ver.shadedJena} @@ -115,7 +117,7 @@ org.apache.jena - org.apache.shadedJena550 + org.apache.shadedJena560 diff --git a/jena-benchmarks/pom.xml b/jena-benchmarks/pom.xml index 383b58867da..a5be3b0c936 100644 --- a/jena-benchmarks/pom.xml +++ b/jena-benchmarks/pom.xml @@ -51,9 +51,15 @@ jena-benchmarks-jmh - jena-benchmarks-shadedJena480 - jena-benchmarks-shadedJena510 - jena-benchmarks-shadedJena550 + jena-benchmarks-shadedJena560 + + + true + + diff --git a/pom.xml b/pom.xml index 5d2cb029384..e5daf76b14e 100644 --- a/pom.xml +++ b/pom.xml @@ -135,12 +135,6 @@ 2.9.1 0.7.0 - - true - @@ -295,7 +289,6 @@ test remote client APIs. --> jena-integration-tests - jena-benchmarks apache-jena