일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 컴파일에러
- RAM
- 아이패드거치대
- yml파일
- 알리익스프레스
- 오산 회전초밥
- Please enter a commit message to explain why this merge is necessary
- 컴파일타임
- 형제초밥
- 런타임에러
- 정적할당
- git오류
- git pull
- yml유효성
- 동적할당
- 가비지컬렉터
- 1490원
- aliexpress
- 오산초밥
- 오산공영주차장
- 오산주차장
- 바이트코드
- java.lang.IllegalStateException: Ambiguous mapping found. Cannot map 'homeController' bean method
- 병목현상
- Java
- 기계어
- 타코와사비
- 육회초밥
- 바이너리코드
- 컴파일
- Today
- Total
개발 & 일상
바이트 코드와 바이너리코드 & 기계어 본문
사람이 이해할 수 있는 high-level language
x = 10 + 2
y = x + 4
기계가 이해할 수 있는 low-level language (binary/machine code)
001001 11101 11101 1111111111111000
001000 00001 00000 0000000000001010
001000 00001 00001 0000000000000010
101011 11101 00001 0000000000000000
001000 00010 00001 0000000000000100
101011 11101 00010 0000000000000100
001001 11101 11101 0000000000001000
이 둘을 쉽게 정의하기 위해 생각해야 할 것이 있다.
프로그램을 실행하는 것은 컴퓨터가 한다.
즉, 프로그램은 컴퓨터가 이해할 수 있는 형태로 작성되어 있어야 한다.
바이너리 코드란?
바이너리 코드는 컴퓨터가 인식할 수 있는 0과 1로 구성된 이진코드를 의미함
바이너리 코드(binary code)의 영어 뜻을 해석해보면
'binary'는 '둘의', '이진법의'라는 뜻이다.
컴퓨터는 모든 정보를 '0'과 '1' 두 숫자만을 이용하여 인식한다.
그렇기 때문에 컴퓨터가 인식할 수 있는 0과 1로만 구성된 코드를 '바이너리 코드'라고 말한다.
기계어란?
- 0과 1로 이루어진 바이너리 코드
- 기계어가 이진코드로 이루어졌을 뿐이지 모든 이진코드가 기계어인 것은 아닙니다. 즉, 바이너리 코드 != 기계어
- 기계어는 특정한 언어가 아닙니다.
다진 CPU 제조사에서 CPU를 만들 때 해당 CPU에서 사용하는 명령어 집합을 공개하는데, 이것을 '기계어'라고 부를 뿐입니다.
때문에 CPU가 변경되면 기계어가 달라집니다.
같은 동작을 하는 명령어지만 완전히 다른 0과 1의 나열이 될 수 있다는 말입니다.
- 아주 기본적인 연산자들은 서로 호환되는 편입니다.
- 같은 회사의 CPU라도 버전 별로 다른 명령을 포함할 수 있으며 다른 회사라도 같은 명령어 집합을 공유할 수 도 있습니다.
바이트 코드란?
- CPU가 이해할 수 있는 언어가 바이너리 코드라면 바이트 코드는 VM(Virtual Machine, 가상머신)이 이해할 수 있는 언어입니다.
✓ 가상 머신이란? JVM(Java Virtual Machine)이라고 불리며 'virtual'은 '가상의'라는 뜻이다.
어느 환경(맥, 윈도우, 리눅스)에 상관없이 자바 프로그램을 실행할 수 있도록 도와주는 프로그램이다.
- CPU가 아닌 가상 머신에서 이해할 수 있는 코드를 위한 이진 표현볍입니다.
즉, 가상 머신이 이해 할 수 있는 0과 1로 구성된 이진 코드를 의미합니다.
- 어떤 플랫폼에도 종속되지 않고 실행될 수 있는 가산 머신용 기계어 코드입니다.
- 고급언어로 작성된 소스코드를 가상 머신이 이해할 수 있는 중간 코드로 컴파일한 것을 말합니다.
Ex) 자바 소스파일(고급언어) -> 자바 컴파일러 -> 목적파일(JVM이 이해할 수 있는 바이트 코드로 이루어져있습니다.)
- 바이트 코드는 다시 실시간 번역기 또는 저스트 인 타임(Just-In-Time, JIT) 컴파일러에 의해 바이너리 코드로 변환됩니다.
- CPU가 텍스트를 이해하지 못하듯이 가상 머신 또한 텍스트를 이해하지 못합니다.
- JAVA의 가상 머신은 JVM이라고 하며 JVM을 위한 바이트 코드를 "자바 바이트 코드" 라고 합니다.
바이트 코드(Byte code)의 영어 뜻에서 유추해볼 수 있듯이
자바 컴파일러에 의해 변환되는 코드의 명령어 크기가 1바이트이기 때문에 바이트 코드라 불린다.
자바 바이트 코드의 확장자는 '. class'이다.
자바 바이트 코드는 JVM만 설치되어 있다면 어떤 OS든 실행될 수 있다.
✓ OS란? Operating System의 약자로 컴퓨터 시스템의 자원들을 효율적으로 관리하며 사용자가 컴퓨터를 편리하고, 효과적으로 사용할 수 있도록 환경을 제공하는 여러 프로그램들이다.
✓ OS의 종류 : WIndows 98, Windows10, UNIX, LINUX, MS-DOS 등이 있다.
'💻 개발공부 > 😈 개발지식' 카테고리의 다른 글
RAM 이란?? && S RAM vs D RAM (0) | 2023.01.16 |
---|---|
빌드(Build)란? (1) | 2023.01.14 |
컴파일(Compile)이란? (0) | 2023.01.14 |
Java 의 정적할당(static) / 동적할당(dynamic) (0) | 2023.01.14 |
런타임(Run Time) 이란? & 컴파일타임 (1) | 2023.01.14 |