본문 바로가기
Java

Java

by sgyeong 2025. 8. 28.

Java

객체 지향 프로그래밍(OOP)을 기반으로 한 고급 프로그래밍 언어

 

 

Java의 특징

1. Java 프로그램은 바이트코드로 컴파일되며, JVM을 통해 실행된다.

Java로 작성된 프로그램은 특정 운영체제에 구애받지 않고, Java Virtual Machine(JVM)만 있으면 어디서든 실행 가능하다.

 

2. 객체 지향 언어 (Object-Oriented Programming)

Java는 객체 지향 언어로, 모든 것이 객체로 구성된다. 객체 지향적 특징에는 상속, 다형성, 캡슐화, 추상화가 포함된다. 이를 통해 코드 재사용과 유지보수를 용이하게 만든다.

 

3. 자동 메모리 관리 (Garbage Collection)

Java는 메모리 관리와 관련해 Garbage Collector 를 내장하고 있다. 이를 통해 더 이상 사용되지 않는 객체들을 자동으로 메모리에서 해제해 주어 개발자가 메모리 관리를 직접 할 필요가 없다.

 

4. 멀티스레딩 (Multithreading)

Java는 멀티스레딩을 지원하여, 동시에 여러 작업을 효율적으로 처리할 수 있다. 이 기능은 동시성 프로그래밍을 손쉽게 구현할 수 있게 해준다.

 

Java의 주요 구성 요소

  • JDK (Java Development Kit)
  • Java 프로그램을 개발할 수 있는 도구 모음이다. JDK에는 Java 컴파일러(javac), Java 인터프리터(java), 그리고 여러 가지 유용한 개발 도구들이 포함되어 있다.
  • JVM (Java Virtual Machine)
  • Java 바이트코드를 실행하는 가상 머신이다. JVM은 운영체제에 종속되지 않으며, 바이트코드를 해석하고 실행한다.
  • JRE (Java Runtime Environment)
  • Java 프로그램을 실행할 수 있는 환경을 제공한다. JRE에는 JVM과 Java 표준 라이브러리가 포함되어 있다. JDK는 개발용이고, JRE는 실행 환경용이다.
  • Java API
  • 다양한 클래스와 메서드를 제공하는 표준 라이브러리이다. 예를 들어, java.util 패키지에는 리스트, 맵, 세트 등의 컬렉션 클래스를 제공하고, java.io 패키지에는 파일 입출력 관련 클래스들이 있다.

 

Java 메모리 영역

자바 메모리 구조는 크게 메서드 영역, 힙 영역, 스택 영역, PC 레지스터, 네이티브 메모리 등으로 나눠진다. 각 영역은 자바 프로그램의 실행과 관련된 데이터를 저장하고 관리하는 데 중요한 역할을 한다.

 

1. 메서드 영역 (Method Area)

  • 설명: JVM에서 로드된 클래스와 관련된 정보를 저장하는 메모리 영역이다. 클래스의 메타데이터, 필드, 메서드, 인터페이스 정보, static 변수 등을 저장한다. JVM은 메서드 영역을 하나만 사용하며, 모든 스레드가 공유한다.
  • 저장되는 것: 클래스 정보, 상수 풀, 전역 변수, static 변수, 메서드 정보 등
  • 할당 시점: JVM이 동작해서 클래스가 로딩될 때 생성
  • 특징:
    • 프로그램 실행 중 클래스가 로드될 때 메서드 영역에 클래스 정보가 저장된다.
    • Method 영역은 프로그램의 시작부터 종료까지 메모리에 남아있다.
    • GC (가비지 컬렉션)가 발생하지 않지만, 클래스 언로딩(Class Unloading)은 가능하다.

2. 힙 영역 (Heap Area)

  • 설명: 객체와 배열이 동적으로 할당되는 메모리 영역이다. 자바에서 생성되는 모든 객체는 힙 영역에 저장된다. 또한, 객체가 더 이상 사용되지 않으면 가비지 컬렉션에 의해 메모리에서 해제된다.
  • 저장되는 것: new 키워드로 생성되는 객체(인스턴스), 배열 등
  • 할당 시점: 런타임 시 할당
  • 특징:
    • 힙 영역은 GC(가비지 컬렉션)에 의해 관리된다.
    • 메모리 할당과 해제가 자유로워서, 동적 메모리 관리가 중요하다.
    • JVM의 힙 크기는 시스템에 따라 설정할 수 있다.

