[F-Lab] 모각코 챌린지 1일차

tree·2023년 5월 1일
0

자바의 신 19장 정리

19. 이쯤에서 자바의 역사와 JVM에 대해서 알아보자

19-1 자바의 역사, 19-2 JDK의 플랫폼에 따른 차이

  • 별 내용 없음

19-3 JDK, J2SE, Java SE 외에 자바에서 사용되는 다른 용어들

  • JRE
    • Java Runtime Environment
    • 실행만을 위한 환경
    • 라이브러리 포함
  • JDK
    • Java Development Kit
    • JRE에 컴파일 등 각종 프로그램 포함

19-4 자바 언어의 특징은 다음과 같다

  • 단순하고 객체지향이며 친숙
    • 단순함이란 자바의 기본 컨셉을 배우는 게 쉽다는 것
    • 다형성, 캡슐화 등 객체지향의 특징을 지원
    • 풍부한 라이브러리
    • C++보다 쉽고 빠르게 개발(오라클 주장)
  • 견고하며, 보안상 안전
    • 견고함
      • 컴파일 시, 실행 시 문법 오류 체크
      • 메모리 관리 모델 단순
      • 포인터 개념 無
    • 보안
      • 승인 받지 않은 프로그램은 실행이 금지되어 있음
  • 아키텍처에 중립적, 포터블
    • 같은 프로그램은 어떤 플랫폼에서도 실행 가능
  • 높은 성능
    • 가비지 컬렉터
      • 낮은 우선순위의 쓰레드로 동작
    • 네이티브 언어
      • 빠른 성능을 요하는 작업은 네이티브 언어로 수행
  • 인터프리트 언어, 쓰레드 제공, 동적 언어
    • 자바 인터프리터는 자바 바이트 코드를 어떤 장비에서도 수행하게 해줌
      • C언어의 경우 장비별로 일일히 테스트해야 했음
    • 멀티 쓰레드 환경을 제공해 동시에 여러 작업 가능
      • 빠른 작업 가능
    • 실행 시 동적으로 필요한 프로그램을 연결
      • 새로운 코드도 다양한 소스에 연결 가능

19-5 자바의 버전별 차이

  • 자바 7,8 버전에서의 변화가 중요한데 이는 30 ~ 32장에서 소개함

19-6 JIT 컴파일러는 도대체 뭘까?

  • 전통적인 프로그램 실행 방식
    • 정적 컴파일 방식
      • 실행 전 소스코드를 기계어로 변환
      • 최적화가 가능해 빠름
      • 이식성 낮음
        • OS마다 기계어가 달라서 실행 파일이 이기종 간에 호환되지 않는 경우가 많음
    • 인터프리터 방식
      • 실행 시 코드를 한줄씩 기계어로 변환
      • 최적화가 불가능해서 느림
      • 이식성 높음
        • 인터프리터만 설치되어 있다면 소스 코드 실행에 아무 문제가 없다. 같은 소스 코드를 다른 OS에서 사용 가능.
        • 소스 코드를 실행할 컴퓨터의 기계어에 맞게 변환해서 실행
  • JIT 컴파일러
    • 정적 컴파일과 인터프리터 방식을 혼합
      • 실행 시 바이트 코드를 한줄씩 기계어로 변환하지만 최적화까지 수행
        • 기계어로 변환된 코드를 캐싱해두고 같은 코드가 반복될 때 매번 기계어로 변환하지 않고 캐싱된 코드를 가져다 재사용
      • 인터프리터의 장점인 이식성과 정적 컴파일의 장점인 최적화를 동시에 취함

19-7 HotSpot은 또 뭐야?

  • 자바 가상 머신(JVM)
    • 이전 버전의 JVM(Classic VM)과 구별하기 위한 이름
HotSpot 클라이언트 컴파일러HotSpot 서버 컴파일러
용도싱글 코어멀티 코어
특징애플리케이션 시작 시간 단축, 메모리 점유 감소애플리케이션 수행 속도 향상

19-8 자바를 배우면 꼭 알아야 하는 용어

  • JVM(Java Virtual Machine)
    • 자바 프로그램을 실행하는 프로세스
  • GC(Garbage Colector)
    • JVM 내에서 메모리 관리를 해주는 것

19-9 자바의 GC는 어떻게 진행되나요?

  • 힙 영역
    • 객체들이 존재하는 영역
    • 3가지 영역으로 나뉨
      • Young
        • 생성된 지 얼마 안 된 객체들이 존재
        • eden 영역과 2개의 survivor 영역으로 나뉨
      • Old
        • 오래된 객체들이 존재
      • Perm
        • 클래스, 메소드 정보가 존재
  • Minor GC
    • eden 영역에 새로운 객체가 생성됨
    • eden 영역이 다 차면 생존한 객체들을 survivor 영역으로 옮김
    • survivor 영역이 다 차면 생존한 객체를 다른 survivor 영역으로 옮김. 이 때 eden 영역의 생존한 객체들도 같이 다른 survivor 영역으로 옮김
    • 오래된 객체들은 old 영역으로 옮김
  • Full GC
    • old 영역이 다 차면 실행되는 GC
  • young 영역이 old 영역보다 작기 때문에 보통 Minor GC가 Full GC보다 빠름.

쇼핑몰 ERD 설계

0개의 댓글