loop-study
개발 공부할래?
loop-study
전체 방문자
오늘
어제
  • 분류 전체보기 (186)
    • 목표 및 회고 (25)
    • 세미나 & 워크샵 (1)
    • 교육 및 인강 (67)
      • TDD, Clean Code with Java (5)
      • ATDD, 클린 코드 with Spring (6)
      • DDD 세레나데 (3)
      • 인프라 공방 (6)
      • 이규원의 현실 세상의 TDD (19)
      • 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 (18)
      • 스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 (0)
      • 모든 개발자를 위한 HTTP 웹 기본 지식 - 김영한 (8)
      • 코딩으로 학습하는 GoF의 디자인 패턴 (1)
      • 스프링 시큐리티 완전정복 6.x (1)
    • 서적 (62)
      • 객체지향의 사실과 오해 (1)
      • 객체지향과 디자인패턴 (7)
      • 만들면서 배우는 클린 아키텍처 (3)
      • 테스트 주도 개발로 배우는 객체 지향 설계와 실천 (1)
      • 오브젝트: 코드로 이해하는 객체지향 설계 (17)
      • 리팩토링 : 코드 구조를 체계적으로 개선하여 효율적인 리팩터링 구현하기 (0)
      • 토비의 스프링 (3)
      • 엔터프라이즈 애플리케이션 아키텍처 패턴 (9)
      • 개발자의 글쓰기 (1)
      • 소프트웨어 장인 (17)
      • Real MySQL 8.0 (2)
    • 개발 & 방법론 (29)
      • Java (13)
      • TDD (5)
      • ATDD (3)
      • DDD (6)
      • 인프라 (2)
      • SQL (0)
    • 개인이야기 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • 백엔드 로드맵

인기 글

태그

  • 인프런
  • DDD 세레나데
  • 오브젝트
  • 모든 개발자를 위한 HTTP 웹 기본 지식
  • 추상화
  • Test Driven Development
  • nextstep
  • study
  • Patterns of Enterprise Application Architecture
  • java
  • 이규원
  • 자바
  • 객체지향
  • 인프라공방
  • JUnit
  • 테스트 주도 개발
  • fastcampus
  • 스프링
  • 마틴 파울러
  • 조영호
  • 소프트웨어 장인
  • 김영한
  • 현실세상의 TDD
  • 엔터프라이즈 애플리케이션 아키텍처 패턴
  • 백기선
  • ATDD
  • 넥스트스탭
  • 장인정신
  • 스터디
  • TDD

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
loop-study
개발 & 방법론/Java

1주차 : JVM은 무엇이며 자바 코드는 어떻게 실행하는 것인가.

1주차 : JVM은 무엇이며 자바 코드는 어떻게 실행하는 것인가.
개발 & 방법론/Java

1주차 : JVM은 무엇이며 자바 코드는 어떻게 실행하는 것인가.

2020. 11. 17. 16:39

JVM이란 무엇인가

사람들이 사용하는 운영체재는 여러 가지가 존재합니다. 대표적으로 윈도우, 맥OS, 리눅스 등이 있죠. JAVA로 간단한 프로그램을 작성했다고 생각해봅시다. 운영체재마다 똑같은 결과물로 실행이 될 수 있을까요? 아닙니다. 운영체재마다 실행되는 방식이 다르기에 하나의 프로그램이라도 각각 코드를 작성해야 합니다. 이런 문제 때문에 나온 게 JVM (Java Virtual Marchine) 입니다. JVM 는 운영체재와 Java 의 중계역할을 해주니, 각각의 운영체재에서 같은 결과물을 얻게 됩니다(자바의 독립성). 대신 JVM 는 각 운영체재마다 다르게 존재하는 것만 염두해주시면 됩니다.

 

컴파일하는 방법

  1. JAVA 프로그램을 작성합니다.
  2. 저장된 JAVA 경로로 이동합니다 HelloWorld.java 파일만 존재합니다.
  3. 터미널로 해당 경로로 찾아가서 javac HelloWorld.java 명령합니다

 

컴파일 되기전 폴더 내역
터미널로 컴파일 실행
컴파일 실행 후 생성된 .class 파일

 

실행하는 방법

           1. 상위 src 폴더로 이동합니다

           2. java 패키지명.파일명 명령을 실행합니다

컴파일된 자바프로그램 실행하기

    *백기선 선생님의 Tip

      - java 상위버전으로 컴파일한 경우 하위 버전에서는 실행할 수가 없습니다. 반대로 하위 버전에서 컴파일하면 상위 버전에서 실행이 가능합니다. (추후에 시도해보겠습니다)

 

바이트코드란 무엇인가

        .java 파일을 컴파일되어 나온 .class 파일이 바이트코드입니다.

        .class 파일은 JVM 가 읽을 수 있도록 0과 1로 이뤄진 2진법으로 1byte 라 바이트코드라 부릅니다.

   