3. 스택 영역 (Stack Area)

  • 설명: 각 스레드마다 독립적으로 할당되는 메모리 영역으로, 메서드 호출 시마다 스택 프레임(Stack Frame)이 생성된다. 각 스택 프레임은 메서드 실행에 필요한 로컬 변수, 매개변수, 리턴 값 등을 저장한다.
  • 저장되는 것: 메서드 호출 시 로컬 변수, 매개변수, 리턴 값 등
  • 할당 시점: 메서드가 호출될 때 할당
  • 특징:
    • 메서드 호출 시 생성되며, 메서드 종료 시 스택에서 제거된다.
    • 스택의 크기는 고정되어 있으며, 너무 많은 메서드 호출이 있을 경우 StackOverflowError가 발생할 수 있다.
    • 메모리 해제가 자동으로 이루어진다.

4. PC 레지스터 (Program Counter Register)

  • 설명: 각 스레드가 실행 중인 현재 명령어의 주소를 저장하는 레지스터이다. 각 스레드는 자신의 PC 레지스터를 갖고 있다.
  • 특징:
    • PC 레지스터는 JVM의 스레드가 실행할 다음 명령어의 위치를 추적하는 데 사용된다.
    • 스레드가 CPU에서 실행되는 동안만 유효하다.

5. 네이티브 메모리 (Native Memory)

  • 설명: 자바 프로그램 외부의 자원을 사용하기 위한 메모리이다. 자바는 기본적으로 JVM이 관리하는 메모리를 사용하지만, 네이티브 라이브러리나 JNI (Java Native Interface)를 사용해 네이티브 코드와 상호작용할 때 네이티브 메모리를 사용할 수 있다.
  • 특징:
    • 네이티브 라이브러리(예: C/C++로 작성된 코드)를 호출하는 경우 사용된다.
    • 자바에서는 기본적으로 네이티브 메모리 관리를 직접하지 않으며, 네이티브 코드에서 관리한다.

 

메모리 영역의 주요 특징

  • 메서드 영역은 정적이며, 클래스 관련 정보를 담고 있어 JVM 전역에서 공유된다.
  • 힙 영역은 동적으로 객체를 할당하고, 가비지 컬렉터에 의해 관리된다.
  • 스택 영역은 각 스레드별 독립적으로 메서드 호출에 관련된 데이터를 저장한다.
  • PC 레지스터는 각 스레드가 현재 실행 중인 명령어 주소를 추적한다.
  • 네이티브 메모리는 자바 외부의 네이티브 코드와의 연동을 위해 사용된다.

 

 

 

 

참고

 

https://hlog.tistory.com/1

 

[Java] 프로그램이란, Java의 기초 개념

프로그램 Program 이란 무엇인가? 프로그램은 컴퓨터를 위한 작업 지시서로서 구체적으로 컴퓨터가 특정한 작업을 하기 위한 명령어들의 리스트이다. 명령어(instruction) CPU가 수행하는 기초적인 연

hlog.tistory.com

 

https://re-build.tistory.com/2

 

[Java] 메모리 구조

첫 포스팅 입니다. 언제나 처음은 두근두근 거리네요.저 스스로의 발전과 자그마한 지식의 공유를 위해 시작했는데요,처음 시작하시는 분들께 조금이라도 도움이 되셨으면 좋겠습니다.저 또한

re-build.tistory.com

 

'Java' 카테고리의 다른 글

[Java] 인터페이스 (Interface)  (0) 2025.09.10
[Java] JVM (Java Virtual Machine)  (0) 2025.09.09
[Java] Lombok  (0) 2024.10.28
[Java] 논리연산자  (0) 2024.10.28
[Java] JDK 버전 여러 개 설치, 전환하여 사용하기  (0) 2024.05.14