我有一個大規模創建線程的應用程序。因此,我得到一個OutOfMemoryError。我的想法是等到有足夠的可用空間來創建下一個線程。但是,因此我需要知道創建線程需要多少內存,以及這個內存量是否可用。有沒有辦法獲得線程需要的內存量?我如何確定這個內存量是否可用?Java需要內存用於新線程
我已經嘗試過:
for (int i = 0; i < links.size(); i++) {
while(Runtime.getRuntime().maxMemory() - Runtime.getRuntime().totalMemory() +
Runtime.getRuntime().freeMemory() < MEMORY_THRESHOLD) {
synchronized (lock) {
lock.wait(10);
}
}
Thread t = new Thread(new Task(links.get(i)));
t.setDaemon(true);
t.start();
}
但是,即使當我使用100MB的門檻,我得到一個的OutOfMemoryError。
我不是專家創造這麼多線程,但我覺得你比較蘋果與橘子行:'.maxMemory() - unMemory.getRuntime()。totalMemory()',maxMemory和totalMemory聲音與我不同 – Coffee 2014-10-31 15:23:55
爲什麼你會創建大量的線程? – RobAu 2014-10-31 15:26:54
@Coffee這應該是JVM可以分配的內存,當我使用freeMemory()時,它會在第一個線程創建之前阻塞。 – kaetzacoatl 2014-10-31 15:27:58