Я запускаю следующую программу, пытаясь выяснить, как настроить мою JVM для получения максимального количества потоков, которые может поддерживать моя машина. Для тех, кто может не знать, Snow Leopard поставляется с Java 6.
Я пытался запустить его со значениями по умолчанию, и в следующих командных строках я всегда получаю сообщение об ошибке нехватки памяти в потоке 2542 независимо от того, какие параметры JVM установлены.
java TestThreadStackSizes 100000
java -Xss1024 TestThreadStackSizes 100000
java -Xmx128m -Xss1024 TestThreadStackSizes 100000
java -Xmx2048m -Xss1024 TestThreadStackSizes 100000
java -Xmx2048m -Xms2048m -Xss1024 TestThreadStackSizes 100000
независимо от того, что я передаю, я получаю те же результаты, Ошибка нехватки памяти на 2542
public class TestThreadStackSizes
{
public static void main(final String[] args)
{
Thread.currentThread().setUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
public void uncaughtException(final Thread t, final Throwable e)
{
System.err.println(e.getMessage());
System.exit(1);
}
});
int numThreads = 1000;
if (args.length == 1)
{
numThreads = Integer.parseInt(args[0]);
}
for (int i = 0; i < numThreads; i++)
{
try
{
Thread t = new Thread(new SleeperThread(i));
t.start();
}
catch (final OutOfMemoryError e)
{
throw new RuntimeException(String.format("Out of Memory Error on Thread %d", i), e);
}
}
}
private static class SleeperThread implements Runnable
{
private final int i;
private SleeperThread(final int i)
{
this.i = i;
}
public void run()
{
try
{
System.out.format("Thread %d about to sleep\n", this.i);
Thread.sleep(1000 * 60 * 60);
}
catch (final InterruptedException e)
{
throw new RuntimeException(e);
}
}
}
}
Есть идеи, как я могу повлиять на эти результаты?
Я написал эту программу, чтобы выяснить, на что способен Windows Server 2003, потому что я получаю эти out of memory can't create native threads
в очень небольших количествах, например, пару сотен. Мне нужно посмотреть, на что способен конкретный ящик с другими параметрами -Xss
, и тогда я столкнусь с этим произвольным пределом для OSX.