我曾经写过&使用system.out.println()
开发代码。它通常可以帮助我跟踪价值和问题的来源。在开发应用程序之后,我不会删除system.out.println()
,因为在用户发现任何问题后它可能会有用,它会回复给我们,这样可以很容易地跟踪出错的地方。但我的一位上级建议从代码中删除system.out.println()
,因为它会影响代码效率级别。这是对的吗?
从我的角度来看,System.out.print()
几乎不占用内存字节,因此开发人员不应该使用多少system.out.println
??
提前致谢。
答案 0 :(得分:18)
System.out实现在输出流中包含 synchronized 块。
/**
* Prints a String and then terminate the line. This method behaves as
* though it invokes <code>{@link #print(String)}</code> and then
* <code>{@link #println()}</code>.
*
* @param x The <code>String</code> to be printed.
*/
public void println(String x) {
synchronized (this) {
print(x);
newLine();
}
}
使用System.out.println会使整个项目几乎单线程运行,因为所有线程都会等待同步锁定,并使您的应用程序开始爬行。
这意味着你的上司是对的。
或者,使用log4j
之类的日志框架代替。您仍然可以通过appender配置中的微小更改将log4j配置为仍然输出到System.out.println。
答案 1 :(得分:3)
您可以使用记录器来解决问题。
在开发代码时指定日志记录级别,您可以设置生产中的日志记录级别。
级别列表:
DEBUG Level
INFO Level
WARN Level
ERROR Level
FATAL Level
Log4j是常用的,请看这里:
http://logging.apache.org/log4j/2.x/
关于使用println的缺点:
反对的主要原因是println 减慢程序的速度。
答案 2 :(得分:2)
强烈建议使用SLF4J等日志框架。通过配置,您可以根据环境执行这些日志记录语句。
例如 - 开发人员的DEBUG级别 - 生产时的WARN,因此在生产中只记录关键的iformation。
答案 3 :(得分:2)
确实输出到控制台,特别是输出过多,会降低应用程序的性能。它也是更好的编程风格,不会给用户带来只有你可以使用的信息。相反,您应该使用Java的内置机制来处理意外事件,例如:异常和断言机制。您还可以选择将“详细”选项作为命令行参数。
答案 4 :(得分:2)
System.out.println可能会导致严重的性能问题。每个println调用都获取一个锁,以便控制台上显示的消息不会与其他消息混淆。
此外,在大多数情况下,控制台的输出会重定向到文件。因此,它会导致许多同步IO操作,从而导致性能下降。
答案 5 :(得分:2)
是的,必须最小化对System.out.println()的调用。这是因为打印到控制台是IO操作,IO需要相对长的时间才能完成。这就是为什么我们尽可能使用StringBuilder来连接我们想要在内存中打印的东西。汇集了我们想要在内存中打印的所有内容之后,这是您想要调用System.out.println()的时间。
调用System.out.println()对内存没有影响。
答案 6 :(得分:1)
维护日志文件而不是system.out.println
是件好事。如果你使用这个,只有devolopers可以在控制台上看到。你看不到更多的消息。
但是你不能将它用于将来使用。如果你使用日志记录,你可以将消息保存到数据库或文件......等等。
答案 7 :(得分:1)
我相信你在这个背景下谈论Java,并且将说明针对system.out.println()
的另一种方法。
System.out.print(); // Prints a string of characters only
System.out.println(); // Prints a string of character followed by a line break and that line break is the one which is taking up tons of space if I ain't wrong.
希望这有帮助。
答案 8 :(得分:1)
将System.out.println
放在最糟糕的做法上。尝试实现日志记录概念。
使用log4j
或log4j2
来保存系统日志。用于跟踪或调试代码。