Ostrzyciel commented on PR #2906:
URL: https://github.com/apache/jena/pull/2906#issuecomment-2559649975
I did a quick JMH test to see if this makes anything faster (note: making
datatype parsing/validation was **not** a goal of this PR, if anything is
faster, it's just a happy accident).
Benchmark code:
<details>
package org.apache.jena.datatypes;
import org.apache.jena.datatypes.xsd.XSDDatatype;
import org.apache.jena.mem.graph.helper.JMHDefaultOptions;
import org.junit.Assert;
import org.junit.Test;
import org.openjdk.jmh.annotations.*;
import org.openjdk.jmh.infra.BenchmarkParams;
import org.openjdk.jmh.infra.Blackhole;
import org.openjdk.jmh.runner.Runner;
import java.util.concurrent.TimeUnit;
@State(Scope.Benchmark)
public class TestDatatypeLiteralParse {
@Param({
"string",
"1",
"-340415",
"0.00003",
"PT7M",
"pl-PL",
"2021-07-01T12:00:00Z",
})
public String param0_LiteralValue;
private XSDDatatype datatype;
@Setup(Level.Trial)
public void setup(BenchmarkParams params) {
switch (param0_LiteralValue) {
case "string":
datatype = XSDDatatype.XSDstring;
break;
case "1":
datatype = XSDDatatype.XSDshort;
break;
case "-340415":
datatype = XSDDatatype.XSDinteger;
break;
case "0.00003":
datatype = XSDDatatype.XSDdecimal;
break;
case "PT7M":
datatype = XSDDatatype.XSDduration;
break;
case "pl-PL":
datatype = XSDDatatype.XSDlanguage;
break;
case "2021-07-01T12:00:00Z":
datatype = XSDDatatype.XSDdateTime;
break;
}
}
@Benchmark
@OperationsPerInvocation(40_000_000)
public void parse(Blackhole bh) {
for (int i = 0; i < 40_000_000; i++)
bh.consume(datatype.parse(param0_LiteralValue));
}
@Test
public void benchmark() throws Exception {
var opt = JMHDefaultOptions.getDefaults(this.getClass())
.timeUnit(TimeUnit.NANOSECONDS)
.warmupIterations(4)
.measurementIterations(4)
.build();
var results = new Runner(opt).run();
Assert.assertNotNull(results);
}
}
</details>
```
# JMH version: 1.37
# VM version: JDK 17.0.13-ea, OpenJDK 64-Bit Server VM, 17.0.13-ea+6-Debian-1
```
Code from this PR:
```
Benchmark (param0_LiteralValue) Mode Cnt Score
Error Units
TestDatatypeLiteralParse.parse string avgt 4 4.688 ±
0.107 ns/op
TestDatatypeLiteralParse.parse 1 avgt 4 13.556 ±
0.836 ns/op
TestDatatypeLiteralParse.parse -340415 avgt 4 25.364 ±
0.111 ns/op
TestDatatypeLiteralParse.parse 0.00003 avgt 4 35.203 ±
0.335 ns/op
TestDatatypeLiteralParse.parse PT7M avgt 4 16.747 ±
0.489 ns/op
TestDatatypeLiteralParse.parse pl-PL avgt 4 98.848 ±
1.930 ns/op
TestDatatypeLiteralParse.parse 2021-07-01T12:00:00Z avgt 4 65.588 ±
2.347 ns/op
```
Baseline (main 308b6e27):
```
Benchmark (param0_LiteralValue) Mode Cnt Score
Error Units
TestDatatypeLiteralParse.parse string avgt 4 5.695 ±
0.078 ns/op
TestDatatypeLiteralParse.parse 1 avgt 4 16.568 ±
0.222 ns/op
TestDatatypeLiteralParse.parse -340415 avgt 4 26.902 ±
3.533 ns/op
TestDatatypeLiteralParse.parse 0.00003 avgt 4 35.531 ±
4.531 ns/op
TestDatatypeLiteralParse.parse PT7M avgt 4 17.719 ±
0.265 ns/op
TestDatatypeLiteralParse.parse pl-PL avgt 4 108.381 ±
4.348 ns/op
TestDatatypeLiteralParse.parse 2021-07-01T12:00:00Z avgt 4 64.280 ±
0.884 ns/op
```
So the difference is marginal at best... but still something.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]