Young, Old 영역이 연속적으로 처리되며 하나의 CPU를 사용한다.콜렉션이 수행될 때 어플리케이션 수행이 정지되기 때문에Sun에서는 이 처리를 할 때를 Stop-the-world 라고 표현한다. 절차1. Eden이 꽉 차면 Survivor2로 Eden과 Survivor1의 살아있는 객체가 이동 (너무 크면 Old로 간다.)2. Survivor2가 꽉 차면 Eden과 Survivor1에 남아있는 객체는 Old로 이동3. Old, Perm에 있는 객체는 Mark-sweep-compact 콜렉션 알고리즘에 의해 처리된다. Mark-sweep-compact 콜렉션 알고리즘의 과정1. Old로 이동된 객체 중 살아있는 객체를 식별2. Old의 객체를 훑는 작업을 수행하여 쓰레기 객체를 식별3. 쓰레기 객체를..
▶ Young 영역이 영역은 다시 하나의 Eden 영역과 두 개의 Survivor 영역으로 나뉜다. 메모리에 객체가 생성되면 Eden 영역에 객체가 지정된다.이 수용소(Eden영역)에 데이터가 꽉 차면, 이 영역에 살고있던 가난하고 불쌍한 객체들은 방을 빼거나(옮겨지거나) 죽어야하는데(삭제=GC)이 때 이사가는 곳이 Survivor 영역이다. Survivor 영역은 두 개라고 했었다.하지만 Survivor 영역중 한 곳은 난민수용소로 사용해야하기 때문에 반드시 비어있어야 한다.비어있는 영역에는 Eden 영역에 있던 객체 중 GC태풍이 몰아친 후에 살아남은 난민객체들이 피난가게된다. Eden이 꽉차서 객체들이 쫓겨난 곳을 Survivor1이라 부르고, 난민수용소(비어있는곳)를 Survivor2라고 부르겠다..
▶ PC레지스터자바의 스레드들은 각각 Program Counter 레지스터를 갖는다.네이티브 코드를 제외한 모든 자바 코드들이 수행될 때 JVM의 인스트럭션 주소를 이곳에 보관한다. ▶ JVM 스택스레드가 시작될 때 생성된다. 이 곳에는 메소드가 호출되는 정보인 Frame이 저장된다.그리고 지역 변수와 임시결과, 메소드 수행과 리턴에 관련된 정보도 이곳에 저장된다. ▶ HeapGC의 대상이 되며 클래스의 인스턴스, 배열이 저장된다.공유메모리라고도 불리우며 여러 스레드에서 공유하는 데이터들이 저장된다. ▶ 메소드이 곳은 모든 JVM 스레드에서 공유한다.이 곳에 저장되는 데이터는 런타임 상수 풀, 메소드 데이터, 생성자 코드가 있다. ▶ 런타임 상수 풀메소드 영역에 포함되는 영역이다.자바의 클래스 파일에는 ..
1. java 명령어의 옵션들을 파싱한다.2. 자바의 힙 크기 할당, JIT 컴파일러 타입을 지정한다. (명령어에 지정하지 않은 경우)3. 환경변수를 지정한다.4. Jar 파일의 menifest 파일에서 Main클래스를 확인한다. (Main 클래스를 지정하지 않은 경우)5. JNI의 표준 API인 JNI_CreateJavaVM을 사용하여 생성한 non-primordial이란 스레드에서 HotSpot VM을 생성한다.6. HotSpot VM이 생성, 초기화 된 후에 main 메소드의 속성정보를 읽는다.7. CallStaticVoidMethod 라는 네이티브 인터페이스를 불러 HotSpot VM에 있는 main메소드를 수행한다.
1. Inlining (인라이닝)호출된 메소드가 단순할 경우 호출된 메소드의 내용을 호출한 메소드의 코드에 포함한다.이러면 성능이 약간 더 빨라진다. 2. Local Optimizations작은 단위의 코드를 분석하고 개선한다. 3. Control Flow Optimization메소드 내의 조건 구문을 최적화하고, 효율성을 위해 코드의 수행경로를 변경한다. 4. Global Optimizations메소드 전체를 최적화한다. 이는 컴파일 시간이 늘어나지만, 큰 성능개선을 할 수 있다. 5. Native Code Generation플래폼 아키텍쳐에 따라 최적화를 다르게 한다.
1. JRockit Runs JIT Compilation자바 어플리케이션을 실행하면 JIT컴파일을 거친 후 실행이 된다.이 단계를 거치면 어플을 시작하는 동안 몇 천개의 새로운 메소드가 수행되고 이 때문에다른 JVM보다 JRockit이 구동시간이 느릴 수 있다. 하지만 시작할 때의 성능은 느리지만 지속적으로 수행할 때에는 더 빨리 처리가 된다. 2. JRockit Monitors ThreadsJRockit은 Sampler Thread 라는 스레드가 존재하며 이 스레드는 주기적으로 프로그램에서어떤 스레드가 동작중인지 여부와 수행내역을 관리한다.이를 통해 많이 사용되는 메소드를 확인해 최적화 대상을 찾는다. 3. JRockit JVM Runs Optimization2번의 Sampler Thread가 식별한 ..
이 기능은 Java5 HotSpot VM에서 추가된 기능이다.JVM이 시작될 때 플랫폼과 시스템 설정을 평가하여자동으로 Garbage Collector와 자바 힙 크기, JIT 컴파일러를 선택한다. 프로그램의 활동과 객체 할당 비율에 따라 Garbage Collector가 동적으로 자바의 힙 크기를 조절하고,New의 Eden과 Survivor, Old 영역의 비율을 자동적으로 조절한다. 이 기능을 제거하려면 -XX::-UseAdaptiveSizePolicy 옵션을 적용하면 된다.
- Total
- Today
- Yesterday
- 컴퓨터 시간
- 메모리
- Jackson
- Clojure
- react
- Docker
- 리액트
- opensource
- RAMDA
- 자바 성능
- 자료구조
- Java8
- 프로세서
- gitlab
- 퍼포먼스
- 날짜
- 알람
- 성능개선
- javascript
- json
- 자바
- 클로저
- Stream
- 시간
- 성능
- rambda
- Java
- 코어
- Swift 2.0
- 람다
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |