[이 문서는 최초의 기술 블로그 자바 나타났다 코드에를 ] : jdkcb.com/
서문 :
우리는 객체가 죽은 것으로 판단되며, 언급 한 자바 가비지 컬렉션 국은 개발의 년을 경험하는 방법을 말을 말 넌센스의 고갈에 대한 기사는 발명 자바 경험 죽은 악기 하나 스트로크에서 일반 자바 객체를 해결, 및 피해자 상당한 회복 어려운 문제, 검사가 만장일치로 칭찬 된 자바 가상 머신 일반 관리의 모든 지도자. 에헴는 점 옆에, 물론, 오직이 하나 개의 유물이 충분히 자바 가비지 컬렉션 국은 연간 최우수 기관 상, 더 쉽게 가비지 수집을 수행하는 JVM 순서는,도 7 자바 쓰레기까지를 발명 한 원되지 않고있다 총칭되는 회수 장치 :
쓰레기 재활용 목표 기기! (꿈 사운드)
에서 " 쓰레기, 핵심 기술의 마스터 믿음을"쓰레기 재활용 대상 장치는 또한 알고리즘의 네 가지 원칙에 의해 구동되고, 그들이 있습니다 :
마크 - 청소 알고리즘, 복제 알고리즘, 정렬 알고리즘 마크, 세대 수집 알고리즘입니다.
기본 개념 :
생존 시간에 의해 개척 자바 세대 가비지 컬렉션 알고리즘 Java 힙은 두 영역, 물체, 스토어 오브젝트를 사용하는 이전 세대의 하나를 저장하는 새로운 세대들로 분할된다.
새로운 세대 : 더 이해하기 쉬운의 새로운 세대, 내가 특별히 동요를 (재미)로 구성 :
신생대 신생대
작은 물체를 빨리 죽을
그것은 당신이 유독.
이전 세대 : 오랜 시간 객체를 사는 사람들, 특히.
마크 - 스윕 알고리즘 (마크 스윕) :
마크 - 스윕 알고리즘, 모든 가비지 컬렉션 알고리즘이 가장 기본적인 하나, 알고리즘의 앞에 수집은 다른 쓰레기의 형제입니다. 파도는이 알고리즘을 다시 표시 해변 웁니다 파도 전에 기선을 제압 당했지만, 개발의 법으로 우리의 대부분, 알고리즘 뒤에 많은이 마크를 기반으로 - 청소 알고리즘 개선 온다.
마크 - 스윕 알고리즘은 특정 재활용 공정이 같다 (당신이 넣어 Tuoliaokuzi하지 않는 ..) 첫 번째 마크이며, 다음 알고리즘을 삭제 :
- 모든 객체를 복구 할 필요가 마킹
- 완료 표시 한 후 이러한 개체는 균일 한 재활용 표시됩니다
그는하지 않았다, 그렇지 않으면 쉽게 사용할 수 있습니다.
그러나 동시에 단순한는 주로 두 가지 점에 초점을 맞추고 추가 문제를 많이 가져 달성 :
- 당신이 개체를 찾을 수있다 그들 장을 포함주고, 다음 하나씩 취소하기 때문에 먼저, 첫 번째는이 두 과정의 효율성 자체 명확한 표시를 신속하게 확실하게, 냄비의 측면 너무 높지되지이다.
- 재활용해야하는 메모리 개체가 너무 옆 복구를 기다리는 서로 줄 지어 있지만, 메모리 흩어져 있지 않기 때문에 두 번째 문제는, 공간의 사용이다, 자바 가상 머신이 명확한 경우이어야합니다 객체가 전체에 흩어져 있기 때문에 어린이의 실행에 아이는, 다음, 복구에 가서, 그래서 우리는 회복이 작은 메모리가 메모리의 비트가 비어, 비어 볼 가능성이 완료, 등등 갈 것입니다 메모리에 메모리의 작은 덩어리를하는 선도, 상대적으로 큰 객체가 메모리를 할당해야하는 경우, 시스템은 연속 메모리와 같은 대형 블록을 찾을 수 없습니다, 아 매우 불안 시스템을 찾을 수 있습니다, 그래서 그는 전진했다 없습니다 또한 가비지 수집 루틴을 실행할 수 있습니다.
이 덴버 (리우 왕 슈) 갱스터에서 그리기, 아마 긴 방법입니다 그림 :
이러한 바인딩 텍스트 보면 더 이해하기 쉽지 않다.
복제 알고리즘 (복사) :
마크 - 알고리즘을 제거한 후, 처녀 자리는 참을 수있다.
처녀 자리 : 당신은 어떤 물건, 메모리의 완전한 회복이 엉망 복구를 보면, 오, 어머니는 나는 그것이 단정 할 수없는, 깔끔한 얼마나 좋은 사람을 법을 보지 못했다.
따라서 복제 알고리즘은 존재에왔다. (순전히 넌센스, 심각하게 고려하지 않음)
이 알고리즘은 메모리 용량에 따라 두 개의 동일한 크기의 하나가 떨어지기있는 메모리가 여전히 넣어 그것은, 내가 하나를 사용할 때마다, 유지하기 위해 다른 하나는, 살아으로 나누어 져 있습니다,하지 사본은 다른 조각 최대 객체, 다음이 한 번 그녀의 직접, 삭제 사용 간단하고 원유, 효율적인 운영을 가 메모리 복구 시간의 전체 덩어리, 그래서 존재하지 않는 메모리 조각화의 문제가 무엇 때문에,하지만 여유가 없다 점심 식사, 일정한 가격을 지불도 할, 즉, I 메모리 100M가 있고, 지금은 단지 50M 번 사용합니다.
당신은 뜨거운 스트립의 전체 팩을 가지고 있지만 한 번만 당신이 절반 가방을 먹는 나쁜 생각 할 것입니다.
복제 알고리즘이 주요 재활용의 새로운 세대에 대한 목표, 그리고 왜 일반적으로? 때문에 새로운 세대, 빨리 죽어 .
일반적으로 우리는 분, 핫스팟 가상 머신보다 더 적은을 따르지 않도록 객체의 새로운 세대가 멀리 신속하게 복구 할 것이기 때문에, 메모리는 세 가지로 나누어, 하나는 (에덴 동산) 비교적 큰 에덴이며, 상대적으로이 복구해야 할 때 작은 생존자 (생존자) 공간, 에덴과 생존자 각각은,이 두 개의 메모리 살아 객체는 단지 청소, 한 시간에 다른 생존자에 복사 한 후 직접 에덴를 사용 유족 공간. 핫스팟 가상 머신, 8 에덴 서바이버 디폴트 비율 : 이상 가상 머신 파라미터를 수정하여 1 (사람이 좋아 카운트) 내 세심한 스토밍 같은 컴퓨팅 후 에덴 생존자의 비율을 수정 핫스팟 가상 머신에서 10 %의 메모리 소모율의 새로운 세대의 비율이 복제 알고리즘 상술 실제로 훨씬 낮은 50 퍼센트.
당신은 생존자 작은 공간, 라이브 객체가 하나의 생존자에 복사 된 두 개의 메모리를 말을하지 않습니다 잠깐, 생존자 Zenong 경우에 적합. 지금 난처한 상황에 빠진, 난 당신이 어떻게 참조하십시오.
나는, 나는 그것을받을 수 없어하지 않았다 생존자 공간이 충분하지 않을 때 이러한 개체는 보증 메커니즘을 할당하여 이전 해에 직접 갈 것입니다, JVM은 할당 보장의 개념을 도입. 재생하는 방법을 특정 배포 보장에 관해서는, 당신은 내가 상처 손을 입력합니다, 관련 정보가 하를 볼에 액세스 할 수 있습니다 (힘을 강제로 낮은 목소리로, 당신은 잘 명확한 이해, 야유가 없다).
복제 알고리즘의 성능을 너무 귀엽다 때문에, 왜 그것의 오래된 지역을 재활용 할 수 없습니다?
당신이 생각하는, 오래된 무엇을, 자바 가상 머신 장수 마을은, 보통 일반적으로는 복사 알고리즘 모습을 제시, 죽지 않는
니마는 아직 살아있다
그리고 과거에 오래된 객체의 복사본을 생활의 많은 상황은 말할 것도없고 노 죽은 극한의 상황에서도입니다.
다음과 같은 예, 복사 알고리즘은 다음과 같습니다
마크 - 정렬 알고리즘 (마크 컴팩트) :
정렬 알고리즘, 내가 ** 알고리즘 "형제 ** Kaokao의 가장자리에있다"로했다 - 옛날 방식에 대한 마십시오의 아무것도, 제목은 그 마크, 그것은 반드시이 서면 없습니다.
정렬 알고리즘 사실 마크에서 - -, 아 마크를 복사 - 청소 알고리즘 원리와 유사하지만 직접 메모리 통합에 있지만,하자 마크 - 호출되지 마커 때문에 왜, 정렬 알고리즘, 특히 적합 살입니다 형제 가장자리에 있습니다 Kaokao 의 오래된 현존하는 객체를하자 그의 동생 옆이 후 측면 등으로하는 이동 바로 바로 멀리 지워 메모리의 나머지 함께 이동됩니다.
세대 수집 알고리즘 :
사실 그 부분의 앞에 새로운 것을 세대 알고리즘 아무것도,이 알고리즘의 기본 개념은, 세대 수집 알고리즘은 다른 새로운 세대에 개체의 생존 목표의 기간과 세대 수집 알고리즘 혜택의 이전 이가지에 따른 정렬 알고리즘, 또는 마크 - - 우리는 새로운 세대와 같은 다른 개체에 따라 다른 가비지 컬렉션 알고리즘을 사용할 수 있도록, 빠르고, (다시) 다이 올바른 약을 달성 알고리즘 사본, 난 그냥 구세대 마크를 사용하는 것입니다 지우기 알고리즘은 회복.
더 이상
이건 정말 차트 않았다
요약 :
이 문서에서 우리는 우리의 가비지 컬렉션 알고리즘 네 리틀 드래곤즈, 또한 사람들이 자신의 이해를 심화하기 위해 같은 매운 스트립으로 예를 인용 말할 더 조심. 가비지 컬렉션 알고리즘의 네 가지 장점과 단점, 따라서 7 일반적으로 사용되는 가비지 컬렉터 기사에 가비지 컬렉터를 파생의 늦게 다시 업데이트 할 수 있습니다.
당신은 멀티 포인트 업데이트를 할 수 있습니까?
더 상관 없어, 당신은 아 날 따라와.
나는 당신에 대해 걱정
좋은
나는 한, 우리는 다음 기사 안녕의 수입니다.