RFR: 8290824: Use InputStream.readAllBytes() instead of explicit loops [v2]
Сергей Цыпанов
duke at openjdk.org
Mon Jul 25 08:56:10 UTC 2022
On Mon, 25 Jul 2022 06:40:49 GMT, Сергей Цыпанов <duke at openjdk.org> wrote:
>> We can use `InputStream.readAllBytes()` in `ModuleHashes` and `X509CertPath`.
>
> Сергей Цыпанов has updated the pull request incrementally with one additional commit since the last revision:
>
> 8278461: Revert X509CertPath
I've measured this with benchmark
@State(Scope.Thread)
@BenchmarkMode(Mode.AverageTime)
@OutputTimeUnit(TimeUnit.MILLISECONDS)
@Fork(jvmArgsAppend = {"-Xms1g", "-Xmx1g"})
public class HashBenchmark {
private final Path path = Path.of("/Users/stsypanov/Library/Java/JavaVirtualMachines/openjdk-18.0.2/Contents/Home/jmods");
private final ModuleFinder finder = ModulePath.of(Runtime.version(), true, path);
@Benchmark
public byte[] hash() throws Exception {
return hash(finder, "java.base");
}
private byte[] hash(ModuleFinder finder, String name) throws Exception {
ModuleReference mref = finder.find(name).orElseThrow(RuntimeException::new);
try (ModuleReader reader = mref.open()) {
return ModuleHashes.computeHash(reader, "SHA-256");
}
}
}
and indeed the change makes things slower:
baseline
Benchmark Mode Cnt Score Error Units
HashBenchmark.hash avgt 50 174,632 ± 5,581 ms/op
HashBenchmark.hash:·gc.alloc.rate avgt 50 165,848 ± 4,574 MB/sec
HashBenchmark.hash:·gc.alloc.rate.norm avgt 50 31773902,052 ± 24870,662 B/op
HashBenchmark.hash:·gc.churn.G1_Eden_Space avgt 50 166,357 ± 9,399 MB/sec
HashBenchmark.hash:·gc.churn.G1_Eden_Space.norm avgt 50 31891221,589 ± 1725370,956 B/op
HashBenchmark.hash:·gc.churn.G1_Old_Gen avgt 50 5,553 ± 0,327 MB/sec
HashBenchmark.hash:·gc.churn.G1_Old_Gen.norm avgt 50 1064354,875 ± 60435,285 B/op
HashBenchmark.hash:·gc.churn.G1_Survivor_Space avgt 50 0,034 ± 0,032 MB/sec
HashBenchmark.hash:·gc.churn.G1_Survivor_Space.norm avgt 50 6754,365 ± 6398,008 B/op
HashBenchmark.hash:·gc.count avgt 50 144,000 counts
HashBenchmark.hash:·gc.time avgt 50 249,000 ms
patched
Benchmark Mode Cnt Score Error Units
HashBenchmark.hash avgt 50 192,068 ± 8,236 ms/op
HashBenchmark.hash:·gc.alloc.rate avgt 50 568,790 ± 22,912 MB/sec
HashBenchmark.hash:·gc.alloc.rate.norm avgt 50 119441637,758 ± 28476,724 B/op
HashBenchmark.hash:·gc.churn.G1_Eden_Space avgt 50 568,892 ± 26,936 MB/sec
HashBenchmark.hash:·gc.churn.G1_Eden_Space.norm avgt 50 119444622,067 ± 2746230,425 B/op
HashBenchmark.hash:·gc.churn.G1_Old_Gen avgt 50 4,964 ± 0,238 MB/sec
HashBenchmark.hash:·gc.churn.G1_Old_Gen.norm avgt 50 1042019,563 ± 23557,187 B/op
HashBenchmark.hash:·gc.churn.G1_Survivor_Space avgt 50 0,043 ± 0,033 MB/sec
HashBenchmark.hash:·gc.churn.G1_Survivor_Space.norm avgt 50 9130,656 ± 7040,858 B/op
HashBenchmark.hash:·gc.count avgt 50 492,000 counts
HashBenchmark.hash:·gc.time avgt 50 738,000 ms
I'll close this PR then.
-------------
PR: https://git.openjdk.org/jdk/pull/9596
More information about the security-dev
mailing list