【发布时间】:2018-03-16 19:59:21
【问题描述】:
我的理解是每个新线程都会为其堆栈分配 1MB 的内存。
我希望如果我在无限循环中创建线程,那么我迟早会耗尽内存,当我检查 java 进程的内存消耗时,我会看到例如 4GB 的内存被 4000线程。
相反,我的小虚拟应用程序创建了数千个线程,但内存消耗远低于预期(基于 Windows 任务管理器的 4000 个线程约为 250MB,使用的系统内存也远低于预期)。有人可以解释为什么会这样吗?
public static void main(String[] args) {
int i = 1;
while (true) {
new Thread(() -> waitForMillis(6000000)).start();
System.out.println(i++);
waitForMillis(100);
}
}
private static void waitForMillis(int millis) {
try {
Thread.sleep(millis);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
【问题讨论】:
-
我的理解是每个新线程都会为其堆栈分配 1MB 的内存。你是从哪里得到这个理解的?
-
@shmosel stackoverflow.com/a/4619501/6051176这个答案下面有评论
标签: java multithreading memory out-of-memory