2013-06-13 45 views
5

Chạy mã nàyđề tối đa OS X Java cho mỗi quá trình

 for (int i = 0; i < 4000; i++) { 
      new Thread(new Runnable() { 
       @Override 
       public void run() { 
        try { 
         Thread.sleep(60000); 
        } catch (InterruptedException e) { 
        } 
       } 
      }).start(); 
      System.out.println(i); 
     } 

kết quả trong

Exception in thread "main" java.lang.OutOfMemoryError: unable to create new native thread 
    at java.lang.Thread.start0(Native Method) 
    at java.lang.Thread.start(Thread.java:658) 
    at com.codeoverdrive.burnbearburn.Main.main(Main.java:10) 

sau 2024 đề chạy. Phát với kích cỡ chồng và chồng của JVM không giúp ích gì.

sysctl kern.num_threads 

lợi nhuận

kern.num_threads: 10240 

OS X Mountain Lion 10.8.4, Macbook Air với 4GB RAM

Bất kỳ lời đề nghị?

+0

Bằng cách này bạn có thể 'TimeUnit.MINUTES.sleep (1);' – fge

+0

@fge tăng permgen không giúp được vì nó được sử dụng cho định nghĩa lớp và siêu dữ liệu liên quan. – mixel

Trả lời

2

Nguyên nhân có thể xảy ra nhất là người dùng bạn đang chạy có giới hạn về số lượng chủ đề mà nó có thể tạo.

Hãy thử và tăng giới hạn này. Giới hạn hiện tại có thể được hiển thị bằng lệnh ulimit -u. Lưu ý rằng với tư cách người dùng thông thường, bạn có thể sẽ không thể tăng nó, bạn sẽ phải sửa đổi môi trường dưới dạng root.

Và có, OutOfMemoryError là sai lầm trong trường hợp này.

+0

'ulimit -u' hiển thị số lượng người dùng tối đa, không phải luồng. Và tôi không biết tại sao, nhưng thiết lập nó không thay đổi giá trị của nó. – mixel

+0

Nó cũng ảnh hưởng đến số lượng chủ đề! Ít nhất là trên Linux nó. Và có, điều bình thường là bạn không thể thay đổi nó như một người dùng. – fge

+0

Tôi đã thử làm thư mục gốc. – mixel

Các vấn đề liên quan