제가 제공한 다른 두 기사를 통해 가비지 수집기에 대해 많은 것을 배울 수 있다고 믿습니다. 우리가 정말로 주의를 기울여야 하고 심지어 사용할 수도 있는 가비지 수집기는 다음 네 가지 유형입니다:
클라이언트
유형의 가상 머신 또는 에 있는 경우 단일 코어
가 있는 서버에서는 이 가비지 수집기가 기본 가비지 수집기가 됩니다. Minor GC이든 Full GC이든 모든 애플리케이션 스레드가 일시 중단됩니다. Serial Old는 단일 스레드 구세대 버전이기도 한 구세대에서 사용됩니다. client
型的虚拟机或者在单核
的服务器上,这种垃圾回收器将会成为默认的垃圾回收器。无论是Minor GC 还是 Full GC ,所有的应用线程都会暂停。在老年代当中使用的是Serial Old,同样是单线程的老年代版本。
client型虚拟机,我们前面提到过编译类型分为client和server,jvm会通过client编译器(单线程)将代码编译成jvm识别的字节码。
可以通过如下标志表示:
-XX:+UseSerialGC
在server型虚拟机或多线程服务器上,jdk8默认使用的垃圾收集器类型。
无论是Minor GC还是Full GC都使用多线程的方式去回收垃圾,这两种GC都会造成应用线程的暂停。但是它具有更多的吞吐量,是对于响应时间没有过多要求情况下,最合适的垃圾回收器。
可以通过如下标志查看其状态:
年轻代:
-XX:+UseParallelGC
老年代:
-XX:+UseParallelOldGC
其设计初衷是为了减少serial和parallel收集器,在回收时造成的长时间的系统卡顿。
它在发生Minor GC时同样会暂停所有的应用线程,不同之处在于,年轻代使用的不是parallel或者serial,而是使用一款专门适用于CMS的年轻代收集器ParNew
。
可以通过下面的标志查看:
-XX:+UseParNewGC
CMS在发生Full GC时不再暂停全部应用线程,使用多线程的方式,和应用线程同时运行,清理不在使用的对象。这事得CMS垃圾收集器的停顿时间得到大大的降低。与Parellel收集器相比,极其明显。
缺点:
CMS需要占用较多的CPU资源,确保在应用线程运行时,gc线程不断地扫描堆空间。
不会对内存进行压缩整理,导致内存碎片化。
如果没有足够的CPU资源,或者内存碎片化达到极限,将会退化成serial
收集器。
可以通过下面的标志查看:
-XX:+UseConcMarkSweepGC
也可以称作垃圾优先收集器
(garbage first)。
设计初衷是为了尽量减少处理超大堆(4gb)时发生的卡顿。G1仍然属于分代收集器,但是不同之处是它是逻辑分代
다음 플래그로 나타낼 수 있습니다:
-XX:+UseG1GC병렬 다중 스레드 가비지 수집기서버형 가상 머신이나 다중 스레드 서버에서 jdk8이 기본적으로 사용하는 가비지 수집기 유형입니다. Minor GC와 Full GC는 모두 멀티스레딩을 사용하여 가비지를 수집합니다. 두 가지 유형의 GC 모두 애플리케이션 스레드를 일시 중지시킵니다. 그러나 처리량이 더 많고 응답 시간에 대한 과도한 요구 사항이 없을 때 가장 적합한 가비지 수집기입니다.
다음 기호를 통해 상태를 확인할 수 있습니다.
젊은 세대:System.gc;구 세대:
rrreeeCMS 컬렉터
재활용 시 직렬 및 병렬 컬렉터로 인해 발생하는 오랜 시간을 줄이기 위한 독창적인 디자인입니다. 시스템이 막혔습니다.rrreee
CMS는 더 이상 Full GC 발생 시 모든 애플리케이션 스레드를 일시 중단하지 않습니다. 멀티스레딩을 사용하여 애플리케이션 스레드와 동시에 실행되고 더 이상 존재하지 않는 개체를 정리합니다. 사용. 이렇게 하면 CMS 가비지 수집기의 일시 중지 시간이 크게 줄어듭니다. Parallel 컬렉터에 비해 매우 분명합니다.단점
: 🎜🎜🎜🎜CMS는 애플리케이션 스레드가 실행 중일 때 gc 스레드가 지속적으로 힙 공간을 검색하도록 더 많은 CPU 리소스를 점유해야 합니다. 🎜🎜🎜🎜 메모리를 압축하고 정리하지 않아 메모리 조각화가 발생합니다. 🎜🎜🎜🎜CPU 리소스가 부족하거나 메모리 조각화가 한계에 도달하면직렬
수집기로 퇴화됩니다. 🎜🎜🎜다음 로고로 볼 수 있습니다: 🎜🎜rrreee🎜G1 Collector🎜🎜Garbage First Collector
(가비지 우선)라고도 합니다. 🎜🎜원래 설계는 매우 큰 힙(4GB)을 처리할 때 발생하는 지연을 최소화하는 것입니다. G1은 여전히 세대별 수집기에 속하지만 차이점은 논리적 세대
입니다. G1은 힙 공간을 여러 영역(Regions)으로 나눕니다. 새로운 세대의 가비지 수집은 여전히 모든 애플리케이션 스레드를 일시 중지하여 살아남은 개체를 이전 세대 또는 생존자 공간에 복사하는 방법을 사용합니다. Old Generation도 여러 영역으로 나누어져 있는데, G1 컬렉터는 한 영역에서 다른 영역으로 객체를 복사하여 정리 작업을 완료합니다. 이는 CMS의 메모리 조각화 문제를 해결합니다. 🎜🎜CMS와 마찬가지로 G1도 Old Generation에서 Full GC가 발생하면 애플리케이션 스레드를 일시 중지하지 않고 백그라운드 스레드가 재활용 작업을 완료합니다. 🎜🎜🎜다음 로고를 통해 확인하세요. 🎜🎜rrreee🎜사실 위 내용은 간단한 설명이므로 실제 구현 내용은 처음에 제공된 글을 참고해주세요. 🎜🎜명시적 가비지 수집🎜🎜🎜여기서 언급된 명시적 가비지 수집은 실제로 아래와 같이 수동으로 실행되는 가비지 수집을 나타냅니다. 🎜🎜rrreee🎜이것은 jvm이 gc Way를 강제하도록 허용하는 일종의 제어입니다. 언제든지 가비지 수집에 이 방법을 사용하지 않는 것이 좋습니다. 🎜🎜이 사양을 사용하면 CMS든 G1이든 어떤 종류의 가비지 컬렉터라도 Full GC가 발생하고 모든 애플리케이션 스레드가 동시에 중지되므로 오랜 시간 동안 지연이 발생합니다. 🎜🎜🎜예외: 🎜🎜🎜🎜🎜성능 분석, 테스트🎜🎜🎜🎜힙 분석🎜🎜🎜🎜위의 상황에서 System.gc를 호출하면 현재 애플리케이션의 문제를 분석하는 데 더 도움이 됩니다. 🎜위 내용은 Java 성능 최적화를 위한 일반적인 가비지 수집기는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!