2011-01-06 37 views
17

Có cách nào để tìm hiểu số lượng bộ nhớ mà chuỗi java của tôi đang thực hiện trong VM không?Chuỗi java của tôi mất bao nhiêu bộ nhớ?

Ví dụ: sử dụng kết xuất dấu vết ngăn xếp hoặc một số phương tiện khác.

Cảm ơn

+0

Bạn nên thử công cụ [VisualVM] (https://visualvm.dev.java.net/). –

+7

Mặt trời phải lắng nghe - bạn có thể sử dụng giao diện mới trên nền tảng 'ThreadMXBean' cụ thể để có được sử dụng bộ nhớ trên mỗi luồng: http://download.oracle.com/javase/6/docs/jre/api/management/ extension/com/sun/management/ThreadMXBean.html # getThreadAllocatedBytes% 28long% 29 – BeeOnRope

+0

@BeeOnRope đó là câu trả lời tuyệt vời! Bạn nên đăng nó như một câu trả lời và tôi sẽ bỏ phiếu. –

Trả lời

22

Chủ đề Java sử dụng bộ nhớ đệm làm bộ nhớ dùng chung. Các chủ đề riêng lẻ có ngăn xếp của chúng (kích thước mà bạn có thể đặt qua tùy chọn dòng lệnh -Xss, mặc định là 512KB), nhưng tất cả bộ nhớ khác (heap) không thuộc về các chủ đề cụ thể và yêu cầu bao nhiêu chủ đề cụ thể sử dụng đơn giản là không có ý nghĩa.

+0

Nhưng trong hệ thống của tôi, tôi có tất cả các chủ đề làm loại hoạt động tương tự. Vì vậy, chỉ để có được một hình ảnh gần đúng, tôi đang nghĩ đến việc nhận được kích thước của đống và chia nó bằng số lượng các chủ đề để có được kích thước gần đúng mỗi thread đang dùng .. đó sẽ là một giả định giá vé? –

+0

@Vikas: nó vẫn không có ý nghĩa. Bạn muốn sử dụng số * đó cho *? –

+0

Tôi phải tạo một hệ thống để tăng hoặc giảm số chủ đề dựa trên một số yếu tố bên ngoài. Tôi muốn phân tích hai lựa chọn tôi có. 1. Hãy bắt đầu và loại bỏ các chủ đề trong hệ thống mỗi lần rất nhiều HOẶC 2. Bắt đầu với số lượng tối đa các chủ đề và để giảm, tôi chỉ bảo họ đợi trong một Thread.sleep. .. Cách tiếp cận thứ 2 này đơn giản hơn từ quan điểm thực hiện, nhưng muốn phân tích xem có bao nhiêu không gian ngăn xếp mà một luồng đang đợi đang dùng trong hệ thống để tôi có cơ hội hết bộ nhớ. –

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