我已经在StackOverflow中检查了这两篇关于线程限制的帖子OSX 10.6.3和JVM support,但是当我尝试使用以下测试测试我的系统线程数限制时,我将总是得到远(比约2000
)少于他们在这两篇帖子中提到的内容(例如40_000
)。
我还检查了这个less is more关于线程限制以进行更多本地测试,但结果仍然非常令人沮丧。
F.Y.I
使用sysctl kern.num_threads
检查我的mac中的线程限制,我得到 kern.num_threads:10240
-Xmx2048m -Xms2048m -Xss200k ==> 1286
-Xmx4096m -Xms3072m -Xss320k ==> 1048
-Xmx4096m -Xms3072m ==> 1153
-Xmx32m -Xms32m ==> 1309
-Xmx32m ==> 2027
我是否遗漏了导致这种糟糕表现(低线程限制)的事情?
public class TestThreadCountLimit {
private static Object s = new Object();
private static int count = 0;
public static void main(String[] argv) {
for (; ; ) {
Thread thread = new Thread(() -> {
synchronized (s) {
count += 1;
System.err.println("New thread #" + count);
}
for (; ; ) {
try {
Thread.sleep(1000);
} catch (Exception e) {
System.err.println(e);
}
}
});
thread.setDaemon(true); // to ensure I can terminate them, I set them daemon on purpose;
thread.start();
}
}
}