JIT 컴파일러란 무엇이며 어떻게 동작하는지

        Just-In-Time 컴파일러란 JVM 에 포함되어있으며, 바이트코드를 기계어로 번역하여 전달해주는 역할을 합니다.

        위에서 컴파일된 .class 파일을 실행하면 JIT 컴파일러는 실시간으로 바이트코드를 해당 운영체재에 맞는 기계어로 번역하여 전달해줍니다. 운영체재는 번역된 기계어로 프로그램을 실행하게 됩니다.

        

        

JVM 구성 요소 

출처 : https://www.inflearn.com/course/the-java-code-manipulation/dashboard 백기선선생님 강좌

        - 클래스 로더 시스템 

            : .class 에서 바이트코드를 읽고 메모리에 저장함

            1) 로딩 : 말그대로 클래스를 읽어오는 과정

            2) 링크 : 레퍼런스를 연결하는 과정 (import 경로)

            3) 초기화 : static 값들 초기화 및 변수에 할당

 

        - 메모리

           [전역 공유]

           1) 메소드 : 클래스 수준의 정보 (이름, 부모 이름, 메소드, 변수) 저장, 공유

           2) 힙 : 객체(인스턴스 혹은 .class)를 저장, 공유

           

           [쓰레드 공유] 

           3) 스택 : 쓰레드마다 런타임 스택을 생성하고 그 안에 메소드 호출을 블럭으로 쌓는다. 쓰레드 종료 시 쌓인 스택도 사라진다. (디버깅, error 발생 시 보이는 메소드 실행내역)

           4) PC 레지스터 : 쓰레드 마다 쓰레드 내 현재 실행할 instruction의 위치를 가리키는 포인터가 생성된다.

           5) 네이티브 메소드 스택 : native 키워드가 붙은 메서드가 저장되는 영역

          * 스택, PC레지스터, 네이티브 메소드 스택은 특정 쓰레드에만 국한되어 있다.

 

        - 실행엔진

           1) 인터프리터 : 바이트코드를 한 줄씩 실행

           2) JIT 컴파일러 : 인터프리터의 효율을 높이기 위해, 인터프리터로 반복되는 코드가 발견되면 JIT 컴파일러로 반복되는 코드를 모두 해당 운영체재에 맞는 기계어(네이티브 코드)로 변환시켜준다. 기계어로 변환된 코드는 인터프리터가 곧바로 사용한다.

           3) GC(Garbage Collector) : 더 이상 참조되지 않는 객체를 모아서 정리한다.

        

        - JIN(Java Native Interface) & 네이티브 메서드 라이브러리

           1) Java 가 아닌 C, C++ 로 작성된 native 메서드

 

 

    7. JDK와 JRE의 차이

        - JDK (Java Development Kit ) : 프로그램 개발에 필요한 자바 가상 기계 (JVM), 라이브러리 API, 컴파일러 등이 포함, 

        - JRE (Java Runtime Environment) : 프로그램 실행에 필요한 자바 가상 기계 (JVM), 라이브러리 API 만 포함으로 개발된 프로그램 실행에 사용됩니다.

 

 

 

 

참고

 - 기초부터 실무 응용까지 자바 마스터북, 제이펍

 - 이것이 자바다 신용권의 Java 프로그래밍 정복1, 한빛미디어

 - 더 자바, 코드를 조작하는 다양한 방법 www.inflearn.com/course/the-java-code-manipulation/dashboard

'개발 & 방법론 > Java' 카테고리의 다른 글

5주차 : 클래스(Class)  (0) 2020.12.21
4주차 : 제어문  (0) 2020.12.12
3주차 과제 : 연산자  (0) 2020.11.27
2주차 과제: 자바 데이터 타입, 변수 그리고 배열  (0) 2020.11.19
자바 스터디 같이 할래?  (0) 2020.11.17
    '개발 & 방법론/Java' 카테고리의 다른 글
    • 4주차 : 제어문
    • 3주차 과제 : 연산자
    • 2주차 과제: 자바 데이터 타입, 변수 그리고 배열
    • 자바 스터디 같이 할래?
    loop-study
    loop-study
    오늘도 공부하자

    티스토리툴바

    단축키

    내 블로그

    내 블로그 - 관리자 홈 전환
    Q
    Q
    새 글 쓰기
    W
    W

    블로그 게시글

    글 수정 (권한 있는 경우)
    E
    E
    댓글 영역으로 이동
    C
    C

    모든 영역

    이 페이지의 URL 복사
    S
    S
    맨 위로 이동
    T
    T
    티스토리 홈 이동
    H
    H
    단축키 안내
    Shift + /
    ⇧ + /

    * 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.