2012-06-14 43 views

Trả lời

9

Lượng bộ nhớ được phân bổ cho ngăn xếp luồng cụ thể cho Hệ điều hành JVM phiên bản + của bạn. Nó được cấu hình với tùy chọn -XX: ThreadStackSize (-Xss trên các phiên bản cũ hơn.) Anecdotally 512KB là "bình thường", mặc dù nó là 1024 trên 64-bit linux. Đây có lẽ là nền tảng quan trọng nhất (ý kiến ​​của một người)

+0

Như bạn đã nói, đó là ThreadStackSize mặc định là 512KB (cho 32bit), bộ nhớ này có dành cho một tread tại thời điểm tạo hoặc tự động tiêu thụ khi các cuộc gọi phương thức được lồng nhau không? – Ranger

+0

Nó được bảo lưu. Điều đó có nghĩa là cũng phần nào phụ thuộc vào nền tảng, nhưng về cơ bản nếu hệ điều hành không thể đảm bảo nó có thể cung cấp bộ nhớ, ngoại lệ OOM sẽ xảy ra tại thời điểm tạo luồng. (có thể cung cấp bộ nhớ có thể bao gồm việc buộc dữ liệu ứng dụng vào không gian hoán đổi tất nhiên.) Điều này liên quan đến hợp đồng của hoạt động malloc nằm bên dưới. Điều này cũng tất cả giả định JVM hiện đại với chủ đề ràng buộc bản địa của khóa học. Điều gì xảy ra trong thông dịch viên là kinh doanh của JVM. – Affe

+1

Cũng nên nhớ rằng linux có một nắp người dùng độc lập với giới hạn bộ nhớ. "Out Of Memory" của Java: Không thể tạo chuỗi gốc. " Không nhất thiết cho biết vấn đề thực sự là thiếu RAM vật lý. – Affe

2

Mỗi chuỗi trong ứng dụng Java có ngăn xếp riêng. Ngăn xếp được sử dụng để giữ địa chỉ trả về, đối số cuộc gọi hàm/phương thức, v.v. Và bởi kích thước ngăn xếp mặc định là 512KB. Bạn có thể thay đổi bằng lệnh -Xss jvm.

java -Xss128k 
Các vấn đề liên quan