2016-02-22 12 views
5

Tôi có chút nhầm lẫn về GC, khi GC thực hiện nó dừng tất cả các luồng và thu thập các tham chiếu Garbage.thay đổi đối tượng tham chiếu sau GC

sau GC, jvm có thực hiện bất kỳ lực nén nào không?

Đầm: phương tiện di chuyển khu vực bộ nhớ "trong sử dụng" để loại bỏ lỗ do tài liệu tham khảo chấm dứt

nếu có thì không JVM duy trì tài liệu tham khảo cũ hoặc nó gán tham chiếu mới cho tất cả các đối tượng còn lại?

+1

Tôi đã thêm Java làm ngôn ngữ kể từ khi bạn đề cập đến JVM. Nhưng vui lòng gắn thẻ chính xác nếu bạn đang đề cập đến điều gì đó khác (ví dụ: Scala). – Bathsheba

+0

cảm ơn đề xuất của bạn –

Trả lời

7

Giới thiệu về nén: nó phụ thuộc vào thuật toán được sử dụng. Vì tất cả các GC thế hệ trẻ đang sao chép các nhà sưu tập: có, họ làm việc cắm trại, họ thậm chí di chuyển tất cả các đối tượng còn sống sót sang một khu vực bộ nhớ khác. Với các bộ sưu tập thế hệ cũ, nó phụ thuộc vào thuật toán thu thập được sử dụng. Trong khi bộ thu gọn quét tiêu chuẩn là nén (tốt, đó là lý do tại sao "nhỏ gọn" ở đó) bộ thu CMS (quét đồng thời) thường không làm bất kỳ nén trừ khi nó là không thể tránh khỏi và do đó phải quản lý heap- phân mảnh.

Và khi đối tượng được di chuyển (dù vì sử dụng bộ sưu tập sao chép hoặc do nén), các tham chiếu hiện có được cập nhật để trỏ đến vị trí bộ nhớ mới.

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