Java / JVM
JVM 이란 Java Virtual Machine의 약자로 자바 프로그램을 자바 기반 API로 실행하는 역할을 함
Java 프로그램 실행 과정
- 프로그램이 실행되면 JVM이 OS로부터 해당 프로그램이 필요로 하는 메모리를 할당 받는다
- 자바 바이트코드로 변환된(.class) 파일을 class 로더를 통해 JVM에 로딩
- 로딩된 class 파일은 execution engine을 통해 해석되고 실행
- 필요시 garbage collection을 수행해서 불필요하게 할당된 메모리를 해제
Garbage Collection (GC)
Java 프로그램은 메모리를 명시적으로 지정해서 해제하지 않기 때문에 Garbage Collection Mechanism을 통해 경우에 따라 더 이상 필요없는 객체를 찾아 지우는 역할을 수행
JVM 메모리 영역
- JVM은 운영체제로부터 할당받은 메모리 영역을 세 영역으로 분리
- 메소드 영역, JVM 스택, 힙 영역
- 이중에서 힙 영역에 생성된 객체가 저장됨. 사용하지 않는 객체를 GC를 통해 삭제
JVM 힙 영역은 다음과 같이 나뉨
- YOUNG, OLD, Permanent Generation
YOUNG genetation : eden, S0, S1 (Survivor space)
Garbage Collection 동작 방식
- 새롭게 생성된 객체는 YOUNG의 eden 영역에 들어가고, eden 영역이 다 차면 minor GC가 발생
- GC가 실행되면 GC를 실행하는 스레드 외에 나머지 스레드는 멈춤
- 불필요한 객체는 삭제되고 아직 필요한 객체는 S0로 이동, S0에 있었던 객체는 S1로 이동, S1이 다 차면 아직 필요한 객체는 OLD genetaion으로 이동
- OLD genetaion은 크기가 크므로 이 영역이 다 차는 경우는 자주 발생하지 않음. 이 영역을 삭제할 때 major GC(혹은 full GC) 발생
- minor GC는 자주 발생하지만 YOUNG 영역은 OLD 영역보다 적기 때문에 프로그램 중지 시간 (stop-the-world)은 짧아짐
- YOUNG 영역을 다 비우므로 YOUNG 영역에는 연속된 여유 공간이 만들어짐
Overriding / Overloading
Overriding : 상위 클래스에 존재하는 메서드를 하위 클래스에 맞게 재정의 하는 것
Overloading : 두 메서드가 같은 이름을 가지고 있으나 파라미터 수나 자료형이 다른 경우
interface / abstract
abstract
- 추상 클래스는 추상 메소드를 1개 이상 가지고 있는 클래스를 의미.
- 기존 메소드 이외에 추상 메서드를 상속시켜서 반드시 구현이 필요한 내용인 추상 메서드를 상속받은 클래스에서 구현시키는 것이 주목적.
- 추상 메소드를 1개 이상 가진 클래스는 객체 생성이 안되므로, 추상 클래스를 상속받은 클래스의 객체 생성을 위해서는 추상 메서드를 구현해야 함 (추상 메서드 구현을 강제함)
interface
- 상수와 메소드 선언 집합, 정의된 메소드를
implements
받은 곳에서 모두 구현을 강제함
- Java는 단일 상속만을 지원하기 때문에, 추상 클래스를 상속받은 클래스는 다른 클래스를 상속받을 수 없음. 그러나 인터페이스는 인터페이스끼리 상속이 가능하므로, 여러 인터페이스 상속이 가능함
디자인패턴 / 싱글톤
디자인 패턴 : 공통적인 소프트웨어 코드 작성 문제를 해결하는데 도움이 될 수 있는 코드 패턴
싱글톤 패턴 : 전체 프로그램에서 단 1개의 객체를 생성해서 공유할 수 있는 코드 패턴