JVM 메모리 관리
1. JVM 메모리 구조
1) young 영역 (Minor GC)
- Eden : 신규 생성된 객체 저장
- Survivor1 : Eden영역의 객체가 Minor GC이후에도 살아있으면 Survivor1로 옮겨진다.
2) old 영역 (Major GC)
- Young영역에서 살아남은 객체가 복사된다. 대부분 Young영역보다 크게 할당하며, 따라서 GC가 적게 발생한다.
2. Garbage Collection
- 참조가 없는 객체를 메모리에서 제거 (minor, major gc)
- 지속해서 사용되는 객체는 promotion하여 저장(old영역)
1) GC대상 (unreachable object)
1. 모든 객체 참조가 null인 경우
2. 객체가 블록 안에서 생성되고 블록이 종료된 경우
2) Minor GC
(1) Eden영억에 minor gc가 일어난다. (Eden영역이 가득 차면)
(2) (1)에서 살아남은 객체는 s1으로 복사된다.
--> s1로 옮기는 때 시간이 걸리기 때문에 살아남은 객체가 5~15%미만이 되도록 해야한다. (객체지향)
(3) s1에서 살아남은 객체는 s2로 옮겨진다. (s2에서 살아 남은 객체는 s1로 이동한다.)
(4) (3)번 과정을 계속 해서 거쳐 일정 수준의 나이?(promotion)이 되면 Old영역으로 옮긴다.
3) Major GC
(1) reference가 끊긴 죽은 객체들을 체크한다.
(2) 체크된 객체를 죽인다.
(3) 죽이면서 객체들의 finalize method (유언)을 수행한다.
(4) 죽은 객체들을 모두 지운 후, 재정렬이 일어난다.
--> 이때 5초이상 걸리기도 한다. (Stop the world)
'JAVA > JAVA' 카테고리의 다른 글
[JVAV] BigInteger 클래스 (0) | 2018.07.09 |
---|---|
[JAVA] 2진수, 8진수, 16진수 (0) | 2018.07.09 |
[JAVA] Modifiers, Contructor (0) | 2017.09.18 |
[JAVA] JAVA 특징 (0) | 2017.09.18 |
[JAVA] String / StringBuffer / StringBuilder (0) | 2017.09.03 |