[F-Lab 모각코 챌린지 1일차] TIL : 19장 JVM

성수데브리·2023년 6월 29일
0

f-lab_java

목록 보기
1/73

학습 목표

  • Java 언어 특징
  • JVM 학습

학습 결과 요약

  • Write Once, Run Anywhere : Java 언어는 여러 플랫폼에서 수행할 수 있는 개발 언어를 목표로 개발 되었다.
  • 바이트코드를 기계 코드로 변환하는 작업을 JTI 컴파일러에서 한다.

학습 내용


Write Once, Run Anywhere

  • 자바는 여러 플랫폼에서 수행할 수 있는 개발 언어를 목표로 개발되었음
  • Java 버전에서 제공되어야 하는 표준 문서가 만들어지면 그 기준에 해당하는 각 벤더에 맞는 JDK가 별도로 만들어 진다.

JDK & JRE

!http://sahet.net/src/software/JavaSEPlatform.png

  • JDK (Java Development Kit) :
  • JRE (Java Runtime Environment) : 자바를 실행할 수 있는 환경의 집합

자바 언어 특징

  • 단순하고 객채지향이며 친숙해야 한다 자바는 객체지향으로 디자인 되었다. 자바로 개발할 때에는 모든 것을 만들 필요가 없고 필요한 기능들은 API를 통해서 제공한다
  • 견고하며 보안상 안전하다 자바는 기본적으로 분산 환경에서 사용하기 위해 디자인 되었다. 자바 기술을 외부에서 침입이 불가능한 애플리케이션을 만들 수 있도록 해준다.
  • 높은 성능 자동화된 가비지 컬렉터는 낮은 우선 순위의 쓰레드로 동작하기 때문에 보다 높은 성능을 낼 수 있다.
  • 인터프리트 언어, 쓰레드 제공, 동적인 언어 자바 인터프리터는 자바 바이트 코드를 어떤 장비에서도 수행할 수 있도록 해준다.
    자바는 멀티 쓰레드 환경을 제공하기 때문에, 동시에 여러 작업을 수행할 수 있다.
    자바 컴파일러는 컴파일시 매우 엄격한 점검을 수행한다. 그리고 실행시에 동적으로 필요한 프로그램들을 링크시킨다.

자바 버전별 주요 변화

JDK 1.2

  • JIT 컴파일러 추가
    • JIT (Just-In-Time) 은 어떤 메서드 일부 혹은 전체 코드를 네이티브 코드로 변환하여 JVM 에서 번역하지 않도록 함으로써 보다 빠른 성능을 제공하는 기술
    • 바이트코드를 기계 코드로 변환하는 작업을 JIT 컴파일러에서 한다 JIT를 사용하면 반복적으로 수행되는 코드는 매우 빠른 성능을 보인다. 하지만 처음에 시작할 때에는 변환 단계를 거쳐야 하므로 성능이 느린 단점이 있다. Untitled

JDK1.4

  • 정규표현식 추가
  • NIO non-blocking 추가 : java.io 패키지에서 제공하는 기능의 단점을 보완하기 위한 것

Java 5

  • 제네릭 추가
  • 어노테이션
  • autoboxing, unboxing
  • enum
  • varargs

Java 6

  • 안정성과 확장성

Java 8

  • 람다 표현식

JVM 아키텍처

!http://ksoong.org/troubleshooting/intro/img/hotspotjvm-1.PNG

JVM 은 세 가지 주요 컴포넌트로 되어 있다.

  1. 클래스 로더 서브시스템
  2. Runtime Data Areas
  3. Execution Engine

자바의 GC

!https://4.bp.blogspot.com/-id4mr-lULDI/VvPOd3L964I/AAAAAAAAFQI/CJyyQuxaWgkITVpkXVI0diN93HtsRfxWg/w551-h335/Java+Garbage+Collection+heap.png

  • Young 영역

    • 젊은 객체들이 존재
    • Eden : 객체를 생성하자마자 저장되는 장소는 Eden 이다
    • 2개 Survivor 영역
      1. Eden 영역이 꽉 차면 살아있는 객체만 Survivor 영역으로 복사된다. 다시 Eden 영역을 채우게 된다.
      2. Survivor 영역이 꽉 차게 되면 다른 Survivor 영역으로 객체가 복사된다.
        이때, Eden 영역에 있는 객체들 중 살아있는 객체들도 다른 Survivor 영역으로 간다.
        즉, Survivor 영역의 둘 중 하나는 반드시 비어 있어야만 한다.
    • Old 영역 : 늙은 객체
    • Perm 영역 : 클래스나 메서드에 대한 정보가 쌓인다
    • 마이너 GC 혹은 영 GC라고 부른다. 가비지 컬렉션
  • Old 영역

    1. 오래 살아있는 객체들을 Old 영역으로 이동한다.
    2. Old 영역이 꽉 차면 GC 가 발생하는데 이것을 메이저 GC, 풀 GC 라고 부른다. 가비지 컬렉션

Young GC 가 풀 GC 보다 빠르다. 왜냐하면 일반적으로 더 작은 공간이 할당되고, 객체들을 처리하는 방식도 다르기 때문이다.

  • 가비지 컬렉터 종류
    1. Serial GC
    2. Parallel GC
    3. Parallel Old GC
    4. CMS (Concurrent Mark Sweep) GC
    5. G1 (Garbage First) GC

예시


참고


https://javarevisited.blogspot.com/2011/04/garbage-collection-in-java.html#axzz861kIh1Jm

0개의 댓글