2013-06-10 35 views
7

Tôi đang cố gắng tối ưu hóa việc sử dụng bộ nhớ của ứng dụng của mình. Thật không may, chạy ứng dụng của tôi với -Dcom.sun.management.jmxremote và kết nối nó thông qua VisualVM có tác động khá lớn đến việc sử dụng đống. Lúc đầu, tôi nghĩ rằng đó là vấn đề ứng dụng của tôi, cho đến khi tôi đã viết một chương trình rất đơn giản để xác nhận rằng nó thực sự là chi phí của JMX. Dưới đây là hình ảnh hoạt động.Làm thế nào để giảm tác động sử dụng heap từ VisualVM?

Sau khi đọc this, tôi hiểu rằng điều này là do cách VisualVM truy xuất dữ liệu, đó là bằng cách bỏ phiếu cho ứng dụng được kết nối liên tục. Tôi xác nhận điều này bằng cách nhìn vào bộ nhớ của VisualVM. Chủ đề Kết nối TCP RMI TCP (n) được phân bổ 180kb/giây.

Câu hỏi của tôi là, có cách nào để giảm tác động sử dụng heap của VisualVM không? Thay đổi khoảng thời gian bỏ phiếu có thể không thích hợp hơn vì tôi quan tâm đến thông tin heap. Nếu điều này là không thể, chúng ta có thể loại trừ dữ liệu được sử dụng cho VisualVM không? Ít nhất tôi muốn tập trung hơn vào ứng dụng của mình.

Chạy Mã

Object object = new Object(); 
synchronized (object) { 
    object.wait(); 
} 

hoạt động Heap Monitor VisualVM của

enter image description here

+0

Bạn đã thử dùng máy ghi Java Flight của mình, nó có chi phí bộ nhớ rất thấp không? Nó đi kèm với JDK 7 trở lên –

Trả lời

3

Điều đơn giản nhất để làm là để giảm khoảng cách điểm bỏ phiếu. Tác động tỷ lệ thuận với tỷ lệ lấy dữ liệu.

Những gì tôi làm là sử dụng YourKit làm mọi thứ trong bộ nhớ riêng nên không ảnh hưởng đến heap.