代码之家  ›  专栏  ›  技术社区  ›  Kyle

Java系统输出vs新打印流

  •  1
  • Kyle  · 技术社区  · 14 年前

    如果输出一条15000行的消息,会占用多少内存?

    会吗系统输出打印给我们更多的记忆? 或者会系统设置错误(新的PrintStream(新的FileOutputStream()tonsoflines.log文件你需要更多的内存吗?

    什么需要更多的进程或需要更多的内存才能工作?控制台窗口中的可视化输出或写入没有控制台可视化的文件?

    编辑:还有哪一个会先完成信息?

    3 回复  |  直到 14 年前
        1
  •  2
  •   Garis M Suero    14 年前

    慰问

    作为某种测试:打印到系统输出结果是:

    Printing line : #0
    .
    .
    .
    Printing line : #14997
    Printing line : #14998
    Printing line : #14999
    System.out took: 238ms
    
    • 238ms
    • 测试2: 235ms
    • 测试3: 251ms
    • 测试4: 210ms
    • 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
    • 220毫秒
    • 测试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

        2
  •  2
  •   nkr1pt    14 年前

    我认为在记忆方面,这种差别是很小的,也许对我们来说是一个小小的优势系统输出打印 在处理和速度方面,写入日志文件要比在屏幕上打印所有内容快得多。

        3
  •  0
  •   Community CDub    5 年前

    系统输出是PrintStream的对象

    http://download.oracle.com/javase/1.4.2/docs/api/java/lang/System.html#out

    公共静态最终打印流输出

    “标准”输出流。这个 流已打开并准备就绪 或其他输出目标 由主机环境或 用户。

    如果您考虑将其用于日志记录,则建议您始终使用专门的日志记录框架,如 Log4J .