Tôi đã gặp phải OutOfMemoryException trong ứng dụng của tôi và thay vì chỉ đơn giản tăng số lượng không gian Heap có sẵn, tôi đã cố gắng xem xét vấn đề là gì, trong trường hợp có một số rò rỉ từ ứng dụng của tôi.Java Heap Space - Làm thế nào để -Xmx hoạt động chính xác?
Tôi đã thêm thông số JVM -XX: + HeapDumpOnOutOfMemoryError tạo Heap Dump khi gặp lỗi OutOfMemory. Sau đó tôi phân tích tệp kết xuất được tạo bằng các công cụ lược tả khác nhau. Sau đó tôi bắt đầu chơi xung quanh với tham số -Xmx và các mẫu quan sát.
Điều gì khiến tôi bối rối là như sau. Tại sao nó phân tích kết xuất tôi thấy rằng tổng kích thước của tất cả các đối tượng nhỏ hơn nhiều so với tổng số mà tôi đã đặt bằng tham số -Xmx? Ví dụ: giả sử tôi đặt -Xmx thành '2048m'. Khi tôi phân tích tệp kết xuất, tôi đã tìm thấy tổng số 400Mb đối tượng trên Heap. Tôi đã mong đợi để tìm 2GB. Tui bỏ lỡ điều gì vậy?
Bạn có kiểm tra xem OOME của bạn có thực sự đề cập đến bộ nhớ heap không? Có một vài trường hợp (tương đối ít phổ biến) khi OOME bị ném, nhưng nó KHÔNG phải là đống đầy. –
Phải, @Joachim, quá nhiều chủ đề trong JVM x86 bị treo quá với ngoại lệ OOM – aalku