참조 변수, 메모리 간단 정리

    기본 타입과 참조 타입


    변수는 기본 타입(Primitive)을 저장하는 변수와 참조(Reference) 타입을 저장하는 변수가 있다. 기본 타입 변수는 값을 실제로 변수에 바로 저장하는 방식이다. 기본 타입 변수에 들어갈 수 있는 값은 정수, 실수 등이 있다. 반면에 참조 타입 변수는 변수에 값을 저장하는 것이 아닌 객체의 주소값을 저장한다.

    참조 타입 관련 더 알아보자


    먼저 우리가 사용하는 String은 Primitive Type이 아닌 객체 타입이다. String은 실제로 Heap 메모리 영역에 객체를 하나 생성하고, 그 객체에 우리가 넣은 값을 넣어주는 형태로 동작한다고 한다. 

    이를 참고해서 다시 한번 참조변수에서 대해서 알아본다면, 참조변수에서 '=='을 사용하면, 그 의미는 같은 주소를 가리키고 있는지를 확인하는 것이다. 예를 들어 String b, String c가 있다면 b와 c가 가리키는 주소가 @abc로 동일한지를 보는 것이다. 

     

    메모리 영역은?


    메모리 영역은 크게 Method Memory, Heap Memory, Stack Memory로 나누어진다.

    Method Memory

    JVM이 시작될 때 클래스 로더가 각 클래스를 읽고 Static 변수, Constant, Method Code, Constructor Code를 읽은 후 저장해준다. 

    Heap Memory

    객체와 배열이 생성되면 Heap Memory 영역에 사용된다. Heap Memory 영역에 생성된 객체, 배열은 참조 변수가 Heap Memory의 객체 주소를 가리키도록 하며 참조된다. 참조가 완료되면, GBC(Garbage Collector)가 사용하지 않는 객체와 배열을 제거한다.

    Stack Memory

    Stack Memory는 메서드가 호출될 때 마다 프레임이 하나씩 추가되고, 호출이 완료되면 프레임이 제거된다. 이 때 로컬변수 같은 것들이 추가되면서 사용된다.

     

    Heap Memory에서 객체 삭제


    Heap Memory에 있는 객체는 사용이 완료되면 삭제 된다. 특정 객체를 참조하고 있던 참조 변수의 참조값을 null로 바꾸게 되면, 특정 객체는 사용이 종료된 것으로 인식한다. 이 때 Java의 Garbage Collector가 사용이 완료된 객체를 제거한다.

    '프로그래밍 언어 > JAVA' 카테고리의 다른 글

    Java : 사용자 정의 어노테이션 만들기  (0) 2022.02.24
    람다식  (0) 2022.02.24
    Java 예외처리  (0) 2021.10.25
    Java의 기본 정보  (0) 2021.10.23
    Java의 함수 선언  (0) 2021.10.23

    댓글

    Designed by JB FACTORY