728x90
. JVM에서의 공간

 

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() 메소드를 호출하게 되는데 이 때 프로그래머는 그 메소드 내에서 자원해제라던지


    적절한 일을 수행하도록 해주면 된다.

 

728x90

'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

+ Recent posts