Весьма вероятно, что вы не используете достаточно буферизации.Если вы пишете в System.out, он автоматически сбрасывает каждую строку, поэтому группировка нескольких строк перед тем, как писать, может добавить некоторую буферизацию.Лучшим подходом является использование подходящего буфера.
Использование StringBuffer сопряжено с затратами на увеличение буфера.
long start = System.nanoTime();
StringBuilder sb = new StringBuilder();
for(long i=0;i<50*1000;i++)
sb.append("Hello World!\n");
System.out.print(sb);
long time = System.nanoTime() - start;
System.err.printf("Took %d ms%n", time/1000000);
печатает
Took 30 ms.
Однако в Linux, если вы знаете, что stdout - это файл, который вы можете записать в него напрямую.
long start = System.nanoTime();
String processId = ManagementFactory.getRuntimeMXBean().getName().split("@")[0];
FileOutputStream out = new FileOutputStream("/proc/" + processId + "/fd/1");
BufferedOutputStream bos = new BufferedOutputStream(out);
final byte[] str = "Hello World!\n".getBytes();
for (long i = 0; i < 50 * 1000; i++) {
bos.write(str);
}
bos.close();
long time = System.nanoTime() - start;
System.err.printf("Took %d ms%n", time/1000000);
печатает
Took 9 ms.
Однако вы должны быть осторожны, насколько вы оптимизируете код так, как выможет нарушить подразумеваемые правила теста и не принять его.;)