我无法理解这两个代码之间的区别;
public static void main(String[] args) {
List<String> list = new ArrayList<>();
while (true) {
list.add("Hello");
}
}
在第二个 中抛出java.lang.OutOfMemoryError
,
和
public static void main(String[] args) {
List<String> list = new ArrayList<>();
while (true) {
list.add("Hello");
System.out.println(list.size()); // Simply display the size of List
}
}
在5分钟后抛出java.lang.OutOfMemoryError
,其中list.size()的值为20767725。
答案 0 :(得分:8)
简单地说 - 显示2000万行文字需要很长时间。
很容易证明这一点。运行以下代码:
for (int x = 0; x < 20767725; x++) {
System.out.println(x);
}
我怀疑这也需要大约5分钟。
答案 1 :(得分:3)
表现如预期。在第一个代码中,系统不必等待通信监视(即外部设备)。 RAM与处理器之间的唯一通信是每秒数十亿次计算。所以内存很快耗尽。
在第二个代码中:在每个addtolist之后,该项必须在控制台上显示。接口的输出操作比CPU到RAM的交互要慢很多。因此,该过程将暂停,直到显示“Hello”,并再次继续,因此需要花费大量时间。
答案 2 :(得分:1)
System.out.println()
是一项IO操作,需要一些时间。这解释了'一秒'和'五分钟'之间的区别。
答案 3 :(得分:1)
System.out.println()
需要很多次才能执行,因为它与IO操作有关。