내 연락처 정보
우편메소피아@프로톤메일.com
2024-07-11
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
작가: ofLJli
링크: https://juejin.cn/post/7003213289425633287?searchId=20240709085629749958B21D886D4E67D4
출처: 희토류 덩어리
저작권은 작성자에게 있습니다. 상업적인 재인쇄의 경우 저자에게 연락하여 승인을 받으시기 바랍니다. 비상업적 재인쇄의 경우 출처를 명시해 주시기 바랍니다.
JVM의 주요 구조는 가상 머신 스택, 힙 및 메소드 영역입니다. 가상 머신 스택의 스택 프레임 크기는 컴파일러에 의해 결정됩니다. 메서드 또는 스레드 기술이 종료되면 가상 머신 스택의 메모리도 재활용됩니다. Java 힙 및 메소드 영역에는 이 메모리 부분의 할당 및 재활용이 동적입니다. GC가 관심을 갖는 것은 이 메모리 부분을 관리하는 방법입니다.
이 문서에서는 GC가 수행해야 하는 다음 세 가지 사항에 중점을 둡니다.
두 세대의 가설에 따르면:绝大多数的对象都是朝生夕死
,熬过越多次的GC回收的对象就越难回收
. 힙은 세대로 나누어져 새로운 세대(Eden, From, To), Old 세대, 세대별 재활용도 GC 중에 수행됩니다.
마이너GC : 사용하지 않는 물건을 신세대에 재활용합니다. 신세대의 대부분 물건의 특징은 하룻밤 사이에 살고 죽는다는 것입니다. 트리거 시간은 다음과 같습니다.
标记-复制算法
이 영역을 재활용하십시오(나중에 논의됨).메이저GC : Old Generation에서 사용되지 않는 객체를 재활용합니다.일반적인 사용标记-清除算法
또는标记-整理算法
재활용.
풀GC : 힙 및 메서드 영역에서 사용되지 않는 개체를 재활용합니다. Full GC 재활용 범위가 상대적으로 크고, 실행 시간이 길면 지연이 발생할 수 있으므로 Full GC 횟수를 최대한 줄여야 합니다. 발동 시간은 대략 다음과 같습니다.
Old Generation에서 공간이 부족한 것은 New Generation 객체가 Old Generation에 들어가는 경우, 큰 객체가 Old Generation에 직접 들어가는 경우 등으로 인해 발생합니다. 이러한 객체를 Old Generation의 최대 연속 공간에 저장할 수 없는 경우 Full GC 재활용이 수행됩니다. .
메소드 영역의 공간이 부족합니다. 메소드 영역은 주로 유형 정보와 상수 풀을 저장하며 공간이 부족할 위험도 있으며 Full GC 재활용이 수행됩니다.
System.gc()는 명시적으로 호출되며 Full GC에 의해 재활용됩니다.
원리: 사용可达性分析算法
사용할 수 없는 개체 만들기표시을 수행한 다음분명한 . 단점: 개체가 많을 경우 마킹 효율이 낮다. 개체를 지운 후에는 메모리 조각화가 발생하고 메모리가 중단됩니다. 목적: 일부 수집기는 이전 세대 수집에서 이 알고리즘을 사용합니다.
원리: 메모리 공간을 둘로 나누어 절반은 객체 저장에 사용되고 나머지 절반은 무료입니다.물건을 보관하는 공간이 가득 차면可达性分析算法
살아있는 물체를 이동표시나와서 그 다음복사 또 다른 빈 공간으로 이동하여 이전 공간을 모두 비워 연속된 빈 공간으로 만듭니다. 단점: 살아남은 객체가 많으면 많은 양의 메모리 복사 및 개발이 필요합니다. 메모리 공간은 장점의 절반만 활용하고 자원을 낭비할 수 있습니다. 기능: 이 재활용 알고리즘은 일반적으로 새로운 세대에서 살고 죽는 개체에 사용됩니다. 그러나 복제 알고리즘은 새로운 세대에서 최적화되었지만 이 알고리즘에는 너무 많은 생존 객체가 할당되는 것을 방지하기 위해 할당 보장 메커니즘이 추가되었습니다. Appel 스타일 재활용 알고리즘이 사용됩니다.
원리: 마킹 과정은 다음과 같습니다.标记-清除算法
그럼 똑같아整理存
라이브 개체가 한쪽 끝으로 이동한 다음 라이브 경계 외부의 모든 개체가 이동합니다.清除
. 단점: 물체를 옮기는 데에는 약간의 위험이 따릅니다. 개체가 너무 많으면 비효율적입니다. 기능: 주로 노년기에 발생합니다.
GC에서 사용하는 가비지 수집기는 재활용을 위해 사용됩니다. 기존의 가비지 수집기는 단일 스레드 수집기, 다중 스레드 수집기, 동시 수집기의 세 가지 범주로 나뉩니다. 수집 장치.
단일 스레드 수집기의 조합은 다음과 같습니다. 직렬/직렬 기존 수집기. 수집 스레드를 사용하여 수집 작업을 완료할 뿐만 아니라 수집 스레드가 작동하는 동안 사용자 스레드는 수집이 완료될 때까지 기다리는 것을 중지해야 합니다. 그림은 직렬/직렬 이전 수집기의 개략도를 보여줍니다.
클라이언트의 메모리 리소스가 제한되어 있거나 프로세서 코어 수가 적거나 단일 코어 프로세서인 경우 단순성과 효율성으로 인해 수집기가 작업을 최대한 빨리 완료할 수 있습니다.
다중 스레드 수집기에는 ParNew, Parallel Scavenge 및 Parallel Old가 포함되며, 그중 Parallel Scavenge/Parallel Old는 결합된 수집기입니다. 이러한 다중 스레드 수집기는 가비지 수집 스레드만 추가하며 사용자 스레드는 여전히 가비지 수집 대기를 중지합니다.
parNew 컬렉터: 실제로는 Serial의 멀티스레드 버전입니다. 현재 Serial 컬렉터 및 CMS 컬렉터와 협력할 수 있습니다.
병렬 스캐빈지 수집기: 일반적으로 병렬 이전 수집기와 함께 사용됩니다.parNew 컬렉터와 비교하면 다음에 더 많은 관심을 기울입니다.吞吐量
제어, 처리량은사용자 스레드 실행 시간은 총 CPU 실행 시간을 나타냅니다., 처리량은 물론 클수록 좋습니다.
멀티스레딩은 일반적으로 서버를 사용합니다. 왜냐하면 멀티스레딩을 실행하려면 타임 슬라이스 회전의 소비 시간이 필요하기 때문입니다. 단일 프로세서인 경우 처리 효율성은 의심할 여지 없이 느려집니다. 하지만 리소스 측면에서는 매우 좋으며, 사용자와 상호 작용할 필요가 없는 서버 측 분석 계산을 통해 실행 효율성을 높일 수 있습니다.
동시 수집기에는 다음이 포함됩니다. 시스템 일시 중지 시간을 최대한 짧게 유지하고 더 나은 사용자 경험을 제공하는 것을 목표로 하는 수집기인 CMS 수집기. 해당 컬렉션 스레드는 사용자 스레드와 동시에 실행될 수 있습니다. CMS에는 세 가지가 있습니다.标记
(초기표시, 동시표시, 비고) 및 1회清理
(동시 정리) 세 가지 표시 중 두 개는 더 짧은 사용자 스레드를 중지해야 하고, 하나는 사용자 스레드와 동시에 수행되는 더 긴 표시, 사용자 스레드와 동시에 수행되는 지우기는 필요합니다.
초기 표시: GC Roots와 연관된 첫 번째 객체를 표시합니다. 시간이 매우 짧습니다. 동시 마킹: GC Roots(도달성 분석 알고리즘)의 참조 체인을 사용자 스레드와 동시에 실행하므로 시간이 오래 걸립니다. 라벨을 다시 붙이다 : 동시 마킹 단계에서 사용자 스레드에 의해 생성된 새로운 참조 체인을 다시 검색합니다. 초기 표시보다 조금 더 깁니다.동시 클리어:사용标记-清除算法
쓸모없는 물건을 치우십시오.
세 가지 주요 단점: 1: CPU 민감도, 동시성은 코어 수가 적은 프로세서의 사용자 스레드 작동에 영향을 미칠 수 있습니다. 2: 부동 쓰레기: 동시 정리 단계에서 생성된 쓰레기는 다음 GC 수집만 기다릴 수 있습니다. 세 번째: 메모리 조각화, 마킹 청소 푸자 제품은 불연속적인 메모리 공간이 많습니다.
이 기사는 다음에서 시작됩니다.那些内存需要回收
,什么时候回收
,如何回收
구현으로는 두 가지 객체 생존 판단 알고리즘, 클래스 영역 재활용 조건, 재활용의 생성 메커니즘 및 수집 시기, 세 가지 수집 알고리즘 및 일반적으로 사용되는 가비지 수집기를 작성했습니다.