이 튜토리얼에서 우리는 기존의 몇 가지 쓰레기 수집가에 대해 배울 것입니다. Java에서 쓰레기 수집은 프로그래머를 메모리 할당 및 재활용과 같은 복잡한 작업으로 대체 할 수있는 자동 프로세스입니다. 이 기사는 쓰레기 수집 자습서 시리즈의 세 번째 기사입니다. 이전 2 부에서는 Java에서 쓰레기 수집이 어떻게 작동하는지 보았습니다. 그것은 흥미로운 기사입니다. 살펴 보는 것이 좋습니다. 첫 번째 부분은 주로 JVM 아키텍처, 힙 메모리 모델 및 일부 Java 용어를 포함하여 Java Garbage Collection을 소개합니다.
Java에는 4 가지 종류의 쓰레기 수집가가 있습니다.
일련의 쓰레기 수집기
평행 쓰레기 수집기
동시 태그 스캐닝 쓰레기 수집기 (CMS 쓰레기 수집기)
G1 쓰레기 수집기
각 유형에는 고유 한 강점과 약점이 있습니다. 중요하게는 프로그램을 프로그래밍 할 때 JVM을 통해 쓰레기 수집기 유형을 선택할 수 있습니다. 우리는 매개 변수를 JVM에 전달하여 선택합니다. 각 유형은 매우 다르며 완전히 다른 응용 프로그램 성능을 제공 할 수 있습니다. 각 유형의 쓰레기 수집기를 이해하고 응용 프로그램 선택에 따라 올바른 선택을하는 것이 매우 중요합니다.
1. 일련의 쓰레기 수집기
연속 쓰레기 수집기는 응용 프로그램의 모든 스레드를 고정하여 작동합니다. 단일 스레드 환경을 위해 설계되었으며 쓰레기 수집을위한 단일 스레드 만 사용하며 모든 응용 프로그램 스레드를 동결하여 작동하므로 서버 환경에 적합하지 않을 수 있습니다. 간단한 명령 줄 프로그램에 가장 적합합니다.
연속 쓰레기 수집기는 JVM 매개 변수 -xx :+useerialgc를 통해 사용할 수 있습니다.
2. 병렬 쓰레기 수집기
병렬 쓰레기 수집기는 또한 vasureCollector라고도합니다. JVM의 기본 쓰레기 수집가입니다. 일련의 쓰레기 수집기와 달리 쓰레기 수집을 위해 멀티 스레딩을 사용합니다. 마찬가지로 가비지 컬렉션을 수행 할 때 모든 응용 프로그램 스레드가 동결됩니다.
3. 동시 마크 스캐닝 쓰레기 수집기
동시 태그 쓰레기 수집은 힙 메모리의 멀티 스레드 스캔을 사용하여 청소 해야하는 인스턴스를 표시하고 표시된 인스턴스를 청소합니다. 동시 태그 쓰레기 수집기는 다음 두 경우에 응용 프로그램의 모든 스레드 만 보유합니다.
태그가 붙은 기준 객체가 임기 영역에있을 때;
쓰레기 수집 중에 힙 메모리의 데이터가 동시에 변경됩니다.
동시 태그 스캐닝 쓰레기 수집기는 더 많은 CPU를 사용하여 병렬 쓰레기 수집기보다 프로그램 처리량을 보장합니다. 더 나은 프로그램 성능을 위해 더 많은 CPU를 할당 할 수 있다면 스캔 쓰레기 수집기의 동시 마크 업은 동시 쓰레기 수집기보다 더 나은 옵션입니다.
JVM 매개 변수 xx를 통해 동시 Mark Scan 쓰레기 수집기를 열십시오.
4. G1 쓰레기 수집기
G1 쓰레기 수집기는 힙 메모리가 큰 상황에 적합합니다. 힙 메모리를 다른 영역으로 나누고 쓰레기는 동시에 수집합니다. G1은 메모리를 되 찾은 후 나머지 힙 메모리 공간을 압축 할 수 있습니다. 동시 스캔은 쓰레기 수집기가 STW 케이스에서 메모리를 압축합니다. G1 쓰레기 수집은 첫 번째 작품에서 가장 많은 쓰레기 로이 지역에 우선 순위를 부여합니다.
JVM 매개 변수 XX를 통해 G1 쓰레기 수집기를 사용하십시오.+USEG1GC
Java8의 새로운 기능
G1 쓰레기 수집기를 사용할 때는 JVM 매개 변수 -xx :+usestringdedupplication을 사용하십시오. 중복 문자열을 제거하고 하나의 숯 만 유지하여 힙 메모리를 최적화 할 수 있습니다 []. 이 옵션은 Java8U20에서 소개되었습니다.
우리는 4 개의 Java Garbage Collectors를 모두 제공했으며, 이는 응용 프로그램 시나리오, 하드웨어 성능 및 처리량 요구 사항에 따라 사용해야합니다.
쓰레기 수집을위한 JVM 구성
다음 JVM 키 구성은 모두 Java Garbage Collection과 관련이 있습니다.
쓰레기 수집가의 유형
| 구성 | 설명하다 |
|---|---|
| -xx :+useerialgc | 일련의 쓰레기 수집기 |
| -xx :+useparallelgc | 평행 쓰레기 수집기 |
| -XX :+USECONCMARKSWEEPGC | 동시 태그 스캐닝 쓰레기 수집기 |
| -xx : parallelcmsThreads = | 동시 태그 스캔 쓰레기 수집기 = 사용 된 스레드 수 |
| -xx :+useg1gc | G1 쓰레기 수집기 |
GC의 최적화 된 구성
| 구성 | 설명하다 |
|---|---|
| -xms | 힙 메모리 크기를 초기화하십시오 |
| -xmx | 최대 힙 메모리 값 |
| -xmn | 연대기 크기 |
| -xx : permsize | 영구 생성 크기를 초기화하십시오 |
| -xx : maxpermsize | 영구 생성 최대 용량 |
JVM GC 매개 변수 사용의 예
java -xmx12m -xms3m -xmn1m -xx : permsize = 20m -xx : maxpermsize = 20M -XX :+useSerialGC -Jar Java -Application.jar
요약
위의 것은이 기사에서 Java Garbage Collectors의 유형에 대한 간단한 이해에 관한 것이며, 모든 사람에게 도움이되기를 바랍니다. 관심있는 친구는이 사이트의 다른 관련 주제를 계속 참조 할 수 있습니다. 단점이 있으면 메시지를 남겨 두십시오. 이 사이트를 지원해 주신 친구들에게 감사드립니다!