1.1 JVM 구조
1.2 코드
public class Test { public static void main(String[] args){ int[] p1 = new int[5]; int[] p2 = new int[3]; int[] p3 = p1;
p3[2] = 100;
System.out.println(p1[2]);
p2 = p1; } } |
1.3 공간모습
*stack: 메소드를 호출할 때마다 메모리가 쌓인다, 처음에 쌓였던 메모리가 가장 늦게 반환된다 => main()이 가장 늦게 반환된다
main메모리 생성 -> p3 변수 메모리 생성 -> p3 변수 메모리 반환 -> main 메모리 반환
(p1, p2는 new로 생성했으므로 stack이 아닌 heap영역 )
2. garbage colection(가비지 컬렉션)이란?
- garbage : 참조하는 변수가 없는 메모리
- garbage collectior: garbage memory를 해제하는 객체(heap 영역을 관리), 자동으로 실행된다.
2.1 garbege는 언제 청소될까?
- idle time(운영체제가 한가한 시간에)
- 메모리가 부족할 때
* garbage가 생겼다고 garbage collection가 즉시 작동하는 것은 아니며, 무조건 작동하는 것은 아니다.
(프로그램이 잠깐 실행되는 경우에는 garbage collection이 작동하지 않는다.)
2.2 garbage를 최소하 하기 위해서는?
- 디자인 패턴에 따라 코드를 짜서 garbage생성을 최소화 하라!
-
Java에서는 참조가 끊긴 객체들은 Garbage Collector가 메모리 해제를 시켜준다.
참조가 끊기는 경우는 나중에 알아보기로 하고...
Garbage Collection을 내가 하고 싶을 때 하게 할 수 없을까?
---------------------------------------------------------------------------------------
답은....
Garbage Collection(이하 GC)을 프로그래머 의지대로 곧장 실행 시키는 것은 불가능하다.
그러나 요청하는 것은 가능하다!
바로 System클래스의 gc() 메소드를 사용하면 된다. System.gc();
GC를 당한 객체는 소멸되기 전 finalize() 메소드를 호출하게 되는데 이 때 프로그래머는 그 메소드 내에서 자원해제라던지
적절한 일을 수행하도록 해주면 된다.
'JAVA' 카테고리의 다른 글
JVM. GARBAGE COLLECTION 모니터링 (0) | 2014.11.28 |
---|---|
JVM GARBAGE COLLECTION (0) | 2014.11.28 |
interface 추상클래스 차이 (0) | 2014.11.27 |
OOP 4가지 특성 (0) | 2014.11.12 |
OOD(객체지향설계) (0) | 2014.11.12 |