본문 바로가기

Backend/파본것들

static 이란, 쓰는 이유

JAVA에서의 메모리 공간

Static Area

Java 파일은 field, constructor, method로 구분되는데, field에서 선언된 전역변수, static 변수[정적변수]를 static 영역에 저장한다. 그리고 Garbage Collector의 관리 영역 밖에 존재하므로 프로그램의 종료시까지 메모리가 할당된 채로 존재하므로 자주 사용하게 되면 시스템의 퍼포먼스에 악영향을 주게 된다.

 

Stack Area

method 내에서 정의하는 기본 자료형에 해당하는 지역변수의 데이터 값이 저장되는 공간으로 해당 메소드가 호출될 때, 메모리에 할당되고 종료되면 메모리가 해제된다.

이 영역은 LIFO의 구조를 갖고 새로운 데이터가 할당되면 이전 데이터는 지워진다.

 

Heap Area

Reference Type[참조타입]의 데이터 타입을 갖는 객체(인스턴스), 배열 등은 Heap 영역에 저장된다. 

Stack 영역의 공간에서 실제 데이터가 저장된 Heap 영역의 참조값을 new 연산자를 통해 리턴받는다. 다시 말하면 실제 데이터를 가지고 있는 Heap 영역의 참조 값을 Stack 영역에서 가지고 있다. 이렇게 리턴 받은 참조 값을 갖고 있는 객체를 통해서만 해당 인스턴스를 핸들 할 수 있다.

class A{}

public class HeapArea {
	public class static void main(String[] args) {
    	A a = null; // A타입의 a객체 선언 및 stack 영역 공간 할당
        System.out.println(a); // null
        
        a = new A();
        System.out.println(a); // @15db9742
    }
}

위에서 a = new A() 의 경우, Heap 메모리에 공간 할당 및 객체(a)에 참조값을 할당한 것이다.

 

참고로 Heap에 저장된 데이터가 더 이상 사용이 불필요하다면 메모리 관리를 위해 JVM의 Garbage Collector에 의해 알아서 해제된다.

 

 

참고한 블로그

https://m.blog.naver.com/heartflow89/220954420688

 

[JAVA/자바] 메모리 구조(static, stack, heap)

 이번 글은 자바(JAVA)를 사용하는 입장에서 알아야 할 메모리 구조 및 특징에 대해서 알아...

blog.naver.com

https://mi-nya.tistory.com/251

 

[java/자바] Static 이란? Static 정리

이글은 "망나니개발자"님의 글을 참고하였습니다. Static Java에서 Static 키워드를 사용한다는 것은 메모리에 한번 할당되어 프로그램이 종료될 때 해제되는 것을 의미합니다. 이를 정확히 이해하

mi-nya.tistory.com

 

'Backend > 파본것들' 카테고리의 다른 글

[nestjs] Module이란, 순환 참조 오류  (0) 2023.02.14
[nestjs] Authentication, bcrypt  (0) 2023.02.14
const와 readonly의 차이  (0) 2023.01.28