[CS] Java

Java

https://asfirstalways.tistory.com/158

네트워크상에서 쓸 수 있는 객체지향 프로그래밍 언어

객체지향 프로그래밍(OOP)

Object-Oriented Programming

객체지향 프로그래밍 특징

JVM(Java Virtual Machine)

물리적 머신과 유사한 머신을 소프트웨어로 구현한 것

실행과정
  1. 프로그램이 실행되면 JVM은 OS로부터 프로그램이 필요로하는 메모리 할당
    • JVM은 메모리를 용도에 따라 여러 영역으로 나누어 관리
  2. 자파 컴파일러(javac)가 자바 소스코드(.java)를 읽어들여 자바 바이트코드(.class)로 변환

  3. Class Loader를 통해 class 파일들을 JVM으로 로딩
  4. 로딩된 class 파일들은 Execution Engine을 통해 해석
  5. 해석된 바이트코드는 Runtime Data Areas에 배치되어 실질적인 수행이 이루어짐
    • JVM은 필요에 따라 Thread Synchronization과 같은 GC 관리 작업 수행

image-20210427003429497

Garbage Collector

GC를 수행하는 모듈 (쓰레드) 존재 (뒤에 자세히 후술)

Runtime Data Area

프로그램을 수행하기 위해 OS에서 할당받은 메모리 공간

image-20210427003345102

###### 올라가는 정보의 종류

  • Field information

    멤버변수의 이름, 데이터 타입, 접근 제어자에 대한 정보

  • Method Information

    메소드의 이름, 리턴 타입, 매개 변수, 접근제어자에 대한 정보

  • Type Information

    class 인지 interface인지의 여부 저장 / Type의 속성, 전체 이름, super class의 전체 이름(interface, object 제외)

image-20210427003300089

  • Permanent Generation

    생성된 객체들의 정보의 주소값이 저장된 공간

    Class loader에 의해 load되는 Class, Method 등에 대한 meta 정보가 저장되는 영역, JVM에 의해 사용

    Reflection을 사용하여 동적으로 클래스가 로딩되는 경우에 사용

  • New/Young 영역

    • Eden: 객체들이 최초로 생성되는 공간
    • Survivor 0 / 1: Eden에서 참조되는 객체들이 저장되는 공간
  • Old 영역

    New area에서 일정 시간 참조되고 있는, 살아남은 객체들이 저장되는 공간 Eden 영역에 객체가 가득차게 되면 첫번째 GC 발생

    Eden 영역에 있는 값들을 Survivor 1 영역에 복사하고 이 영역을 제외한 나머지 영역의 객체 삭제

​ 인스턴스 소멸 방법과 소멸 시점이 지역 변수와 다름 -> 힙 영역에 별도로 저장

Collection

인터페이스를 기준으로 여러 구현체 존재

다수의 Data를 다루는 데 표준화된 클래스들을 제공 -> 데이터구조를 직접 구현하지 않고 편하게 사용할 수 있기 때문

객체를 보관하기 위한 공간을 미리 정하지 않음 -> 객체의 수를 동적으로 정함

GC