Sự khác biệt giữa -XX: + UseParallelGC và -XX: + UseParNewGC


82

Chúng là các thuật toán thu gom rác thế hệ trẻ.

Giải pháp thứ hai (UseParNewGC) được kích hoạt tự động với bộ thu gom rác thế hệ đồng thời được xác định (xem Java Đồng thời và Song song GC ) nhưng, có sự khác biệt giữa hai thuật toán song song không?

Câu trả lời:


119

Sau rất nhiều tìm kiếm, lời giải thích tốt nhất mà tôi tìm thấy là từ trang web Điều chỉnh Hiệu suất Java trong Câu hỏi của tháng: 1.4.1 Các thuật toán thu gom rác, ngày 29 tháng 1 năm 2003

Thuật toán thu gom rác thế hệ trẻ

Bộ sưu tập sao chép (gốc) (Được bật theo mặc định). Khi bộ sưu tập này khởi động, tất cả các luồng ứng dụng sẽ dừng lại và quá trình thu thập sao chép sẽ tiến hành bằng một luồng (có nghĩa là chỉ một CPU ngay cả khi trên máy nhiều CPU). Đây được gọi là bộ sưu tập dừng lại ở khắp nơi trên thế giới, vì về cơ bản JVM tạm dừng mọi thứ khác cho đến khi bộ sưu tập hoàn thành.

Bộ thu sao chép song song (Được bật bằng -XX: + UseParNewGC). Giống như nhà sưu tập sao chép nguyên bản, đây là một nhà sưu tập hàng đầu thế giới. Tuy nhiên, bộ sưu tập này song song hóa bộ sưu tập sao chép qua nhiều luồng, hiệu quả hơn bộ thu sao chép đơn luồng ban đầu cho các máy nhiều CPU (mặc dù không phải cho các máy một CPU). Thuật toán này có khả năng tăng tốc độ thu thập thế hệ trẻ bằng một hệ số tương đương với số lượng CPU có sẵn, khi so sánh với bộ sưu tập sao chép đơn luồng ban đầu.

Bộ thu nhặt rác song song (Được bật bằng -XX: UseParallelGC). Điều này giống như bộ thu thập sao chép song song trước đó, nhưng thuật toán được điều chỉnh cho các đống gigabyte (hơn 10GB) trên các máy nhiều CPU. Thuật toán thu thập này được thiết kế để tối đa hóa thông lượng trong khi giảm thiểu các lần tạm dừng. Nó có một chính sách điều chỉnh thích ứng tùy chọn sẽ tự động thay đổi kích thước không gian đống. Nếu bạn sử dụng bộ thu này, bạn chỉ có thể sử dụng bộ thu quét đánh dấu ban đầu ở thế hệ cũ (tức là bộ thu đồng thời thế hệ cũ mới hơn không thể hoạt động với bộ sưu tập thế hệ trẻ này).

Từ thông tin này, có vẻ như sự khác biệt chính (ngoài hợp tác CMS) là UseParallelGC hỗ trợ công thái học trong khi UseParNewGC thì không.


3
Liên kết cập nhật hơn một chút fastj.com/articles/oraclecollectors1.shtml
phunehehe

@phunehehe Cảm ơn vì liên kết! Nó rất hữu ích.
The Student Soul

21

GC song song

  • XX: + UseParallelGC Sử dụng bộ thu gom rác song song để nhặt rác. (Giới thiệu trong 1.4.1)
  • XX: + UseParallelOldGC Sử dụng bộ thu gom rác song song cho các bộ sưu tập đầy đủ. Bật tùy chọn này sẽ tự động đặt -XX: + UseParallelGC. (Được giới thiệu trong bản cập nhật 5.0 6.)

UseParNewGC

UseParNewGC Một phiên bản song song của bộ thu thập sao chép thế hệ trẻ được sử dụng với bộ thu thập đồng thời (nghĩa là nếu -XX: + UseConcMarkSweepGC được sử dụng trên dòng lệnh thì cờ UseParNewGC cũng được đặt thành true nếu nó không được đặt rõ ràng trên dòng lệnh ).

Có lẽ cách dễ hiểu nhất là sự kết hợp của các thuật toán thu gom rác do Alexey Ragozin thực hiện

Phần kết luận:

  1. Áp dụng -XX: + UseParallelGC khi bạn yêu cầu phương pháp thu thập song song CHỈ đối với thế hệ TRẺ , ( nhưng vẫn) sử dụng phương pháp quét dấu nối tiếp làm bộ sưu tập thế hệ
  2. Áp dụng -XX: + UseParallelOldGC khi bạn yêu cầu phương pháp thu thập song song trong quá trình tạo YOUNG (tự động đặt -XX: + UseParallelGC) bộ sưu tập tạo
  3. Áp dụng -XX: + UseParNewGC & -XX: + UseConcMarkSweepGC khi bạn yêu cầu phương pháp thu thập song song trong thế hệ YOUNG yêu cầu phương pháp CMS làm bộ sưu tập của bạn trên bộ nhớ thế hệ
  4. Bạn không thể áp dụng -XX: + UseParallelGC hoặc -XX: + UseParallelOldGC với -XX: + UseConcMarkSweepGC đồng thời, đó là lý do tại sao bạn yêu cầu -XX: + UseParNewGC phải được ghép nối với CMS, nếu không hãy sử dụng -XX: + UseSerialGC rõ ràng HOẶC -XX: - UseParNewGC nếu bạn muốn sử dụng phương pháp nối tiếp chống lại thế hệ trẻ

Phải -XX:-UseParallelGC.
Minas Mina

Lưu ý: Kết luận số 1 không còn đúng nữa. Áp dụng các -XX:+UseParallelGCđầu mối để sử dụng GC song song cho cả GC trẻ và già cho các liên doanh hiện đại. Xem bug.openjdk.java.net/browse/…
turbanoff

15

UseParNewGC thường được biết đến là "bộ thu gom thế hệ trẻ song song" về mọi mặt giống như bộ thu gom rác song song (-XX: + UseParallelGC), ngoại trừ việc nó ngụy biện và hiệu quả hơn. Ngoài ra nó có thể được sử dụng với một "bộ thu tạm dừng đồng thời thấp".

Xem Câu hỏi thường gặp về Java GC , câu hỏi 22 để biết thêm thông tin.

Lưu ý rằng có một số lỗi đã biết với UseParNewGC


8
Bạn có biết lỗi nào đã biết hoặc phiên bản JVM nào có chúng không?
fglez

4

Sử dụng -XX: + UseParNewGC cùng với -XX: + UseConcMarkSweepGC, sẽ gây ra thời gian tạm dừng cao hơn cho các GC nhỏ, khi so sánh với -XX: + UseParallelGC.

Điều này là do việc quảng cáo các đối tượng từ Thế hệ trẻ đến Thế hệ cũ sẽ yêu cầu chạy thuật toán Best-Fit (do phân mảnh thế hệ cũ) để tìm địa chỉ cho đối tượng này.
Không bắt buộc phải chạy một thuật toán như vậy khi sử dụng -XX: + UseParallelGC, vì + UseParallelGC chỉ có thể được định cấu hình với MarkandCompact Collector, trong trường hợp này không có phân mảnh.


Đây là một cái nhìn sâu sắc thực sự tốt. Bạn đã thực hiện bất kỳ kiểm tra nào để xác nhận nó?
fglez
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.