JVM Internal 1 성능 최적화

4499 단어 intern

1: 큰 대상은old구역에 직접 들어갈 수 있는데, 얼마나 큰 대상입니까?eeden구역보다 큰 남은 공간의 대상은old구역으로 직접 들어갑니다.
-Xms20M -Xmx20M -Xmn10M -XX:SurvivorRatio=8  
eden구역 8M, from과 to 각 1M,old구역 10M, 총 20M의 공간매개변수-XX:PretenureSizeThreshold=3145728을 사용하여 제어합니다.
참고: Pretenure Size Threshold 매개 변수는 Serial과ParNew 두 컬렉터에만 유효하며, Parallel Scavenge 컬렉터는 이 매개 변수를 인식하지 않습니다. Parallel Scavenge 컬렉터는 일반적으로 설정할 필요가 없습니다.이 매개변수를 사용해야 하는 경우 ParNew 및 CMS 컬렉터 조합을 고려할 수 있습니다.
2: 성능 최적화에 주의해야 할 사항:
 
Finalizers: don;t do it!gc cicle 2개가 필요합니다. gc 순환이 느려질까요?대상을 소각할 때 가장 좋은 방법은
자원을 방출합니다. 만약 안 된다면soft reference를 사용하십시오. 가장 좋은 것은 사용하지 않는 것입니다.그렇지 않으면 더 많은 쓰레기 수집이 중단될 것이다.
 
class ClassWithFinalizer{
    protected void finalize(){}
}

class MyClass extends ClassWithFinalizer
{
      private byte[] buffer  = new byte[2014*1024*5];
}

가장 잘 쓰다
Class MyClass {
   private ClassWithFinalizer classWithFinalizer;
   private byte[] buffer  = new byte[1024*1024*5]
}

여기에 여러 가지 성능 최적화 사례가 있는데 모두 Finalizer 방법의 부적절한 사용으로 인해 심각한 성능 문제가 발생한 것이다.
 
내부 클래스 사용 질문, inner class have a implicit reference to the outer class
대상의 생명주기가 늘어나고 쓰레기 회수 시간이 늦어진다??
 
2: Jvm의 메모리 사용
jvm는 세대별 메모리 관리를 사용합니다.
Young Generation --gc가 비교적 빈번하고 Copy 알고리즘이 있음
+Eden
+From Survivor
+To  Survivor
Old Generation --gc 감소 태그 수집 압축 알고리즘
Permanent Generation, 보관 방법과 상수, 상수가 늦으면 무한대로 커지면 쓰레기 수거를 촉발한다(Full GC).
 
메모리는 모든 프로세스가 공유하기 때문에 새로 분배된 대상은 자물쇠를 채워야 한다. 분배된 대상이 비교적 작으면 라인 자체의 버퍼에 분배(?확인)하고 YoungGenration에 분배되면 Eden구역에 분배하고 Eden구역에 공간이 없으면 gc로 한 번, 살아있는 대상copy를 From과 To의 하나로 분배한다. 공간이 부족하면 gc로 한 번,From 영역이 살아있는 객체 copy를 To 영역으로, 일정 시간 생존한 객체 copy를 Old 영역으로, Eden 영역의 객체 copy를 To 영역으로 순환하면 From과 To 중 하나가 비어 있습니다.
올드 구역도 꽉 차면 풀Gc로 출발합니다.
 
 
32bit의 cPU는 4g 메모리를 자바 프로그램에 사용하는데 그 중 하나는 OS와 C runtime에 의해 사용되고 나머지는userspace이다
 
3: 메모리 영역 제어에 자주 사용되는 매개 변수
 
- Xmx - 최대 Heap 영역, 기본값 1G
-Xms --heap 영역을 초기화할 때의 크기입니다. 기본값은 시스템의 1/64이며 1G를 초과하지 않습니다.현재 남은 메모리 비율이 40% 보다 적으면 (- XX: MinHeap FreeRatio 참조) 시스템은 메모리를 최대치로 확대합니다.보통 -Xmx 및 -Xms는 메모리의 성능 변동을 방지하기 위해 동일한 값으로 설정됩니다.
- XX: PermSize - 메소드의 초기화 값을 설정합니다. 기본값은 시스템의 1/64입니다.
- XX: MinHeapFreeRatio - 최대 40%까지 쌓인 메모리를 확장할 때 Heap 영역의 최소 유휴 값을 설정합니다.
- XX: MaxHeapFreeRatio - Heap 영역의 최대 유휴 값을 설정하여 메모리를 초기 값으로 축소하는 시기를 제어합니다. 대개 70%입니다.
- XX: New Ratio - Heap 영역에서 new와old 세대 크기의 비율을 설정합니다. 값은 바로 젊은 세대 메모리 크기/늙은 세대 메모리 크기입니다.
- XX: SurvivorRatio - Survivor 영역과 Eden 영역의 비율을 설정합니다. 값은 Eden 영역 크기/Survivor 영역 크기입니다.
 
참조:
 

HotSpot VM에서 JNI를 통해 C 함수를 호출하는 Java 프로그램


Java VM 사양

The Law of Leaky Abstractions


by Joel Spolsky
Java InstanceOf의 구체적 구현
http://www.artima.com/insidejvm/ed2/security2.html
OpenJdk 코드 읽기
 
문법 분석
 

bison의 연산자 우선순위 예


가상 머신 수담 (1): 해석기, 트리 해석기, 창고 기반, 레지스터 기반, 잡채


Bson 브로셔
javascript 학습
DLR
https://kenai.com/hg/maxine~maxine/file/213118b238e8/mxmaxine
 Davik Internal

좋은 웹페이지 즐겨찾기