Re: RFR: 8280010: Remove double buffering of InputStream for Properties.load

2022-01-14 Thread Sergey Bylokhov
On Mon, 10 Jan 2022 20:46:36 GMT, Andrey Turbanov  wrote:

> `Properties.load` uses `java.util.Properties.LineReader`. LineReader already 
> buffers input stream. Hence wrapping InputStream in BufferedInputStream is 
> redundant.

Marked as reviewed by serb (Reviewer).

-

PR: https://git.openjdk.java.net/jdk/pull/7021


Re: RFR: 8280010: Remove double buffering of InputStream for Properties.load

2022-01-14 Thread Serguei Spitsyn
On Mon, 10 Jan 2022 20:46:36 GMT, Andrey Turbanov  wrote:

> `Properties.load` uses `java.util.Properties.LineReader`. LineReader already 
> buffers input stream. Hence wrapping InputStream in BufferedInputStream is 
> redundant.

Marked as reviewed by sspitsyn (Reviewer).

-

PR: https://git.openjdk.java.net/jdk/pull/7021


Re: RFR: 8280010: Remove double buffering of InputStream for Properties.load

2022-01-14 Thread Daniel Fuchs
On Mon, 10 Jan 2022 20:46:36 GMT, Andrey Turbanov  wrote:

> `Properties.load` uses `java.util.Properties.LineReader`. LineReader already 
> buffers input stream. Hence wrapping InputStream in BufferedInputStream is 
> redundant.

Changes to `java.util.logging` look fine.

-

PR: https://git.openjdk.java.net/jdk/pull/7021


Re: RFR: 8280010: Remove double buffering of InputStream for Properties.load

2022-01-14 Thread Alex Menkov
On Mon, 10 Jan 2022 20:46:36 GMT, Andrey Turbanov  wrote:

> `Properties.load` uses `java.util.Properties.LineReader`. LineReader already 
> buffers input stream. Hence wrapping InputStream in BufferedInputStream is 
> redundant.

Marked as reviewed by amenkov (Reviewer).

-

PR: https://git.openjdk.java.net/jdk/pull/7021


Re: RFR: 8280010: Remove double buffering of InputStream for Properties.load

2022-01-14 Thread Andrey Turbanov
On Mon, 10 Jan 2022 20:46:36 GMT, Andrey Turbanov  wrote:

> `Properties.load` uses `java.util.Properties.LineReader`. LineReader already 
> buffers input stream. Hence wrapping InputStream in BufferedInputStream is 
> redundant.

Checked. `BufferedInputStream` add a bit of overhead.

Benchmark

@BenchmarkMode(value = Mode.AverageTime)
@OutputTimeUnit(TimeUnit.NANOSECONDS)
@Warmup(iterations = 6, time = 1, timeUnit = TimeUnit.SECONDS)
@Measurement(iterations = 5, time = 1, timeUnit = TimeUnit.SECONDS)
@Fork(1)
@State(Scope.Benchmark)
public class PropertiesLoad {

Properties properties;
private InputStream arrayInputStream;
private InputStream fileInputStream;
private Path filePath;

@Setup
public void setupStrings() throws IOException {
properties = new Properties();
String content = """
currentVersion=IdealGraphVisualizer {0}
LBL_splash_window_title=Starting IdealGraphVisualizer
SPLASH_WIDTH=475
SplashProgressBarBounds=0,273,475,6
SplashProgressBarColor=0xFF
SplashRunningTextBounds=10,283,460,12
SplashRunningTextColor=0xFF
""";
filePath = Files.createTempFile("benchmark", ".properties");
Files.writeString(filePath, content);
arrayInputStream = new 
ByteArrayInputStream(content.getBytes(StandardCharsets.UTF_8));
fileInputStream = Files.newInputStream(filePath);
}

@TearDown
public void tearDown() throws IOException {
fileInputStream.close();
Files.delete(filePath);
}

@Benchmark
public Properties plain_ByteStream() throws IOException {
properties.load(arrayInputStream);
return properties;
}

@Benchmark
public Properties plain_fileStream() throws IOException {
properties.load(fileInputStream);
return properties;
}

@Benchmark
public Properties buffered_ByteStream() throws IOException {
properties.load(new BufferedInputStream(arrayInputStream));
return properties;
}

@Benchmark
public Properties buffered_fileStream() throws IOException {
properties.load(new BufferedInputStream(fileInputStream));
return properties;
}

public static void main(String[] args) throws RunnerException {
Options opt = new OptionsBuilder()
.include(PropertiesLoad.class.getSimpleName())
.build();

new Runner(opt).run();
}
}

Results:

Benchmark   Mode  Cnt Score Error  Units
PropertiesLoad.buffered_ByteStream  avgt5  2416,364 ±  46,209  ns/op
PropertiesLoad.buffered_fileStream  avgt5  4276,015 ± 139,094  ns/op
PropertiesLoad.plain_ByteStream avgt5  1445,864 ± 649,779  ns/op
PropertiesLoad.plain_fileStream avgt5  3183,012 ± 198,974  ns/op

-

PR: https://git.openjdk.java.net/jdk/pull/7021


Re: RFR: 8280010: Remove double buffering of InputStream for Properties.load

2022-01-14 Thread Sergey Bylokhov
On Mon, 10 Jan 2022 20:46:36 GMT, Andrey Turbanov  wrote:

> `Properties.load` uses `java.util.Properties.LineReader`. LineReader already 
> buffers input stream. Hence wrapping InputStream in BufferedInputStream is 
> redundant.

The code change looks fine, but can you please check the actual performance 
impact, will the perf be the same after the change?

-

PR: https://git.openjdk.java.net/jdk/pull/7021


RFR: 8280010: Remove double buffering of InputStream for Properties.load

2022-01-14 Thread Andrey Turbanov
`Properties.load` uses `java.util.Properties.LineReader`. LineReader already 
buffers input stream. Hence wrapping InputStream in BufferedInputStream is 
redundant.

-

Commit messages:
 - [PATCH] Remove double buffering of InputStream for Properties.load
 - [PATCH] Remove double buffering of InputStream for Properties.load

Changes: https://git.openjdk.java.net/jdk/pull/7021/files
 Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=7021&range=00
  Issue: https://bugs.openjdk.java.net/browse/JDK-8280010
  Stats: 30 lines in 8 files changed: 0 ins; 11 del; 19 mod
  Patch: https://git.openjdk.java.net/jdk/pull/7021.diff
  Fetch: git fetch https://git.openjdk.java.net/jdk pull/7021/head:pull/7021

PR: https://git.openjdk.java.net/jdk/pull/7021