Java/보충수업

[2024-09-12] 자바 보충수업 1일차

dev.jelee 2024. 9. 12. 21:37

* 수업 내용 외에 추가로 관련 자료를 찾아서 덧붙임

컴퓨터 구조

용어 설명

1. CPU (Central Processing Unit)

  • CPU는 컴퓨터의 두뇌이다.
  • CPU는 메모리에 저장된 명령어를 읽어 들이고 읽어 들인 명령어를 해석하고 실행한다.

2. RAM (Random Access Memory)

  • 램, 메모리, 기억장치 라고도 한다.
  • CPU의 연산 결과를 저장하고 처리할 수 있는 공간이다.
  • 프로그램 실행 시 프로그램들이 메모리에 읽혀져 동작하게 된다.
  • 램은 전원이 꺼지면 내용이 지워지기 때문에 영구적으로 저장해야 하는 데이터는 HDD 장치에 저장한다.

3. HDD (Hard Disk Drive)

  • 하드 디스크라고 하며 영구적으로 데이터를 저장하기 위한 저장 장치이다.
  • 컴퓨터에서 실행하는 프로그램, 데이터 파일, jpg같은 파일의 형태로 된 데이터를 저장하고 관리한다.

4. 프로세스 (Process)

  • 컴퓨터에서 실행 중인 프로그램을 말한다.
  • 프로그램은 하드디스크 등의 저장공간에 저장되어 있는 코드와 리소스 등이 집합되어 있는 파일을 말하고 실행하면 메모리에 올라가서 프로세스로 동작한다.
  • 다시 말해서 실행되는 프로그램들은 전부 프로세스라고 보면 된다.
  • 이것보다 더 작은 실행 단위는 스레드이다. 프로세스마다 최소 스레드 1개는 만들어진다.

5. 스레드 (Threads)

  • 최신 운영체제의 필수요소 중 하나.
  • 프로세스보다도 작은 실행 흐름의 최소 단위이다.
  • 예전에는 프로그램을 실행하는 흐름이 오로지 프로세스뿐이었으나, 소프트웨어가 진보하면서 하나의 프로그램에서 복잡한 동시 작업을 요구하기 시작하였다. 이를 위해서 하나의 프로그램이 여러개의 프로세스를 만들어야 했는데 프로세스 특성상 하나의 프로그램이 이러한 동시 작업을 수월하게 할 수 없었다.
  • 그래서 프로세스보다 더 작은 실행 단위 개념이 만들어지게 되는데 이것이 스레드이다. 하나의 프로세스에서 여러개의 스레드가 메모리를 공유하고 작동할 수 있으며, 그래서 생성과 속도가 빠르고, 적은 메모리를 점유하며, 정보 교환이 쉽고 Context Switching 부하가 적지만 그 대가로 자원 선점과 동기화 문제를 얻게 되었다. 대다수 OS의 스케줄러는 스레드를 최소 단위로 하여 작동한다.

프로세스 4가지 영역

각각의 프로세스마다 독립된 메모리 영역을 할당받는다.

메모리 영역에는 Stack, Heap, Data, Code 4가지의 영역이 있다.

용어 설명

1. Stack 영역

  • 임시 데이터(함수 호출, 로컬 변수 등)이 저장되는 영역
  • 함수가 실행될 때 사용될 데이터를 위해 할당된 공간
  • 매개변수, 지역변수, 함수 종료 후 돌아갈 주소
  • 함수는 호출될 때, 스택 영역에서 위쪽으로 공간 할당된다.
  • 함수가 return하면 할당된 공간 반환

2. Heap 영역

  • 코드에서 동적으로 생성되는 데이터가 저장되는 영역
  • 프로세스가 실행 도중 동적으로 사용할 수 있도록 할당된 공간
  • malloc() 등으로 할당받는 공간은 힙 영역에서 할당
  • 힙 영역에서 아래 번지로 내려가면서 할당

3. Data 영역 (BSS, GVAR)

  • 전역 변수/초기화된 데이터가 저장되는 영역
  • 전역 변수 공간, 정적 데이터 공간(사용자 프로그램과 라이브러리 포함)
  • 프로그램에서 고정적으로 만든 변수 공간(상수 공간)
  • 프로세스 적재 시 할당, 종료 시 소멸

4. Code 영역 (Text)

  • 컴파일된 소스 코드가 저장되는 영역
  • 실행될 프로그램 코드가 저장되어 있는 영역
  • 사용자가 작성한 모든 함수의 코드
  • 사용자가 호출한 라이브러리 함수들의 코드

자바의 메모리 모델

자바의 메모리 모델은 주로 다음 세 가지 주요 영역으로 나뉜다.

  • 힙 영역 (Heap Area)
  • 스택 영역 (Stack Area)
  • 메소드 영역 (Method Area)

1. 힙 영역 (Heap Area)

  • 정의: 자바에서 객체배열이 생성되고 저장되는 메모리 영역입니다.
  • 특징:
    • 동적 메모리 할당: 객체와 배열은 힙에서 동적으로 할당됩니다.
    • Garbage Collection: 힙은 가비지 컬렉션(자동 메모리 관리)에 의해 관리됩니다. 더 이상 참조되지 않는 객체는 가비지 컬렉션에 의해 메모리에서 제거됩니다.
    • 메모리의 크기: 힙의 크기는 JVM의 설정에 따라 조정할 수 있으며, 큰 메모리를 필요로 하는 객체들이 많을 경우 힙의 크기가 중요합니다.
  • 예시:
MyClass obj = new MyClass();  // `obj`는 힙에 저장된 MyClass 객체를 참조합니다.

 

