"The Garbage Collection HandBook"이라는 책을 읽을 때 9 장 은 "객체 수명은 출생과 출생 사이에 할당 된 힙 공간의 바이트 수로 측정하는 것이 더 낫습니다. 죽음.". 나는이 문장을 이해하지 못한다. 왜 일생은 할당 된 바이트로 측정 할 수 있습니까? 나는 그것에 대해 구글을 시도한다. 그러나 나는 어떤 대답도 얻지 않는다. 누가 나에게 설명 할 수 있습니까? 감사!힙을 측정하는 시간에 객체를 할당하는 방법
답변
인스턴스화와 죽음 사이에 할당 된 바이트로 개체 수명을 측정하면 GC 알고리즘이 프로그램 동작에 적응하기가 더 쉽습니다.
개체 할당 속도가 매우 느리면 간단한 시간 측정으로 인해 모음간에 긴 일시 중지가 발생하여 양호한 것으로 보입니다. 그러나 개체 수명의 바이트 할당 측정 값이 높으면 개체가 생존자 공간 또는 구 세대에 너무 빨리 승격 될 수 있습니다. 바이트 할당을 측정함으로써 콜렉터는 마이너 콜렉션이 발생하기 전에 새 세대를 확장하여 가비지가되는 오브젝트 수를 늘려 힙 크기를보다 효율적으로 최적화 할 수 있습니다. 이 측정 값으로 시간 만 사용하면 힙의 크기가 분명해질 필요가 없습니다.
멀티 스레드 응용 프로그램에서 개별 스레드에 대한 바이트 할당을 측정하기가 어렵 기 때문에 수집기는 개체가 남아있는 컬렉션 수에 대한 수명을 측정하는 경향이 있습니다. 이것은 모니터하는 데 더 간단한 번호이며 기록 할 공간이 적습니다.
"시간"은 이벤트를 주문할 수있는 척도입니다. 현실 세계에서도 가능한 많은 유닛이 있습니다. 컴퓨터 내부에서 쓰레기 수거를 위해 실세계의 시간 단위는 필요하지 않으며 모든 가비지 수집기가 일반적으로 알고 싶어하는 것은 어떤 개체가 다른 개체보다 오래되었는지입니다.
이 목적을 위해서 할당 된 각 객체에 오름차순 번호를 할당하는 것만으로 충분할 수 있지만 이는 추가 카운터를 유지하는 것을 의미합니다. 반대로 할당 된 바이트 수는 무료입니다. 할당 된 바이트 만 누적하고 할당 해제 된 바이트는 절대로 빼는 것이 중요하므로 항상 숫자가 늘어납니다.
개체가 전용 공간에서 연속적으로 할당되므로 세대 별 메모리 관리에서이 번호는 모든 할당시 업데이트 될 필요가 없으므로 해당 주소는이 메모리 영역 내에서 상대적인 보존 기간을 나타내지 만 영역의 시작 부분 마지막 가비지 수집과 관련되어 있습니다. 가비지 컬렉터가 살아남은 객체를 실행하고 이동할 때만 필요한 경우이 정보를 절대적인 시대로 병합해야합니다.
HotSpot JVM과 같은 구현을 통해이 점을 더욱 단순화 할 수 있습니다. 살아남은 객체의 경우, 살아남은 가비지 수집주기의 수를 유지하는 작은 카운터를 유지합니다. 설정 가능한 수의 수집주기에서 살아남은 후에는 구세대로 승격되고 그 시점을 지나면 객체의 나이가 부적절 해집니다.
- 1. JSON 객체를 할당하는 방법
- 2. Gsoap에서 C++ 객체를 할당하는 방법
- 3. 힙을 지우는 방법?
- 4. 다른 객체 안에 객체를 할당하는 방법
- 5. AngularJS2 응답 객체를 클래스 객체에 할당하는 방법
- 6. 오픈 그래프 객체를 사용자에게 할당하는 방법
- 7. 레일에서 인스턴스 변수에 관계 객체를 할당하는 방법
- 8. 더 큰 힙을 Gradle에 할당하는 데 도움이 필요합니다.
- 9. O (logn) 시간에 STL 힙을 사용하여 감소 키를 구현
- 10. 선택 상자에 힙을 표시하는 방법
- 11. 특정 시간에 NSDate 객체를 초기화하십시오.
- 12. 다른 객체를 단일 객체를 가리 키도록 할당하는 방법은 무엇입니까?
- 13. 함수의 작동 시간을 측정하는 방법
- 14. java.lang.OutOfMemoryError : Java 힙을 Java 객체를 Json String으로 변환하려고 할 때
- 15. 개체를 할당하는 C++?
- 16. 이미지 왜곡을 측정하는 방법?
- 17. 인터넷 대역폭을 측정하는 방법
- 18. 화면에서 픽셀을 측정하는 방법
- 19. VirtualizingStackPanel 성능을 측정하는 방법
- 20. 메모리 사용량을 측정하는 방법
- 21. y 길이를 측정하는 방법?
- 22. MQ의 처리량을 측정하는 방법
- 23. Google지도로드 시간을 측정하는 방법
- 24. 오이 단계의 실행 시간을 측정하는 방법
- 25. 그룹에 ID를 할당하는 방법
- 26. C++ 힙을 내려 놓습니다.
- 27. CNN에서 각 레이어의 실행 시간을 측정하는 방법
- 28. 어떤 레지스터가 힙을 가리 킵니까?
- 29. 다른 파일 객체에 기존 파일 객체를 할당하는 방법
- 30. Linq에서 다른 하나의 객체를 할당하는 방법 # 새로 만들지 않고
당신은 "대조적으로 할당 된 바이트 수는 무료입니다."라고 말합니다. 그런 다음, 출생과 사망 사이의 모든 객체에 할당 된 바이트 수를 계산하는 방법은 무엇입니까? 모든 물체에 추가 카운터 또는 다른 방법이 필요합니까? 나는 작은 퍼즐이다. – Huzhenyu
막내 개체가 같은 공간에있는 한 마지막 개체의 끝은 할당 된 바이트 수와 같습니다. 즉, 서로 다른 메모리 공간을 통해 절대 수명을 추적하려는 경우 다음 가비지 수집주기 *에서 해당 메모리 공간의 기본 기간 (마지막 gc 시간)과 병합해야합니다. 이것은 정보를 보유 할 스토리지를 필요로 함을 암시 할 수 있습니다. 그러나 일반적으로 JVM은 객체의 사망까지의 나이를 추적하지 않습니다. JVM은 객체의 죽음을 전혀 감지하지 못합니다. 그들은 생존자들에 대해서만 관심이 있습니다. – Holger