02 Aug

garbage collector 예제

이 슬라이드에서는 프로모션을 보여 줍니다. 사소한 GC 후, 오래된 개체가 특정 연령 임계값에 도달하면 (이 예에서 8) 그들은 젊은 세대에서 노인세대로 승진됩니다. 자동 가비지 수집은 힙 메모리를 보고 사용 중인 개체와 사용 되지 않는 개체를 식별하고 사용되지 않는 개체를 삭제하는 프로세스입니다. 사용 중인 개체 또는 참조된 개체는 프로그램의 일부가 해당 개체에 대한 포인터를 계속 유지 관리한다는 것을 의미합니다. 사용되지 않는 개체 또는 참조되지 않은 개체는 프로그램의 모든 부분에서 더 이상 참조되지 않습니다. 따라서 참조되지 않은 개체에서 사용하는 메모리를 회수할 수 있습니다. 주요 쓰레기 수거는 또한 세계 를 중지 이벤트입니다. 모든 라이브 개체를 포함하기 때문에 주요 컬렉션이 훨씬 느린 경우가 많습니다. 따라서 응답 응용 프로그램의 경우 주요 가비지 수집을 최소화해야 합니다.

또한 주요 가비지 수집에 대한 Stop the World 이벤트의 길이는 이전 세대 공간에 사용되는 가비지 수집기의 종류에 의해 영향을 받습니다. 이 OBE에서는 Java JVM에서 가비지 수집 시스템에 대한 개요를 받았습니다. 먼저 힙과 가비지 수집기는 Java JVM의 핵심 부분입니다. 자동 가비지 수집은 세대간 가비지 수집 방법을 사용하여 수행됩니다. 프로세스를 학습한 후에는 Visual VM 도구를 사용하여 프로세스를 관찰했습니다. 마지막으로 Java Hospot JVM에서 사용할 수 있는 가비지 수집기는 검토했습니다. finalize() 메서드는 개체가 가비지 수집되기 전에 매번 호출됩니다. 이 메서드는 정리 처리를 수행하는 데 사용할 수 있습니다. 이 메서드는 Object 클래스에서 다음과 같이 정의됩니다: 다른 탭을 사용해 보고 JVM에 대해 표시되는 정보를 확인하십시오.

또한 샘플 응용 프로그램에 표시된 문자열 또는 이미지 수를 변경하여 가비지 수집 프로세스에 미치는 영향을 확인할 수 있습니다. 가비지 퍼스트 또는 G1 가비지 수집기는 Java 7에서 사용할 수 있으며 CMS 수집기를 장기적으로 대체할 수 있도록 설계되었습니다. G1 수집기는 앞에서 설명한 다른 가비지 수집기와 는 상당히 다른 레이아웃을 가지는 병렬, 동시 및 점진적으로 압축된 일시 정지 가비지 수집기입니다. 그러나 자세한 논의는 이 OBE의 범위를 벗어납니다. 이것이 가비지 수집의 작동 방식에 대한 개념입니다. 많은 사람들이 가비지 수집이 죽은 개체를 수집하고 폐기한다고 생각합니다. 실제로 Java 가비지 수집은 그 반대입니다! 라이브 개체가 추적되고 기타 지정된 모든 가비지가 추적됩니다. 보시다시피 이러한 근본적인 오해는 많은 성능 문제를 초래할 수 있습니다. -XX:+UseParallelOldGC 옵션을 사용하면 GC는 다중 스레드된 젊은 세대 수집기와 다중 스레드된 이전 세대 수집기입니다. 또한 다중 스레드 압축 수집기입니다. 핫스팟은 이전 세대에서만 압축을 수행합니다. 핫스팟의 젊은 세대는 카피 컬렉터로 간주됩니다.

따라서 압축이 필요하지 않습니다. Java JDK 및 데모를 설치하면 이 활동에서 분석할 데모 응용 프로그램을 실행할 수 있습니다. 이 예제에서는 데모가 c:javademos에 설치됩니다. 가비지 수집은 메모리에서 연결할 수 없지만 삭제되지 않은 개체와 같은 클래식 메모리 누수의 원인을 제거하기 위한 것입니다. 그러나 이것은 원래 의미에서 메모리 누수에 대해서만 작동합니다. 개발자가 단순히 반리반하는 것을 잊어 버렸기 때문에 응용 프로그램에서 여전히 연결할 수 있는 사용하지 않는 개체를 가질 수 있습니다.