关于Java IO性能调优的问题

use*_*934 3 java performance

我正在尝试优化基于Web的应用程序,该应用程序会对流进行大量编写.代码是这样的---

 StringWriter stringWriter = new StringWriter(1024);
 PrintWriter printWriter = new PrintWriter(stringWriter);
Run Code Online (Sandbox Code Playgroud)

然后这个printwriter用于在以下几个地方进行大量的写操作 -

 printWriter.write("set interface ethernet0 zone Trust");
Run Code Online (Sandbox Code Playgroud)

我想通过将printwriter包装在bufferedwriter周围来优化几个写操作.所以我打算如下更改line1和line2.如果下面的方法是正确的,请告诉我 -

StringWriter stringWriter = new StringWriter(1024);
// go for bufferedwriter instead of printwriter.
BufferedWriter bufWriter = new BufferedWriter(stringWriter, 8*1024); 
Run Code Online (Sandbox Code Playgroud)

另外,我认为现在我可以直接替换write方法,如下所示 -

printWriter.write("set interface ethernet0 zone Trust");
Run Code Online (Sandbox Code Playgroud)

换成了

bufWriter.write("set interface ethernet0 zone Trust");
Run Code Online (Sandbox Code Playgroud)

如果这是正确的,请告诉我,或者我是否需要使用BufferedWriter的任何重载方法来充分利用BufferedWriter.

谢谢,开发

Pét*_*rök 11

由于StringWriter每个定义写入字符串缓冲区(在内存中),因此将其包装到a中BufferedWriter不会对性能产生任何影响.(由于附加了间接级别,它实际上可能使你的代码慢一点-尽管这将可最有可能由JIT编译器优化掉.)

后者在文件I/O中很有用,其中一个大写比几个小写要快得多.

为什么你认为你需要调整这段代码?值得仔细研究以下内容

有关性能调整的一般准则

  1. 不要这样做(你确定你需要它吗?大多数时候你实际上不需要它).
  2. 不要这样做(相关的经典引用:Donald Knuth称"过早优化是所有邪恶的根源").
  3. 不要优化您认为较慢的代码- 使用分析器测量性能以找出实际的瓶颈.
  4. 在任何更改之后再次测量以验证您是否真正显着改善了性能(例如:很容易做出"聪明"的改变,这些改变没有任何区别,甚至会降低性能).