자바의 가비지 컬렉션 : 알아야 할 모든 것



Java의 가비지 콜렉션에 대한이 기사는 Java의 가비지 콜렉션에서 작동 방식, 유형 및 다양한 메소드에 대한 명확한 아이디어를 제공합니다.

는 범용 프로그래밍 언어이며 프로그램에 사용되지 않은 데이터가 있고이를 처리하는 방법을 모르는 경우 Java의 가비지 수집이 유용합니다. 따라서 이러한 기능을 처리하는 데 도움이되도록이 기사를 작성하고 있습니다.

다음 순서로 주제를 다룰 것입니다.





시작하자!

Java의 가비지 컬렉션이란 무엇입니까?

자바에서 프로그래머는 사물 사용하지 않습니다. 그러나 가비지 콜렉터를 사용하면 쉽게 처리 할 수 ​​있습니다. 이 가비지 수집기의 주요 목적은 참조가 포함되지 않은 개체를 제거하여 힙 메모리를 해제하는 것입니다. 이 기술은 다음과 같이 알려져 있습니다. 가비지 컬렉션.



또한 자동 메모리 관리를 수행하는 데 도움이되는 프로그램으로 간주됩니다. 언제 JVM에서 실행되고, 객체는 실제로 프로그램 전용 메모리의 일부인 힙에 생성됩니다. 결국 일부 개체는 더 이상 필요하지 않습니다. 그만큼 가비지 수집기 사용하지 않는 개체를 찾아 삭제하여 메모리를 확보합니다.

  • 메모리 할당을 해제하지 않는 프로그램은 할당 할 메모리가 시스템에 남아 있지 않으면 결국 중단 될 수 있습니다. 이 모든 프로그램은 메모리 누수가 있다고합니다.
  • Java의 가비지 콜렉션은 프로그램 수명 동안 자동으로 발생하므로 메모리 할당을 해제 할 필요가 없으므로 메모리 누수를 방지 할 수 있습니다.
  • 같은 방법 비어 있는() C 및 지우다() C ++에서는 사용되지만 Java에서는 자동으로 수행됩니다. 그래서, 더 나은 메모리 관리를 제공합니다.

이제이 자동 가비지 수집이 Java에서 작동하는 방식을 이해하겠습니다.

노트 : 개체에 도달 할 수없는 경우 가비지 수집 대상이라고합니다.



가비지 컬렉션은 어떻게 작동합니까?

가비지 컬렉션은 힙 메모리와 함께 작업하는 프로세스이며 또는 도달 할 수없는 개체를 식별하고 압축을 통해 파괴합니다.

Java의 가비지 콜렉션은 자동 프로세스이며 프로그래머는 삭제할 오브젝트를 명시 적으로 표시 할 필요가 없습니다. 구현은 주로 . 각 JVM은 가비지 콜렉션을 구현할 수 있습니다. 유일한 요구 사항은 JVM 사양을 충족해야한다는 것입니다.

사용 가능한 JVM이 많지만 오라클 핫스팟 강력하고 성숙한 가비지 컬렉션 옵션을 제공하기 때문에 가장 일반적입니다.

  • HotSpot에는 다양한 사용 사례에 최적화 된 여러 가비지 수집기가 있으며 모든 가비지 수집기는 동일한 기본 프로세스를 따릅니다.
  • 첫 번째 단계에서 참조되지 않은 개체 가비지 수집 준비가 된 것으로 식별되고 표시됩니다.
  • 두 번째 단계에서는 표시된 개체가 삭제됩니다. 선택적으로 가비지 수집기가 개체를 삭제 한 후 메모리를 압축 할 수 있으므로 나머지 개체는 힙 시작시 연속 블록에 있습니다. 압축 프로세스를 사용하면 기존 개체에 메모리 블록을 할당 한 후 순차적으로 새 개체에 메모리를 쉽게 할당 할 수 있습니다.

HotSpot의 모든 가비지 수집기는 개체를 연령별로 분류하는 세대 별 수집 전략을 구현합니다. 세대 별 가비지 수집의 근거는 대부분의 개체가 수명이 짧고 생성 직후 가비지 수집을 위해 준비된다는 것입니다.

Java에서 2 진수에서 10 진수로

이제 다양한 유형의 가비지 수집기가 무엇인지 살펴 보겠습니다.

가비지 수집기 유형

