17

このテストは、Java で作成できるスレッドの最大数を示します

    System.out.println("Max memory  " + Runtime.getRuntime().maxMemory() / 1024 / 1024 + "M");
    for (int i = 0;; i++) {
        Thread t = new Thread() {
            public void run() {
                try {
                    Thread.sleep(10000);
                } catch (InterruptedException e) {
                }
            };
        };
        try {
            t.start();
        } catch (Error e) {
            System.out.println("Max threads " + i);
            e.printStackTrace();
            System.exit(1);
        }
    }

デフォルトのヒープサイズ(256M)で実行すると、

Max memory  247M
Max threads 2247
java.lang.OutOfMemoryError: unable to create new native thread
    at java.lang.Thread.start0(Native Method)
    at java.lang.Thread.start(Thread.java:691)
    at test.Test1.main(Test1.java:19)

最大ヒープサイズを 512M に増やすと、

Max memory  494M
Max threads 1906
...

最大ヒープサイズを 1024M に増やすと、

Max memory  989M
Max threads 1162
...

つまり、ヒープ メモリが増えると、スレッドが少なくなります。何故ですか?

4

2 に答える 2

0

ヒープ サイズを増やす (そしてそのすべてを使用する) と、OS が新しいスレッドを作成するために使用できるメモリの量が減るため、以前ほど多くのスレッドを作成できなくなると思います。

于 2013-04-21T07:54:17.947 に答える