Như chúng ta đã biết, tùy chọn java -Xmx
được sử dụng để đặt không gian heap tối đa có sẵn cho một chương trình Java. Nhưng có cách nào cho một chương trình Java để đọc giá trị đã được thiết lập? Một cái gì đó như System.getMaximumHeapSpace()
(không tồn tại).Đọc không gian heap tối đa khi chạy
Trả lời
Có một Runtime.maxMemory
, tài liệu cho biết sẽ trả lại số lượng bộ nhớ tối đa mà Máy ảo Java sẽ cố gắng sử dụng, nhưng nó không cụ thể cho dù đó là bộ nhớ heap tối đa được thiết lập khi khởi chạy JVM.
Cũng giống như một thử nghiệm, tôi đã viết chương trình sau đây:
class MaxMemory {
public static void main(String[] args) {
System.out.println(Runtime.getRuntime().maxMemory());
}
}
Kết quả của việc thực hiện là như sau:
C:\coobird\>java -Xmx64m MaxMemory
66650112
C:\coobird\>java -Xmx128m MaxMemory
133234688
này được sử dụng Java SE 6 phiên bản 1.6.0_12 trên Windows .
Mặc dù các giá trị gần 64 MB (67,108,864 byte) và 128 MB (134,217,728 byte), chúng không chính xác như vậy.
Tôi đã thử nghiệm nó và nó có vẻ là giá trị được thiết lập bởi -Xmx. Cảm ơn. –
Nó có vẻ là gần gũi, nhưng không chính xác giá trị. – coobird
Có thể các byte bị thiếu được dành riêng cho không gian PermGen –
Và tôi nhận được giá trị mà là xa hơn từ giá trị Xmx:
java -Xmx64m MaxMemory
59703296
64 * 1024 * 1024 = 67108864
java -Xmx128m MaxMemory
119341056
128 * 1024 * 1024 = 134217728
Đó là một 11% khác biệt! (Của bạn chỉ là 0,7%; Tôi thắng.)
java -version
java version "1.6.0_22"
Java(TM) SE Runtime Environment (build 1.6.0_22-b04)
Java HotSpot(TM) Server VM (build 17.1-b03, mixed mode)
running on Linux 2.6
Tôi thấy kết quả tương tự.
-Xmx512m và tôi nhận được 455M
-Xmx1024m và tôi nhận được 910M
tôi nhận được kết quả tương tự sử dụng ManagementFactory.getMemoryMXBean(). GetHeapMemoryUsage()
Những sự khác biệt là quá lớn để được bỏ qua.
- 1. Hoạt động xóa-tối đa trong một heap tối thiểu
- 2. Có thể tự động thay đổi kích thước heap java tối đa không?
- 3. lập trình thiết lập kích thước heap java tối đa
- 4. Thời gian tối đa() | PHP
- 5. TV AIR - có thể giới hạn bộ nhớ tối đa cho thời gian chạy không?
- 6. Không gian heap Java trong netbeans .. nhưng tôi đã tăng kích thước heap rồi!
- 7. Tính thời gian ngày Khoảng thời gian tối thiểu, tối đa và lớn nhỏ nhất
- 8. Không gian cho phép so với không gian Heap
- 9. Tăng kích thước heap tối đa JVM cho các ứng dụng chuyên sâu bộ nhớ
- 10. Lỗi thời gian chạy Django/Python: Độ sâu đệ quy tối đa vượt quá
- 11. 'đọc' không thời gian ra ngoài khi đọc từ đường ống trong bash
- 12. Đặt thời gian thực hiện tối đa trong MYSQL/PHP
- 13. java.lang.OutOfMemoryError: Vùng heap Java khi đọc excel với Apache POI
- 14. WCF Đọc tối đa Ngoại lệ Độ sâu
- 15. Bộ nhớ tối đa cho 64bit Java
- 16. Giá trị tối thiểu và tối đa của UIDatePicker có thể bao gồm thời gian không?
- 17. Các dòng tối đa và tối đa
- 18. Tại sao kích thước tối đa của vùng heap Java được cố định?
- 19. Chương trình Java có thể phát hiện rằng nó đang chạy thấp trên không gian heap?
- 20. Không thể thực hiện dex: Vùng heap Java Không gian heap Java
- 21. Lỗi bẫy thời gian thực thi tối đa Php bẫy
- 22. Tôi có thể (và tôi có bao giờ muốn) thiết lập kích thước heap tối đa trong .net không?
- 23. Làm thế nào để có được kích thước tối đa của heap và permgen từ JVM?
- 24. xử lý lỗi thời gian thực thi tối đa
- 25. Pandas: Không. hàng tối đa
- 26. Thời gian thực hiện tối đa 30 giây vượt quá
- 27. Thời gian thực hiện tối đa cho JavaScript
- 28. Cách tăng thời gian thực hiện tối đa trong php
- 29. Thời gian tối đa cho HTML metatag refresh
- 30. Chạy tối đa các giá trị mảng có khối lượng
Bản sao của http://stackoverflow.com/questions/433406/how-to-get-the-max-sizes-of-the-heap-and-permgen-from-the-jvm? – Pool
Một cách không mang tính chương trình là chạy tiện ích 'jmap' có sẵn từ JDK của bạn. Cú pháp sẽ là 'jmap -heap'. Trường 'MaxHeapSize' cho biết giá trị' Xmx' được đặt trên tiến trình Java đó. –
asgs