JVM은 4 개의 서로 다른 가비지 수집기를 제공하며 모두 세대별로 제공됩니다. 각각의 장점과 한계가 있습니다. 사용할 가비지 수집기의 선택은 사용자에게 있으며 처리량 및 응용 프로그램 일시 중지에 많은 차이가있을 수 있습니다.

즉, 4 가지 유형의 가비지 수집기가 있습니다.

  • 직렬 가비지 수집기 (GC) :모든 가비지 수집 이벤트는 단일 스레드에서 연속적으로 수행됩니다. 압축은 각 가비지 수집 후에 실행됩니다.
  • 병렬 / 처리량 GC : 소규모 / 소규모 가비지 수집에 여러 스레드가 사용됩니다. 단일 스레드는 주요 가비지 수집 및 구세대 압축에 사용됩니다. 또한 병렬 변형은 주요 가비지 수집 및 구세대 압축에 여러 스레드를 사용합니다.
  • CMS 수집기 :병렬과 동일한 알고리즘을 사용하여 소규모 / 사소한 가비지 수집에 여러 스레드가 사용됩니다. 대부분의 가비지 수집은 다중 스레드이지만 CMS는 응용 프로그램 이벤트를 최소화하기 위해 응용 프로그램 프로세스와 함께 동시에 실행됩니다. 압축이 수행되지 않습니다.
  • G1 수집기 :이 가비지 수집기는 기본적으로 CMS를 대체하기위한 것입니다. CMS와 같이 병렬적이고 동시 적이지만 이전 가비지 수집기와 비교할 때 상당히 다르게 작동합니다.

Java에서 가비지 수집의 장점을 이해해 보겠습니다.

장점

  • Java 가비지 수집의 가장 큰 이점은 자동으로 삭제 처리 사용하지 않는 개체 또는 메모리 리소스를 확보하기 위해 액세스 할 수없는 일부 개체
  • 가비지 컬렉션은 이제 많은 인기있는 프로그래밍 언어의 새로운 표준 구성 요소입니다.
  • Java 메모리를 효율적으로 만듭니다. 가비지 수집기가 힙 메모리에서 참조되지 않은 개체를 제거하기 때문입니다.
  • 그것은 자동으로 완료 JVM의 일부인 가비지 수집기에 의해.

모범 사례

Java 가비지 콜렉션에 적응하는 가장 좋은 방법은 JVM에 플래그를 설정하는 것입니다. 플래그는 사용할 가비지 수집기를 조정할 수 있습니다. 가비지 수집을위한 긴 일시 중지가 허용되는 백엔드 처리에 가장 적합하도록 만드는 데 도움이됩니다.

여기서 주목해야 할 또 다른 점은 CMS 가비지 수집기가 일시 중지를 최소화하도록 설계되어 응답 성이 매우 중요한 GUI 애플리케이션에 이상적이라는 것입니다. 힙 또는 해당 섹션의 크기를 변경하고 가비지 콜렉션 효율성을 측정하여 추가 미세 조정을 수행 할 수 있습니다.

이 프로그램을 살펴 보겠습니다.

class Edureka {int a int b public void setData (int c, int d) {a = cb = d} public void showData () {System.out.println ( 'Value of a ='+ a) System.out.println ( 'Value of 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 ()}}

이 경우 두개체와 두 개의 참조 변수가 생성됩니다. 다른 명령 e3 = Null을 추가하면두 개의 참조 변수는 동일한 객체를 가리 킵니다. 그리고 변수에 대한 참조가없는 경우 e3 = e2e3.showData ()이 시점에서 객체를 가리키는 참조가 없으며 가비지 수집 대상이됩니다.

이것으로이 '자바의 가비지 컬렉션'기사를 마치겠습니다. 힙에서 사용하지 않는 개체를 제거하는 방법과 다양한 컬렉션 유형을 배웠습니다.

'자바의 가비지 수집'에서이 기사를 찾았다면 전 세계에 걸쳐 250,000 명 이상의 만족 한 학습자 네트워크를 보유한 신뢰할 수있는 온라인 학습 회사 인 Edureka에서 작성했습니다. 우리는 여정의 모든 단계에서 귀하를 돕기 위해 여기에 있으며 Java 개발자가 되고자하는 학생과 전문가를 위해 설계된 커리큘럼을 마련했습니다.

질문이 있으십니까? 이 '자바의 가비지 컬렉션'의 주석 섹션에 언급하십시오. ' 가능한 한 빨리 연락 드리겠습니다.