GnuSmalltalkUsersGuide:BaseChapter 122
- ObjectMemory
ObjectMemory
네임스페이스 Smalltalk에 정의됨
슈퍼클래스: Object
범주: 언어-구현
- 나는 가상 머신의 메모리 사용을 조정할 수 있도록 몇 가지 메서드를 제공한다. 또한 나는 가상 머신의 수명 중에 발생 가능한 일부 '이벤트'를 나의 종속자에게 시그널링 할 수 있다.
ObjectMemory는 클래스측과 인스턴스측의 메서드를 모두 갖고 있다. 클래스측 메서드는 메모리 관리자의 매개변수를 조정하는 수단을 제공하는 반면 인스턴스측 메서드는 #current 클래스측 메서드와 함께 사용되어 메모리 관리자의 상태에 대한 통계를 볼 수 있다.
ObjectMemory 클래스: 접근하기
current
VM의 메모리 관리 통계의 스냅샷을 리턴하라.
ObjectMemory 클래스: builtins
abort
스몰토크 환경을 종료하고 core를 덤프하라.
addressOf: anObject
anObject가 참조하는 실제 객체의 어드레스를 리턴한다. 고정 객체만 제외하고 이 어드레스는 다음 쓰레기 수집 때까지만 유효하다; 따라서 오랜 시간 이 메서드가 리턴하는 어드레스를 신뢰하기는 꽤 위험하다.
addressOfOOP: anObject
anObject에 대한 OOP(객체 테이블 슬롯)의 어드레스를 리턴한다. 어드레스는 Integer로, 가상 머신이 중단되어 재시작되는 경우를 제외하면 시간이 지나도 변경되지 않을 것이다 (예: 쓰레기 수집기의 액션에 영향을 받지 않는다).
bigObjectThreshold
작은 객체들 간 참조의 집약성을 제공하길 바라면서 메인 힙(main heap) 외부에서 할당된 객체에 대해 가장 작은 크기를 응답하라.
bigObjectThreshold: bytes
작은 객체들 간 참조의 집약성을 제공하길 바라면서 메인 힙(main heap) 외부에서 할당된 객체에 대해 가장 작은 크기를 설정하라. 바이트는 양의 SmallInteger이어야 한다.
compact
oldspace의 압축을 포함해 완전한(full) 쓰레기 수집을 강요하라.
finishIncrementalGC
점진적 쓰레기 수집에서 단계를 실행하라.
gcMessage
쓰레기 수집이 발생하고 있음을 나타내는 메시지가 stdout에 인쇄되는지를 응답하라.
gcMessage: aBoolean
쓰레기 수집이 발생하고 있음을 나타내는 메시지가 stdout에 인쇄되는지를 설정하라.
globalGarbageCollect
강제로 완전한(full) 쓰레기 수집을 실행하라.
growThresholdPercent
system grows가 사용하는 메모리양의 비율, 즉, 시스템이 더 많은 메모리를 할당하려면 채워져 있어야 하는 메모리양의 비율을 응답하라.
growThresholdPercent: growPercent
system grows가 사용하는 메모리양의 비율, 즉, 시스템이 더 많은 메모리를 할당하려면 채워져 있어야 하는 메모리양의 비율을 설정하라.
growTo: numBytes
system grows가 사용하는 메모리양을 numBytes까지 증가시켜라.
incrementalGCStep
점진적 쓰레기 수집에서 단계를 실행하라.
quit
스몰토크 환경을 중단시켜라. 파일이 닫히고 다른 비슷한 cleanup이 발생하는지 여부는 플랫폼에 따라 달라진다.
quit: exitStatus
스몰토크 환경을 중단시키고 exitStatus 정수를 OS로 전달하라. 파일은 닫히고 다른 비슷한 cleanup이 발생한다.
scavenge
강제로 약한(minor) 쓰레기 수집을 실행하라.
smoothingFactor
가상 머신이 메모리 처리와 관련해 제공한 통계를 스무딩(smooth)하는 데 사용한 인수를 (0과 1사이) 응답하라. 0은 평균을 업데이트하고, 1은 스무딩을 비활성화한다 (통계는 마지막 값을 리턴한다).
smoothingFactor: rate
가상 머신이 메모리 처리와 관련해 제공한 통계를 스무딩하는 데 사용하는 인수를 (0과 1사이) 설정하라. 0은 평균을 업데이트하고, 1은 스무딩을 비활성화한다 (통계는 마지막 값을 리턴한다).
spaceGrowRate
시스템 grows가 사용한 메모리양의 비율을 응답하라.
spaceGrowRate: rate
시스템 grows가 사용한 메모리양의 비율을 설정하라.
ObjectMemory 클래스: 초기화
changed: aSymbol
해당 설명 없음.
initialize
전역변수(globals)를 초기화하라.
ObjectMemory 클래스: 이미지 저장하기
snapshot
시작 시 로딩된 이미지 파일에 스냅샷을 저장하라.
snapshot: aString
이미지를 aString 파일에 저장하라.
ObjectMemory: 접근하기
allocFailures
old-space 할당자가 최소한으로 요청된 크기의 블록을 찾지 못하여 운영체제에게 더 많은 메모리를 요청해야 했던 경우의 횟수를 응답하라.
allocMatches
old-space 할당자가 요청된 크기와 정확히 일치하는 크기의 블록을 발견하였던 횟수를 응답하라.
allocProbes
old-space 할당자가 old-space에 있는 모든 객체를 할당하기 위해 여태까지 검사해야 했던 빈 블록의 수를 응답하라.
allocSplits
old-space 할당자가 요청한 크기와 정확히 같은 크기의 블록을 찾지 못해 커다란 빈 블록을 두 개의 부분으로 나누어야 했던 경우의 횟수를 응답하라.
bytesPerOOP
일반 객체 포인터(사실상 명명된 인스턴스 변수와 같은 필드)가 차지하는 바이트 수를 응답하라.
bytesPerOTE
객체 테이블 엔트리(사실상 SmallInteger만 제외하고 시스템 내에서 모든 객체에 의해 발생하는 오버헤드)가 차지하는 바이트 수를 응답하라.
edenSize
젊은 세대의 '에덴(eden)' 영역 내 바이트 수를 (사실상 two scavenge 사이에 할당된 바이트 수이다) 응답하라.
edenUsedBytes
최근에 젊은 세대의 '에덴' 영역을 채운 바이트 수를 응답하라.
fixedSpaceSize
쓰레기 수집기가 메모리 내에서 이동할 수 없는 객체에 헌신하는 특수 힙 내의 바이트 수를 응답하라.
fixedSpaceUsedBytes
쓰레기 수집기가 메모리 내에서 이동할 수 없는 객체에 헌신하는 특수 힙을 현재 채운 바이트 수를 응답하라.
numCompactions
VM이 시작된 후로 발생한 oldspace 압축 횟수를 응답하라.
numFixedOOPs
쓰레기 수집기가 메모리 내에서 이동할 수 없는 객체의 수를 응답하라.
numFreeOTEs
현재 객체 테이블에 해제시킨 엔트리 수를 응답하라.
numGlobalGCs
VM이 시작된 후로 발생한 전역적 쓰레기 수집의 (전체 힙의 컬렉션) 횟수를 응답하라.
numGrowths
VM이 시작된 후로 oldspace가 증가한 횟수를 응답하라.
numOTEs
현재 객체 테이블에 할당된 엔트리 수를 응답하라.
numOldOOPs
오래된 세대(old generation)에 상주하는 객체 수를 응답하라.
numScavenges
VM이 시작된 후로 발생한 청소(scavenge) 횟수를 응답하라 (어린 세대의 빠른 수집).
numWeakOOPs
쓰레기 수집기가 현재 추적 중인 약한 객체의 수를 응답하라.
oldSpaceSize
오래된 세대 내의 바이트 수를 응답하라.
oldSpaceUsedBytes
현재 오래된 세대를 채우는 바이트 수를 응답하라.
reclaimedBytesPerGlobalGC
전역적 쓰레기 수집 도중에 쓰레기로 밝혀진 평균 바이트 수를 응답하라.
reclaimedBytesPerScavenge
청소(scavenge) 도중에 쓰레기로 밝혀진 평균 바이트 수를 응답하라.
reclaimedPercentPerScavenge
청소(scavenge) 도중에 쓰레기로 밝혀진 할당된 바이트의 평균 비율을 응답하라. 숫자가 60-70 미만인 경우 에덴의 크기를 증가시켜야 함이 분명한데, 청소(scavenging)가 실행 시간의 상당 부분을 잡아 먹을 위험이 있기 때문이며, 재시작된 이미지를 측정하여 클래스나 메서드와 같은 수명 긴 객체들의 생성 시 추가로 발생하는 tenuring이 고려되지 않도록 한다.
survSpaceSize
어린 세대의 '생존자(survivor)' 영역 내의 바이트 수를 응답하라 (해당 영역은 어린 객체들이 청소 도중에 이동되는 영역이다).
survSpaceUsedBytes
현재 어린 세대의 '생존자' 영역을 채우는 바이트 수를 응답하라.
tenuredBytesPerScavenge
청소(scavenge) 중에 oldspace로 향상된 평균 바이트 수를 응답하라.
timeBetweenGlobalGCs
두 번의 전역적 쓰레기 수집 간에 평균 시간을 밀리초로 응답하라.
timeBetweenGrowths
힙의 증가 결정 간 평균 시간을 밀리초로 응답하라.
timeBetweenScavenges
두 번의 청소(scavenge) 간에 평균 시간을 초로 응답하라 (어린 세대의 빠른 수집).
timeToCollect
전역적 쓰레기 수집에 소요되는 평균 시간을 밀리초로 응답하라.
timeToCompact
힙의 압축에 소요되는 평균 시간을 밀리초로 응답하라. 힙을 증가시켜 취하는 시간과 같다.
timeToScavenge
청소(scavenge)에 소요되는 평균 시간을 밀리초로 응답하라 (어린 세대의 빠른 수집).
ObjectMemory: builtins
update
객체 내 값을 VM의 현재 상태로 업데이트하라.
ObjectMemory: 도출된 정보
scavengesBeforeTenuring
객체가 oldspace로 이동하기 전에 평균적으로 생존해야만 하는 청소(scavenge) 횟수를 응답하라; 이는 추정치에 불과한데, oldspace로부터 접근 가능한 객체는 곧 tenured될 가능성이 높은 반면 thisContext로부터만 접근 가능한 객체는 tenured될 가능성이 낮기 때문이다. 어쨌든 이 수치가 2-3 미만으로 떨어지면 에덴의 크기와/또는 생존 공간의 크기를 증가시켜야 함이 분명한데, 너무 자주 tenuring하기 때문이기도 하고 당신의 힙을 깨끗하게 유지하기 위해 전역적 쓰레기 수집에 너무 의존하기 때문이기도 하다; 재시작된 이미지를 측정하여 클래스나 메서드와 같은 수명 긴 객체들의 생성 시 추가로 발생하는 tenuring이 고려되지 않도록 한다.