JVM

2024. 1. 2. 00:18·JAVA
목차
  1. JVM
  2. 더 알아보기
  3. reference

 

 

*intellij 단축키

  ctrl+Alt+F7 :  해당 class or method or variable이 전체 프로젝트의 어느 곳에서 사용되고 있는 지 보여준다.

 

*콘솔, 쉘, 터미널

 

JVM


  • 컴파일러를 이용하여 .java 파일을 컴파일하면 .class 파일이 생긴다. 이렇게 되면 우리가 작성한 자바 코드(.java)는 바이트 코드, 즉 이진수로 이루어진 파일(.class)로 바뀐다.
  • 우리가 사용하는 자바는 정의 되어있는 표준 스펙을 토대로 오라클, 아마존 등의 여러 회사에서 이를 구현하여 만들어진다. 
  • Intellij, eclipse와 같은 통합개발환경(IDE)를 사용하면 컴파일, 실행과 같은 과정을 사용자가 직접 수행할 필요 없이 실행버튼만 누르면 자동으로 이루어지기 때문에 편리하다.

🤔  JVM, 자바 가상 머신

 

자바를 배우다보면 초반에 꼭 나오는 이야기가 있다. 바로 JVM이다.

처음 이 개념을 접했을 때는 머리로는 이해가 가는데 ... 응 뭔가 머리로만 이해가 가고...ㅜㅜ

특히 " JVM 덕분에 운영체제에 종속적이지 않은 개발을 할 수 있게 되었다. " 라는 이야기가 100% 이해 가지 않았다. 내가 바보였던건가? 

본론으로 돌아와서, JVM이란 무엇이고 어디에 쓸모가 있는고? 를 이해해보자.  

일반적인 프로그램을 생각해보면 window용 프로그램, Linux용 프로그램, mac용 프로그램을 제각각 따로 개발해야한다. 이것은 운영체제별로 사용하는 OS 명령어가 다르기 때문이 발생하는 일이다. ( ls, cat 같은 리눅스 명령어가 윈도우 OS에서는 사용할 수 없는 것을 예시로 떠올려볼 수 있다.)

그렇다면 자바를 사용하여 프로그램을 개발하는 개발자의 경우 어떨까? 운영체제마다 프로그램을 각각 개발해야할까?

대답은 "아니요!"이다. 

위에서 우리가 작성한 소스코드(.java 파일)는 실행버튼을 누르면 두 가지 단계를 거치게 된다고 언급하였다.

1. 컴파일러가 .java파일을 컴파일하여 .class 파일 생성

2. 생성된 .class 파일을 JVM에서 실행

(3. 끄읏)

 

즉 .class 파일이 호스트(내 컴퓨터)의 자바 가상 머신에서 실행되어야 프로그램이 돌아가는 것이다.

우리는 이 점을 이용한다. 어차피 컴파일된 파일은 JVM을 통해 실행되니, 자바 언어로 자바 문법에 맞게 개발만 하면 각 운영체제에 맞는 JVM이 이를 실행시키도록 하는 것이다! 물론, 운영체제 환경에 맞는 JVM, 즉 자바는 운영체제에 맞게 인간이 직접 다운로드 받아야한다.

 

 

더 알아보기


컴파일러(번역기)

-  특정 프로그래밍 언어로 쓰여 있는 문서를 다른 프로그래밍 언어로 옮기는 언어 번역 프로그램

- 컴파일러는 고급 프로그래밍 언어로 쓰여져 있는 파일을 실행 프로그램으로 만들기 위해 저급 프로그래밍 언어(예, 어셈블리 언어, object 코드, machine code)로 바꾸는 데 사용된다.

- 번역 전의 파일을 소스코드 또는 원시코드라고 부르고, 번역 후의 파일을 목적코드라고 부른다.

 

🤔 설명대로라면 마치 원시코드는 고급 언어로만 쓰여진 파일을 지칭하는 것 같이 보인다.

