Thu gom rác trong Java: Tất cả những gì bạn cần biết



Bài viết này về thu gom rác trong Java cung cấp cho bạn một ý tưởng rõ ràng về cách nó hoạt động, các loại và các phương pháp khác nhau trong thu thập rác trong Java

là một ngôn ngữ lập trình có mục đích chung và nếu trong trường hợp bạn gặp phải tình huống có dữ liệu không sử dụng trong chương trình của mình và bạn không biết cách xử lý nó, Garbage Collection trong Java sẽ rất hữu ích. Vì vậy, tôi viết bài viết này để giúp bạn xử lý các hàm này.

Tôi sẽ trình bày các chủ đề theo thứ tự sau:





đặt đường dẫn java trong windows

Bắt đầu nào!

Bộ sưu tập rác trong Java là gì?

Trong Java, các lập trình viên phải đối mặt với vấn đề phải hủy bỏ các đối tượng đã hết sử dụng. Nhưng với Garbage Collector, điều này có thể được giải quyết dễ dàng. Mục tiêu chính của Trình thu gom rác này là giải phóng bộ nhớ heap bằng cách phá hủy các đối tượng không chứa tham chiếu. Kỹ thuật này được gọi là Thu gom rác thải.



Nó cũng được coi là một chương trình giúp thực hiện quản lý bộ nhớ tự động. Khi nào được chạy trên JVM, các đối tượng được tạo trên heap, thực sự là một phần của bộ nhớ được dành riêng cho chương trình. Cuối cùng, một số đối tượng sẽ không còn cần thiết nữa. Các người thu gom rác tìm các đối tượng không sử dụng này và xóa chúng để giải phóng bộ nhớ.

  • Các chương trình không cấp phát bộ nhớ cuối cùng có thể bị hỏng khi không còn bộ nhớ trong hệ thống để cấp phát. Tất cả các chương trình này được cho là có rò rỉ bộ nhớ.
  • Việc thu gom rác trong Java diễn ra tự động trong suốt thời gian tồn tại của chương trình, loại bỏ sự cần thiết phải cấp phát bộ nhớ và do đó tránh rò rỉ bộ nhớ.
  • Các phương pháp như miễn phí() trong C và xóa bỏ() trong C ++ được sử dụng nhưng trong Java, nó được thực hiện tự động. Vì thế, cung cấp khả năng quản lý bộ nhớ tốt hơn.

Bây giờ, hãy cùng tìm hiểu cách thức hoạt động của tính năng thu gom rác tự động này trong Java.

Ghi chú : Một đối tượng được cho là đủ điều kiện để thu gom rác, nó không thể truy cập được.



Thu gom rác hoạt động như thế nào?

Thu gom rác là một quá trình làm việc với bộ nhớ Heap và cũng dấu hoặc xác định các đối tượng không thể truy cập và phá hủy chúng bằng nén.

Gom rác trong Java là một quá trình tự động và lập trình viên không cần phải đánh dấu rõ ràng các đối tượng cần xóa. Việc triển khai chủ yếu ở . Mỗi JVM có thể thực hiện thu gom rác. Yêu cầu duy nhất là nó phải đáp ứng đặc điểm kỹ thuật JVM.

Mặc dù có rất nhiều JVM, Của Oracle Lẩu cho đến nay là phổ biến nhất vì nó cung cấp một tập hợp các tùy chọn thu gom rác mạnh mẽ và hoàn thiện.

  • HotSpot có một số trình thu gom rác được tối ưu hóa cho các trường hợp sử dụng khác nhau và tất cả các trình thu gom rác đều tuân theo cùng một quy trình cơ bản.
  • Trong bước đầu tiên, các đối tượng không được tham chiếu được xác định và đánh dấu là đã sẵn sàng để thu gom rác.
  • Trong bước thứ hai, các đối tượng được đánh dấu sẽ bị xóa. Theo tùy chọn, bộ nhớ có thể được nén lại sau khi bộ thu gom rác xóa các đối tượng, vì vậy các đối tượng còn lại nằm trong một khối liền kề ở đầu heap. Quá trình nén giúp dễ dàng hơn trong việc cấp phát bộ nhớ cho các đối tượng mới một cách tuần tự sau khối bộ nhớ được cấp cho các đối tượng hiện có.

Tất cả những người thu gom rác của HotSpot đều thực hiện chiến lược thu gom thế hệ nhằm phân loại các đối tượng theo độ tuổi. Lý do đằng sau việc thu gom rác theo thế hệ là hầu hết các đối tượng đều tồn tại trong thời gian ngắn và sẽ sẵn sàng để thu gom rác ngay sau khi được tạo ra.

Bây giờ, hãy xem các loại công cụ thu gom rác khác nhau là gì.

cách sử dụng chờ và thông báo trong java

Các loại máy thu gom rác

JVM cung cấp bốn bộ thu gom rác khác nhau, tất cả đều là thế hệ. Mỗi cái đều có những ưu điểm và hạn chế riêng. Việc lựa chọn bộ thu gom rác nào để sử dụng nằm ở người dùng và có thể có nhiều khác biệt về thông lượng và số lần tạm dừng ứng dụng.

