본문 바로가기

Java

Java study[1]

백기선 님이 과거에 하셨던 Java 라이브 스터디 주제로 자기 주도적 학습을 해보려고 한다. 

 

-JVM이란 무엇인가

Java Virtual Machine

Java VM을 통해 동일한 애플리케이션을 여러 플랫폼에서 실행할 수 있습니다.

문서상 설명으로는 다양한 하드웨어 기반 플랫폼에 포팅이 된다는 문구였다.

[ 여기서 포팅은 컴퓨터 여기서 포팅은 과학에서 실행 가능한 프로그램이 원래 설계된 바와 다른 컴퓨팅 환경(이를테면 CPU, 운영 체제, 서드 파티 라이브러리 등)에서 동작할 수 있도록 하는 과정이라는 사전적 의미다. ] 

이 점에 이해를 하고자 가볍게 일상생활로 비유를 하면서 생각을 해봤는데

만약 음료를 시킬 때 그 음료에 맞는 컵을 제공한다면 거기서 텀블러를 들고 가면 컵을 바꿔줄 필요가 없는 점으로 이해했다


-컴파일하는 방법

소스 파일을 가져와 해당 텍스트가  JVM이 이해할 수 있는 명령으로 변환하는 Java 언어 컴파일러를 호출한다.

. class 파일을 가져와 명령어를 실행시켜 Java 언어로 컴파일시킨다.

 Java 프로그래밍 언어로 작성된 클래스 및 인터페이스 정의를 읽고 바이트 코드 클래스 파일로 컴파일합니다. 는 정의로 설명을 한다. 

컴파일 하는법은  Ide 툴이나 콘솔창으로 할 수 있다. 

콘솔창으로 컴파일 과정을 진행을 할 경우는 파일이 있는 폴더로[디렉토리] 경로를 알아야하며 과정을 설명을 하면.

윈도우 기준으로 검색창에 cmd 입력후 >  자바파일이 있는 폴더로 이동 후 클래스 파일로 컴파일을 시켜야한다.

> javac 명령어 실행을 하여 클래스 파일이 생성이 된것을 확인한 후 파일을 실행을 시키면 컴파일이 진행된다.


-실행하는 방법

 Java 가상 머신을 사용해 애플리케이션을 실행하는 Java 애플리케이션 시작 관리자 도구를 호출한다는 설명이다.  

앞서 설명한 내용처럼 콘솔창 기준으로  javac 명령어 실행을 하여 클래스 파일이 생성이 된것을 확인한 후 파일을 실행을 시키면 된다.


-바이트코드란 무엇인가

바이트코드란 컴퓨터가 실행할 수 있게 해주는 언어. 즉 사람이 해석 못하는 기계어언어라고 생각했다.

즉 컴퓨터는 0 1 로 이루어져있는 2진법 표현을 하기에 실행을 하기 위해서는 변환을 해줘야한다.


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

Just In Time 으로 설명되며 프로그램을 실행 하는 시점에 기계어로 변역하는 컴파일 기법이라고 설명을 한다. 

자바 프로그램 코드를 바이트코드로 변환한 후 바이트코드를 실행시키는 시점에 JVM이 바이트코드를 JIT  컴파일을 통해 기계어로 변환한다.

기계어로 변환된 코드는 캐시에 저장이 되기에 재사용시 컴파일을 다시 할 필요가 없다고 한다.

 


-JVM 구성 요소

자바 인터프리터, 클래스 로더, JIT 컴파일러, 가비지 컬렉터 


-JDK와 JRE의 차이

오라클 문서에서 설명은 런타임환경 [JRE] 개발 키트 [JDK] 설명이 나와있다.

JRE는 Java 프로그래밍 언어로 작성된 애플릿 및 응용 프로그램을 실행하는데 필요한 라이브러리, Java 가상 머신 및 기타 구성 요소를 제공합니다. 이 런타임 환경은 응용 프로그램과 함께 재배포하여 독립형으로 만들 수 있습니다

JDK에는 JRE와 애플릿 및 애플리케이션 개발에 필요하거나 유용한 컴파일러 및 디버거와 같은 명령줄 개발 도구가 포함되어 있습니다

앞서 설명한 거와 같이  JDK와  JRE 가장 큰 차이점은 JRE 에는 개발에 필요한 컴파일러나 디버거 같은 개발 도구가 없다는 점이 큰 차이점이라고 생각이 든다.

 

출처) [오라클 공식문서]  https://docs.oracle.com/javase/tutorial/getStarted/intro/definition.html

 

About the Java Technology (The Java™ Tutorials > Getting Started > The Java Technology Phenomenon)

The Java Tutorials have been written for JDK 8. Examples and practices described in this page don't take advantage of improvements introduced in later releases and might use technology no longer available. See Java Language Changes for a summary of updated

docs.oracle.com

출처 ) [백기선 님 Java live study ] https://github.com/whiteship/live-study/issues?q=is%3Aissue+is%3Aclosed 

 

GitHub - whiteship/live-study: 온라인 스터디

온라인 스터디. Contribute to whiteship/live-study development by creating an account on GitHub.

github.com