그런데 검색을 해보았을 때, 원시 코드는 프로그래밍 언어로 작성된 텍스트 파일이라고 했다. 프로그래밍 언어는 고급언어와 저급 언어가 있으므로 저급언어로 작성된 코드도 포함될텐데... 잘못 검색한건가? 싶었다.

 

⚡설명만 읽었다면 [원시코드 = 고급언어로만 쓰여진 파일 지칭] 라고 이해할 수도 있다. 하지만 그게 아니다.

원시코드는 고급언어와 저급언어를 둘 다 포함하는 개념인 "프로그래밍 언어"로 쓰여진 파일을 지칭하는 게 맞다.

컴파일 이전 파일이 고급 언어로 작성되어 있으므로 원시코드라고 부를 수 있는 것이다. 

 

원시 코드(=소스코드)

- 프로그래밍 언어로 작성된 텍스트 파일 

- 일반적으로 고급 언어로 작성된 텍스트를 말한다.

 

자바 바이트 코드

자바 가상 머신이 이해할 수 있는 언어로 변환된 자바 소스 코드를 의미합니다.

자바 컴파일러에 의해 변환되는 코드의 명령어 크기가 1바이트라서 자바 바이트 코드라고 불리고 있습니다.

이러한 자바 바이트 코드의 확장자는 .class입니다.

 

출처_ TCP School

 

Instruction 

- opcode + operand

 

기계어

- CPU의 종류에 따라서 서로 다른 코드를 갖게 된다.

- 이진수로 이루어져 있음

 

어셈블리어

- 연산자(opcode)와 피연산자(operand)로 이루어진 명령어를 사람이 알아보기 쉬운 언어로 일대일 매핑 시킨 것

- 기계어보다 이해하기 쉽고 더 추상적이다.

- 고급언어보다 이해하기 어렵고 덜 추상적이다.

- CPU의 종류에 따라 어셈블리어도 달라진다. 기계어가 CPU의 종류에 따라 달라지기 때문이다.

 

예시 

mov al, 061h

mov와 같은 명령어는 니모닉 기호라고 부른다.

어셈블러

- 어셈블리어로 작성된 파일을 기계어 파일로 바꿈

 

 

 

reference

https://hi-guten-tag.tistory.com/224

 

[컴퓨터 구조] Assembly Language (컴퓨터의 언어 - 어셈블리어)

앞의 글을 읽으시면 이해에 도움이 됩니다. 2022.09.23 - [Computer Science/컴퓨터 구조] - [컴퓨터 구조] Introduction to Computre Architecture (컴퓨터 구조의 소개) [컴퓨터 구조] Introduction to Computer Architecture (컴

hi-guten-tag.tistory.com

 

 

 

 

 

 

 

 

 

 

 

 

'JAVA' 카테고리의 다른 글

변수  (0) 2024.11.12
오버라이딩  (0) 2024.07.03
Optional  (0) 2023.08.03
abstract class  (0) 2023.07.10
  1. JVM
  2. 더 알아보기
  3. reference
'JAVA' 카테고리의 다른 글
  • 변수
  • 오버라이딩
  • Optional
  • abstract class
용쓰개
용쓰개
  • 용쓰개
    용쓰게
    용쓰개
  • 전체
    오늘
    어제
    • 분류 전체보기 (34)
      • Spring (8)
        • 스프링 Data JPA (0)
        • 스프링 시큐리티 (1)
        • QueryDSL (1)
        • webflux (1)
      • JAVA (5)
      • 여러가지 모르는 지식들 (6)
      • 알고리즘 (0)
      • 후기 (0)
        • 일상 (1)
        • 책 (1)
      • 운영체제 (1)
      • 트러블슈팅 (9)
      • 프로젝트 (0)
        • 펫동네 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
용쓰개
JVM

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

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

블로그 게시글

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

모든 영역

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

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