Cụ thể là có 4 loại máy thu gom rác.

  • Bộ thu gom rác nối tiếp (GC) :Tất cả các sự kiện thu gom rác được tiến hành tuần tự trong một luồng duy nhất. Việc nén được thực hiện sau mỗi lần thu gom rác.
  • GC song song / thông lượng: Nhiều luồng được sử dụng để thu gom rác nhỏ / nhỏ. Một luồng duy nhất được sử dụng để thu gom rác chính và nén Thế hệ cũ. Ngoài ra, biến thể Song song sử dụng nhiều luồng để thu gom rác chính và nén Thế hệ cũ.
  • Bộ sưu tập CMS :Nhiều luồng được sử dụng để thu gom rác nhỏ / nhỏ bằng cách sử dụng thuật toán tương tự như Song song. Phần lớn bộ sưu tập rác là đa luồng, nhưng CMS chạy đồng thời cùng với các quy trình ứng dụng để giảm thiểu các sự kiện ứng dụng. Không có nén được thực hiện.
  • Bộ sưu tập G1 :Bộ thu gom rác này về cơ bản được dùng để thay thế cho CMS. Nó song song và đồng thời giống như CMS, nhưng nó hoạt động hoàn toàn khác khi so sánh với các trình thu gom rác cũ hơn.

Hãy cùng tìm hiểu những ưu điểm của tính năng thu gom rác trong Java.

sự khác biệt giữa ném và ném java

Ưu điểm

  • Lợi ích lớn nhất của việc thu gom rác Java là nó tự động xử lý việc xóa đối tượng không sử dụng hoặc một số đối tượng không thể truy cập để giải phóng tài nguyên bộ nhớ.
  • Garbage Collection hiện là một thành phần tiêu chuẩn mới của nhiều ngôn ngữ lập trình phổ biến.
  • Nó làm cho bộ nhớ Java hiệu quả. Đó là bởi vì bộ thu gom rác loại bỏ các đối tượng không được tham chiếu khỏi bộ nhớ heap.
  • Nó là tự động hoàn thành bởi bộ thu gom rác là một phần của JVM.

Thực hành tốt nhất

Cách tiếp cận tốt nhất để thích ứng với việc thu gom rác Java là đặt cờ trên JVM. Cờ có khả năng điều chỉnh bộ thu gom rác được sử dụng. Nó giúp làm cho nó trở nên phù hợp nhất cho quá trình xử lý phụ trợ, nơi có thể chấp nhận tạm dừng lâu để thu gom rác.

Một điều khác cần lưu ý ở đây là, trình thu gom rác CMS được thiết kế để giảm thiểu các lần tạm dừng, điều này làm cho nó trở nên lý tưởng cho các ứng dụng GUI nơi khả năng phản hồi rất quan trọng. Việc tinh chỉnh bổ sung có thể được thực hiện bằng cách thay đổi kích thước của đống hoặc các phần của nó và đo hiệu quả thu gom rác.

Hãy xem chương trình này.

class Edureka {int a int b public void setData (int c, int d) {a = cb = d} public void showData () {System.out.println ('Giá trị của a =' + a) System.out.println ('Giá trị của b =' + b)} public static void main (String args []) {Edureka e1 = new Edureka () Edureka e2 = new Edureka () e1.setData (1,2) e2.setData (3, 4) e1.showData () e2.showData () // Edureka e3 // e3 = e2 //e3.showData () // e2 = null //e3.showData () // e3 = null //e3.showData ()}}

Trong trường hợp này, haicác đối tượng và hai biến tham chiếu được tạo. Nếu bạn thêm một lệnh khác e3 = Null,hai biến tham chiếu sẽ trỏ đến cùng một đối tượng. Và nếu không có tham chiếu đến biến, e3 = e2e3.showData () Tại thời điểm này, không có tham chiếu nào trỏ đến đối tượng và nó đủ điều kiện để thu gom rác.

Phần này sẽ đưa chúng ta đến phần cuối của bài viết ‘Thu gom rác trong Java’ này. Chúng tôi đã học cách xóa các đối tượng không sử dụng trong heap và các kiểu tập hợp khác nhau.

Nếu bạn tìm thấy bài viết này về “Thu gom rác trong Java”, hãy xem của Edureka, một công ty học trực tuyến đáng tin cậy với mạng lưới hơn 250.000 người học hài lòng trải dài trên toàn cầu. Chúng tôi ở đây để giúp bạn từng bước trên hành trình của bạn, chúng tôi đưa ra một chương trình giảng dạy được thiết kế cho sinh viên và các chuyên gia muốn trở thành một Nhà phát triển Java.

Có một câu hỏi cho chúng tôi? Vui lòng đề cập đến nó trong phần nhận xét của “Bộ sưu tập rác trong Java ' và chúng tôi sẽ liên hệ lại với bạn trong thời gian sớm nhất.