[CS] Java 잡학지식1

📝 1yangsh·2021년 6월 29일
0

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개의 객체를 생성해서 공유할 수 있는 코드 패턴

profile
개발 경험 저장소

0개의 댓글