- G1 có phải là bộ thu thập mặc định trong Java 7 không và nếu không, làm cách nào để kích hoạt G1?
G1 không phải là bộ thu thập mặc định trong Java 7. -XX:+UseG1GC
sẽ kích hoạt G1GC
- G1 có cài đặt tùy chọn nào trong Java7?
Có nhiều. Hãy xem bài báo oracle này để biết thông tin đầy đủ.
G1 GC là một bộ thu gom rác thích ứng với các giá trị mặc định cho phép nó hoạt động hiệu quả mà không cần sửa đổi.
Vì lý do này, hãy tùy chỉnh các thông số quan trọng
-XX:MaxGCPauseMillis
-XX:G1HeapRegionSize
-XX:ParallelGCThreads
-XX:ConcGCThreads
và để tất cả các tham số khác thành giá trị mặc định .
Đây là danh sách các tùy chọn quan trọng và giá trị mặc định của chúng. Danh sách này áp dụng cho máy ảo Java HotSpot mới nhất, phiên bản 24. Bạn có thể điều chỉnh và điều chỉnh cài đặt G1 GC trên dòng lệnh JVM.
Mặc định quan trọng:
-XX:G1HeapRegionSize=n
Đặt kích thước của vùng G1. Giá trị sẽ là lũy thừa của hai và có thể nằm trong khoảng từ 1MB đến 32MB. Mục tiêu là có khoảng 2048 khu vực dựa trên kích thước đống Java tối thiểu.
-XX:MaxGCPauseMillis=200
Đặt giá trị mục tiêu cho thời gian tạm dừng tối đa mong muốn. Giá trị mặc định là 200 mili giây. Giá trị được chỉ định không thích ứng với kích thước đống của bạn.
-XX:G1NewSizePercent=5
Đặt tỷ lệ phần trăm của heap để sử dụng làm mức tối thiểu cho quy mô thế hệ trẻ. Giá trị mặc định là 5 phần trăm của đống Java của bạn.
-XX:G1MaxNewSizePercent=60
Đặt phần trăm kích thước heap để sử dụng làm kích thước tối đa cho kích thước thế hệ trẻ. Giá trị mặc định là 60 phần trăm của đống Java của bạn.
-XX:ParallelGCThreads=n
Đặt giá trị của các luồng công nhân STW. Đặt giá trị của n thành số bộ xử lý logic. Giá trị của n bằng với số bộ xử lý logic có giá trị là 8.
Nếu có nhiều hơn tám bộ xử lý logic, hãy đặt giá trị của n bằng khoảng 5/8 bộ xử lý logic. Điều này hoạt động trong hầu hết các trường hợp ngoại trừ các hệ thống SPARC lớn hơn trong đó giá trị của n có thể xấp xỉ 5/16 bộ xử lý logic.
-XX:ConcGCThreads=n
Đặt số lượng chủ đề đánh dấu song song. Đặt n thành xấp xỉ 1/4 số luồng thu gom rác song song (ParallelGCThreads).
-XX:InitiatingHeapOccupancyPercent=45
Đặt ngưỡng chiếm dụng đống Java kích hoạt chu kỳ đánh dấu. Tỷ lệ chiếm dụng mặc định là 45 phần trăm của toàn bộ đống Java.
-XX:G1MixedGCLiveThresholdPercent=65
Đặt ngưỡng sử dụng cho một khu vực cũ được đưa vào chu trình thu gom rác hỗn hợp. Công suất mặc định là 65 phần trăm
-XX:G1HeapWastePercent=10
Đặt phần trăm đống mà bạn sẵn sàng lãng phí. Máy ảo Java HotSpot không bắt đầu chu trình thu gom rác hỗn hợp khi phần trăm có thể thu hồi nhỏ hơn phần trăm rác đống
-XX:G1MixedGCCountTarget=8
Đặt số lượng mục tiêu của bộ sưu tập rác hỗn hợp sau một chu kỳ đánh dấu để thu thập các khu vực cũ có tối đa dữ liệu trực tiếp G1MixedGCLIveThresholdP phần trăm. Mặc định là 8 bộ sưu tập rác hỗn hợp
-XX:G1OldCSetRegionThresholdPercent=10
Đặt giới hạn trên cho số lượng khu vực cũ sẽ được thu gom trong một chu kỳ thu gom rác hỗn hợp. Mặc định là 10 phần trăm của đống Java
-XX:G1ReservePercent=10
Đặt phần trăm bộ nhớ dự trữ luôn trống để giảm nguy cơ tràn dung lượng. Mặc định là 10 phần trăm. Khi bạn tăng hoặc giảm tỷ lệ phần trăm, hãy đảm bảo điều chỉnh tổng số đống Java theo cùng một số lượng.
Bạn đã cấu hình lại nhiều tham số G1GC, những tham số này không bắt buộc nếu bạn làm theo trang tài liệu trên. Vui lòng kiểm tra lại các đề xuất ở trên, đặc biệt là trên ParallelGCThreads và ConcGCThreads , sẽ dựa trên lõi CPU của bạn. Loại bỏ cấu hình lại các thông số không cần thiết.
Khuyến nghị từ oracle:
Khi bạn đánh giá và tinh chỉnh G1 GC, hãy ghi nhớ các khuyến nghị sau:
Quy mô thế hệ trẻ : Tránh đặt quy mô thế hệ trẻ một cách rõ ràng bằng -Xmn
tùy chọn hoặc bất kỳ hoặc tùy chọn liên quan khác, chẳng hạn như -XX:NewRatio
. Việc sửa quy mô thế hệ trẻ ghi đè mục tiêu về thời gian tạm dừng .
Tạm dừng Mục tiêu thời gian: Khi bạn đánh giá hoặc điều chỉnh bất kỳ bộ sưu tập rác nào, luôn có sự cân bằng giữa độ trễ so với thông lượng. G1 GC là một bộ thu gom rác gia tăng với các khoảng dừng đồng nhất, nhưng cũng có nhiều chi phí hơn trên các luồng ứng dụng. Mục tiêu thông lượng cho G1 GC là 90 phần trăm thời gian ứng dụng và 10 phần trăm thời gian thu gom rác .
- Có bất kỳ thay đổi nào được thực hiện đối với các trình thu thập khác như cms hoặc trình thu thập song song trong Java 7 không?
Có một số thay đổi với Java 7. Mời các bạn xem qua bài viết này
- Tôi có thể tìm tài liệu hay về thu gom rác trong Java 7 ở đâu?
Tham khảo trang tài liệu oracle về gc và câu hỏi SE liên quan:
Thu gom rác Java G1 trong sản xuất