Java system.out 与新的 PrintStream

标签 java logging process performance

如果要输出 15,000 行的消息,什么会使用更多内存?

System.out.println 会占用更多内存吗? 或者 System.setErr(new PrintStream(new FileOutputStream("tonsoflines.log"))) 会使用更多内存吗?

什么使用更多进程或需要更多内存才能运行?控制台窗口中的视觉输出或写入没有控制台视觉的文件?

编辑:还有谁先完成消息?

最佳答案

控制台

作为一些测试:打印到 System.out 结果是:

Printing line : #0
.
.
.
Printing line : #14997
Printing line : #14998
Printing line : #14999
System.out took: 238ms
  • 测试 #1:238ms
  • 测试 #2:235ms
  • 测试 #3:251ms
  • 测试 #4:210ms
  • 测试 #5:172ms
  • 测试 #6:268ms

新流

使用新的Stream 结果是:

Printing line : #0
.
.
.
Printing line : #14996
Printing line : #14997
Printing line : #14998
Printing line : #14999
System.out with new stream took: 220ms
  • 测试 #1:220ms
  • 测试 #2:219ms
  • 测试 #3:222ms
  • 测试 #4:220ms
  • 测试 #5:223ms
  • 测试 #6:250ms

代码

    try {

        System.setOut(new PrintStream(new FileOutputStream("C:\\TMP\\logs.log")));
                    long startTime = Calendar.getInstance().getTimeInMillis();
        for (int a=0;a<15000;a++) {
            System.out.println("Printing line : #"+a);
        }

        long elapsedTime = (Calendar.getInstance().getTimeInMillis() - startTime);
        System.out.println("System.out took: " + elapsedTime + "ms");
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }

如您所见,速度差异甚至不是“交易”,我没有检查的是使用这些方法的性能(磁盘 I/O、内存和 CPU)。

但如果你问我的想法,我会告诉你结果类似于我们刚刚执行的速度测试......对于我编写的任何应用程序中的日志,我使用 Log4J ( http://logging.apache.org/log4j/1.2/index.html ) 记录我想要的任何东西,你可以设置你想要的登录级别(调试、信息、错误等)

关于Java system.out 与新的 PrintStream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3637887/

相关文章:

c++ - 如果没有 C 标准库,有没有更好的方法来查找任意数字的日志?

multithreading - 调用 ls 或 rm 之类的二进制文件是不好的 Perl 做法吗?

windows - 异步创建进程?

java - 由于版本不兼容,STS不会响应

java - byte 数组和 ByteBuffer 哪个更快

Tomcat logging.properties 格式化程序未生效

node.js - 作为系统进程启动新进程

java - 来自 Socket 的 DataInputStream 的 "available"

java - 过多的线程在 Android 中是个坏主意吗?

c# - 应用程序见解上的性能计数器错误的更好解决方案是什么?