JAVA : 독립성, JVM, 개발(jdk) & 실행 환경(jre), bin파일

2022. 4. 4. 20:42· CS/JAVA
목차
  1. 자바의 태동
  2. JVM
  3. 자바 실행 환경
  4. 자바 개발 환경

자바의 태동

 

자바가 개발되기 전, 다른 프로그래밍 언어들은 소스파일을 컴파일하여 기계어로된 실행파일로 만들었습니다.

 

 

이렇게 기계어로 컴파일된 실행파일은 각 기기마다 기계어가 다르고,  OS마다 기계어의 API가 다르고, 실행 파일 형식이 다르기 때문에 컴파일을 진행한 환경이 아닌 다른 환경에서는 컴파일된 파일을 실행할 수 없다는 단점이 있었습니다.

 

 

예를 들어 window에서 컴파일한 실행파일을 linux에서 실행하려면 해당 실행파일의 원래 소스코드를 재작성하고 linux에서 다시 컴파일 해야합니다.

 

 

자바는 위와 같은 단점을 극복하기 위해 JVM이라는 자바 바이트 코드를 실행할 수 있는 소프트웨어와 함께 등장했습니다.

 

 

JVM

 

자바는 소스코드를 컴파일 할 때 해당 컴퓨터 환경에서만 실행시킬 수 있는 기계어가 아닌, CPU에 종속적이지 않은 중립적인 바이트 코드를 만듭니다.

 

 

이렇게 컴파일된 바이트 코드는 각기 다른 환경에서 가지고 있는 JVM이 해당 환경에 맞는 기계어로 번역하여 실행되게 됩니다.

 

 

소스 -> 컴파일 -> 실행파일(.class) -> JVM -> 기계어 -> 기계

 

 

 

 

JVM을 가지고 있는 컴퓨터라면 다른 OS든, 다른 CPU든, 자바 실행파일이 어느 환경에서 개발되었든 모두 실행 가능합니다. 이러한 자바의 특징을 WORA(Write Once Run Anywhere) 라고 합니다.

 

 

물론 기기마다 자바 바이트 코드를 해당 기기의 기계어로 번역할 수 있는 JVM을 만들어주어야 하지만,

다른 기기에서 새로운 자바 파일을 받을 때 마다 컴파일을 다시 해주는 동작보다 훨씬 효율적이라고 볼 수 있습니다.

이러한 특징 때문에 JVM은 운영체제의 도움 없이 자체적으로 멀티스레드를 지원합니다.

 

 

결론적으로 각종 플랫폼에 대한 JVM은 oracle, IBM같은 자바 개발사들이 공급하고, 자바 개발자 개개인은 자바 코드만을 신경쓸 수 있게 되었습니다.

 

 

 

자바 실행 환경

 

 

자바는 다른 프로그래밍 언어들과 다르게 위에서 만들어진 바이트 코드를 하나의 실행파일로 만드는 링크 과정이 없습니다. JVM은 필요할 때 클래스 로더가 동적으로 클래스 파일을 로딩하기 때문에 더 적은 메모리로 실행 가능합니다.

 

 

자바 클래스를 바이트 코드로 컴파일

 

만약 소스코드가 여러 폴더에 걸쳐 다수의 클래스로 구성된 경우에 jar파일로 배포하기도 합니다.

 

 

 

 

자바(상)와 C++(하)의 파일 실행 과정

 

자바 개발 환경

 

JDK(Java Development kit) - 개발

- 자바 응용 개발 환경으로, 개발에 필요한 도구 포함

- 컴파일러, 디버거, jre 포함

 

 

JRE(Java Runtime Evironment) - 실행 

- 자바 실행 환경, JVM 포함

- 컴파일된 자바 API들이 들어 있는 모듈 파일

 

 

JDK의 bin 디렉토리에 포함된 주요 개발 도구

 

• javac - 자바 소스를 바이트 코드로 변환하는 컴파일러

 

• java - 자바 응용프로그램 실행기. JVM을 작동시켜 자바 프로그램 실행

 

• javadoc - 자바 소스로부터 HTML 형식의 API 도큐먼트 생성

 

• jar - 자바 클래스들(패키지포함)을 압축한 자바 아카이브 파일(.jar) 생성 관리

 

• jmod - 자바의 모듈 파일(.jmod)을 만들거나 모듈 파일의 내용 출력

 

• jlink - 응용프로그램에 맞춘 맞춤형(custom) JRE 제공

 

• jdb - 자바 응용프로그램의 실행 중 오류를 찾기 위해 사용하는 디버거

 

• javap - 클래스 파일의 바이트 코드를 소스와 함께 보여주는 디스어셈블러

'CS > JAVA' 카테고리의 다른 글

자바 - 상속  (0) 2022.04.10
자바 - static & final  (0) 2022.04.10
자바 - 접근 지정자  (0) 2022.04.07
자바 - this와 생성자 오버로딩  (0) 2022.04.06
자바 - 배열 & 객체 레퍼런스, Garbege Collection  (0) 2022.04.06
  1. 자바의 태동
  2. JVM
  3. 자바 실행 환경
  4. 자바 개발 환경
'CS/JAVA' 카테고리의 다른 글
  • 자바 - static & final
  • 자바 - 접근 지정자
  • 자바 - this와 생성자 오버로딩
  • 자바 - 배열 & 객체 레퍼런스, Garbege Collection
reko_
reko_
아무거나 기록reko_ 님의 블로그입니다.
reko_
아무거나 기록
reko_
전체
오늘
어제
  • 분류 전체보기 (62)
    • develop (10)
      • Backend -Java (5)
      • AI Service (0)
    • CS (46)
      • DataBase (6)
      • OS (27)
      • JAVA (10)
      • Network (3)
    • ML Lecture (4)
      • Supervised Learning (3)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 컴퓨터공학
  • +
  • 오퍼레이팅 시스템
  • 데이터베이스 #컴퓨터공학
  • 더
  • 하드웨어

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.1
reko_
JAVA : 독립성, JVM, 개발(jdk) & 실행 환경(jre), bin파일
상단으로

티스토리툴바

단축키

내 블로그

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

블로그 게시글

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

모든 영역

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

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