1. Static Area (스태틱 메모리 영역 = Method Area)

흔히 스태틱(Static) 이라고 부르는 이 메모리 영역은 글자 뜻 그대로 ‘정적 메모리’라는 뜻을 가지고 있다. 

이는 컴파일 시간 동안 할당 된 메모리이며 고정된 공간을 차지하고 런타임 중에 변경할 수 없는 특징을 가지고 있다. 

정적 메모리를 잘 사용할 경우 (Singleton 등) 메모리 사용에 있어 이점을 볼 수 있다. 

단, 잘못 사용할 경우 정적 메모리는 공유되는 자원으로써 멀티 쓰레드 환경에서 치명적인 버그를 불러올 수 있기에 주의가 필요하다.

2. Stack Area (스택 메모리 영역)

스택(Stack) 이라고 부르는 메모리 영역은 글자 뜻 처럼 위에서 아래로 쌓아가는 방식으로 작동하는 메모리이다. LIFO(Last In First Out) 방식을 취하고 있다. LIFO는 가장 처음에 들어간 것이 먼저 나간다는 뜻이다. 

Stack 메모리에 데이터를 넣는 행위를 Push라 하며 데이터를 내보내는 행위를 Pop이라 한다. 

기본 자료형 int, long, boolean 등 의 지역변수와 매개변수의 데이터값이 저장되며 추가적으로 객체 생성 시 참조 주소값도 저장된다.

3. Heap Area (힙 메모리 영역)

참조형 데이터 타입을 갖는 객체, 배열 등의 데이터가 저장되는 메모리 영역이다. (new 연산자를 통해 생성된 객체)

Stack 영역의 공간의 변수(객체, 객체 변수, 참조 변수)는 실제 데이터가 저장된 Heap 영역의 주소 값을 new 연산자를 통해서 반환받는다.

객체의 실제 데이터는 Heap 영역에 올라간다.

즉, Heap 은 참조형 데이터 객체의 실제 데이터들이 담기는 공간이고, Static 영역의 객체는 Heap 영역의 참조 값이 갖게 된다.

 

'Java' 카테고리의 다른 글

[JAVA] 자바의 특징  (0) 2022.11.20
자바란?

 

자바는 C언어에 객체 지향적 기능을 추가하여 만든 C++과 달리, 처음부터 객체 지향 언어로 개발된 프로그래밍 언어이다.
자바는 자바 가상 머신(JVM: Java Virtual Machine)을 사용하여 운영체제와 독립적으로 동작할 수 있다.
따라서 자바는 어느 운영체제에서나 같은 형태로 실행 될 수 있다.

 

자바의 특징
  • 자바는 객체지향 언어이다.
    • 객체를 만들기 위해서 설계도인 클래스를 작성하고, 객체와 객체를 연결하여 목적에 맞는 프로그램을 만든다.
    • 객체지향 언어의 특징인 캡슐화, 상속성, 다형성을 완벽하게 지원한다.
  • 이식성이 높다
    • 자바 실행환경이 설치되어 있는 모든 운영체제에서 실행 가능하다.
  • 하이브리드 언어이다.
    • 컴파일 언어인 동시에 인터프리터 언어이다.
    • 텍스트 소스를 컴파일하여 이진 파일(class)파일로 만든 다음 자바 런타임이 클래스 파일을 인터프리트 하면서 실행한다.
    • 시스템에 무관한 이진 파일을 만듦으로써 자바는 컴파일 언어에 가까운 속도와 시스템 독립성을 얻을 수 있다.
  • 메모리를 자동으로 관리한다.
    • 개발자가 직접 메모리에 접근할 수 없으면 자바가 직접 메모리를 관리한다.
    • 객체 생성시 자동으로 메모리 영역을 찾아 할당하고, 가비지 콜렉터(Garbage Collector)를 실행시켜 자동으로 사용하지 않는 객체를 제거한다.
    • 개발자는 메모리 관리의 수고를 덜고, 핵심기능 코딩에 집중할 수 있다.
  • 오픈소스 라이브러리가 풍부하다.
    • 자바는 오픈소스 언어이고 자바 프로그램에서 사용하는 라이브러리 또한 오픈소스의 양이 방대하다.
    • 고급 기능을 구현하는 코드를 작성하는 대신 검증된 오픈소스 라이브러리를 사용하면 애플리케이션을 다시 컴파일 할 필요가 없다.
  • 자바는 실행을 위해 자바 가상 머신을 거쳐야하므로, 다른 언어에 비해 실행 속도가 느리다.
  • 자바는 예외 처리가 잘 되어있지만, 개발자가 일일이 처리를 지정해 줘야한다는 불편함이 있다.
  • 자바는 다른 언어에 비해 작성해야 하는 코드의 길이가 긴 편이다.

'Java' 카테고리의 다른 글

[JAVA] 메모리 영역 Static, Heap, Stack  (0) 2022.11.28