2. 스택 영역 (Stack Area)

  • 정의메소드 호출 시 생성되는 스택 프레임이 저장되는 메모리 영역입니다.
  • 특징:
    • 메소드 호출 및 반환: 각 메소드 호출 시 스택 프레임이 생성되며, 메소드가 반환되면 해당 스택 프레임이 제거됩니다.
    • 로컬 변수: 메소드의 로컬 변수와 매개변수는 스택 프레임에 저장됩니다.
    • 스택 메모리의 크기: 스택 메모리는 각 스레드마다 별도로 할당되며, 스레드의 호출 깊이와 로컬 변수의 수에 따라 크기가 중요합니다.
  • 예시:
public void myMethod() {
    int localVar = 5;  // `localVar`는 스택 프레임에 저장됩니다.
}

 

3. 메소드 영역 (Method Area)

  • 정의: JVM클래스메소드의 메타데이터를 저장하는 영역입니다.
  • 특징:
    • 클래스 정보: 클래스의 구조와 메타데이터, 상수 풀, 메소드와 필드 정보 등이 저장됩니다.
    • 정적 변수: 클래스의 정적 멤버(필드, 메소드)는 메소드 영역에 저장됩니다.
    • 클래스 로딩: 클래스가 메모리에 로드될 때 메소드 영역에 클래스의 정보가 저장됩니다.
  • 예시:
public class MyClass {
    public static final int CONSTANT = 42;  // 상수는 메소드 영역의 상수 풀에 저장됩니다.

코드를 실행 파일로 만드는 과정

코딩 -> 컴파일 -> 링크 -> 아티팩트

우리가 코드를 작성한 다음 컴파일을 통해 컴퓨터 언어로 번역을 한 다음 링크가 각각 할당을 한 다음 파일이나 라이브러리 파일등이 생성된다. 최종 만들어진 결과물을 아티팩트라고 한다.


컴퓨터 기초 설명 때 들은 내용

  • bit는 0, 1 로 되어 있으며 2진수라고 한다. 그리고 전기가 있다 없다의 차이다.
  • bit가 8개면 8bit이고 이를 1byte라고 부른다.
  • 예를 들어 000 111 -> 3개의 bit로 8개의 숫자를 표현할 수 있다. 8진수
  • 000 0 001 1 010 2 011 3 100 4 101 5 110 6 111 7
  • 비트 : 정보를 표현하기 위한 최소 데이터 형태
  • 바이트: 8bit 묶음. 문자를 표현하기 위한 최소 단위
  • 데이터: 사실, 현상, 이벤트
  • 정보: 가치가 부여된 가공된 데이터
  • 컴퓨터: 정보 연산을 위한 도구
  • 파일: 정보 집합
  • 프로그램: 컴퓨터가 이해하는 명령들로 이루어진 파일

자바 기초 설명

1. JVM (Java Virtual Machine)

  • 자바 프로그램이 어느 기기, 어느 운영체제에서도 실행할 수 있게 해준다.
  • 자바 프로그램의 메모리를 효율적으로 관리&최적화 해준다.
  • 옛날에는 윈도우, 리눅스, 맥에서 각각에 운영체제에 따라 다르게 작성되었지만 JVM이 등장하면서 그럴 필요가 없어졌다.
  • Class Loader
    • class 파일을 JVM이 운영체제로부터 할당받은 메모리 영역(Runtime Data Area)에 적재하는 역할을 한다.
  • Garbage Collector
    • Heap 메모리 영역에 생성된 객체들 중에 참조되지 않은 객체들을 제거하는 역할을 한다.
    • JVM이 메모리를 관리하는 프로세스를 지칭하는 용어입니다. 자바 프로그램 상에서 사용하지 않은 메모리를 지속적으로 찾아 제거함으로써 효율적인 메모리 관리를 가능케 합니다.
  • Runtime Data Area
    • JVM의 메모리 영역으로 Java 애플리케이션 실행시 사용되는 데이터를 적재하는 영역이다. 크게 5가지 영역으로 구분된다. 여기서는 3가지를 설명할 거다.
      • Heap
        • 인스턴스화 된 모든 클래스 인스턴스배열을 저장하는 공간
        • 모든 JVM 스레드에 공유되는 공유 자원이기도 하다.
        • Heap에 저장된 할당된 메모리 회수 권한은 무조건 가비지 컬렉터에 의해서만 회수가 가능하다.
      • Method
        • 클래스 수준의 정보를 저장하는 공간
          • 타입 정보
          • 필드 정보(필드 타입, 필드 수정자)
          • 메서드 정보(메서드의 메타 데이터)
          • 런타임 상수 풀
          • 클래스 변수
        • 모든 JVM 스레드에 공유되는 공유 자원이다.
        • 사실 논리적으로 Heap 영역에 포함되는 영역이다.
      • Stack
        • 참조형 데이터 변수만 저장.

2. JRE (Java Runtime Environment)

  • JRE는 특별한 기능을 한다기보다는 JVM이 원활하게 잘 작동할 수 있도록 환경을 맞춰주는 역할을 한다.
  • JVM과 자바 프로그램을 실행(동작)시킬 때 필요한 라이브러리 API를 함께 묶어서 배포되는 패키지다.

3. JDK (Java Developement Kit)

  • JRE에 없는 자바 컴파일러(javac, java compiler)를 포함하고 있다.
  • 컴파일러란 우리가 작성한 자바 문법을 컴퓨터가 이해할 수 있게 바꾸어주는 해석기 같은 존재다.

그 외 설명

  • 자바는 Byte code이다. ?
  • 기본 자바 문법과 데이터 타입 수업을 했음.

 

'Java > 보충수업' 카테고리의 다른 글

[2024-09-13] 자바 보충수업 2일차  (0) 2024.09.14