Tôi đang khám phá việc sử dụng bộ nhớ trong Java để hiểu tại sao chương trình của tôi bị rò rỉ bộ nhớ. Sau khi ngắt mã trong vòng lặp chính của tôi, tôi vẫn nhận được sự gia tăng sử dụng bộ nhớ theo thời gian. Cân nhắc việc sử dụng bộ nhớ của một chương trình trống:Tại sao một chương trình Java trống sử dụng bộ nhớ?
class Nothing
{ public static void main(String[] args)
{ while(true); }
}
tôi vẫn thấy sự gia tăng bộ nhớ:
Vì vậy, câu hỏi của tôi là: Tại sao có vẫn còn là một mô hình răng cưa? Tại sao khi GC chạy nó không lưu tất cả bộ nhớ (mỗi lần gc chạy (các thung lũng) bộ nhớ đã sử dụng tăng 10-20Kb (so với thung lũng trước đó))?
EDIT:
phiên bản java "1.6.0_29"
Java (TM) SE Runtime Environment (xây dựng 1.6.0_29-b11)
Java HotSpot (TM) Khách hàng VM (xây dựng 20,4-b02, chế độ hỗn hợp, chia sẻ)
Hệ điều hành: Windows 7 Enterprise-32 bit
Tôi không thấy tăng. Bộ nhớ tăng lên, sau đó thu thập xuống.Dường như bộ nhớ tối đa được sử dụng không đổi theo thời gian. –
Tuy nhiên, một công cụ khác để thử tìm rò rỉ bộ nhớ trong ứng dụng của bạn là [Plumbr] (http://plumbr.eu). Nó sẽ dễ dàng hơn nhiều so với đấu vật với profilers và cố gắng suy ra một cái gì đó từ tất cả các thông tin đó. – Nikem