Я использовал следующий код для проверки максимального количества потоков, но он очень странный.
import java.util.concurrent.atomic.AtomicInteger;
public class TestThread extends Thread {
private static final AtomicInteger count = new AtomicInteger();
public static void main(String[] args) {
try{
while (true) {
(new TestThread()).start();
}
} catch (Error | Exception e) {
System.out.println(e.getMessage());
}
}
@Override
public void run() {
System.out.println(count.incrementAndGet());
while (true)
try {
Thread.sleep(Integer.MAX_VALUE);
} catch (InterruptedException e) {
break;
}
}
}
ОС - ubuntu: 18.04, память - 4G, количество процессоров - 2. JDK: openjdk1. 8.0_252
java -Xss1m -Xms1024m -Xmx1023m TestThread
java -Xss512k -Xms1024m -Xmx1023m TestThread
java -Xss1m -Xms2048m -Xmx2048m TestThread
В результате количество потоков всегда равно примерно 10000-му.
- почему результат такой же.
- Я установил -Xss1m в команде, означает ли это, что каждый поток будет иметь только 1 м памяти? если у него одна память, 10000-й поток будет иметь память 10 ГБ, на самом деле в машине только память 4G.