이 포스팅은, 오라클에서 제공하는 Java 11 JVM 스펙시트 공식 문서를 영어공부할 겸 번역해본 문서입니다. 의역, 오역이 많이 있을 수 있습니다.
1.1. 역사
프로그래밍 언어인 자바는, 범용적이고, 동시적이고, 객체지향언어입니다. 자바의 문법은 C 언어와 C++과 흡사하지만, C언어와 C++을 복잡하게, 혼란스럽게, 안전하지 않게 하는 많은 기능들을 생략하였습니다. 자바 플랫폼은 초기에 네트워크로 연결된 사용자를 위한 소프트웨어를 만드는 문제를 해결하기 위해 개발되었습니다. 또한 자바는 다중 호스트 아키텍쳐와 소프트웨어 구성요소들의 안전한 전달을 지원하도록 설계되었습니다. 이런 요구사항을 위해 컴파일된 코드는 네트워크를 통해 이동하는 동안 여전히 동작해야 하고, 모든 사용자에게서 동작해야 하며 사용자가 그것이 안전하게 동작한다고 확신할 수 있어야 했습니다.
WWW(월드 와이드 웹)의 대중화는 이런 속성들을 훨씬 더 흥미롭게 만들었습니다. 웹브라우저는 수백만명의 사람들이 인터넷서핑을 하게 했고, 쉽게 대량의 미디어 콘텐츠들을 접하게 해 주었습니다. 마침내 우리가 어디서 어떤 기기를 사용하든, 빠른 네트워크에 접속하든 느린 모뎀에 접속하든 상관없이 본질적으로 동일한 시각적 청각적 경험을 하게 되었습니다.
웹의 선구자들은 웹의 HTML 문서가 제공하는 콘텐츠가 너무 제한적이라는 사실을 알아냈습니다. forms 와 같은 html의 확장은 사용자가 원하는 기능을 모두 담은 웹 브라우저는 존재하지 않다는 것을 확실하게 하면서 HTML이 제공하는 콘텐츠가 너무 제한적이라는 것을 강조하기만 할 뿐이였습니다.
HotJava 브라우저는 HTML 페이지 내에서 동작하는 프로그램을 포함할 수 있게 하여 자바와 자바 플랫폼의 흥미로운 점을 선보인 최초의 사례입니다. 프로그램은 브라우저를 통해 HTML이 보여짐과 동시에 투명하게 다운받아집니다. 브라우저에게 수락되기 전에 프로그램이 안전한지 신중하게 검사합니다. HTML 페이지처럼 컴파일된 프로그램은 네트워크와 호스트 독립적입니다. 프로그램은 프로그램이 어디서 왔든, 어떤 종류의 기기에서 실행되는지에 상관 없이 같은 동작을 보장합니다.
자바 플랫폼을 통합한 브라우저는 더이상 이미 정해진 기능만을 제공하는 것으로 제한되지 않습니다(역자 첨언 : 현재의 브라우저처럼 동적인 동작을 할 수 있음을 말함). 동적인 콘텐츠가 포함된 웹 페이지를 방문하는 사람들은 콘텐츠가 자신들의 기기에 피해를 주지 않는다는 것을 확신할 수 있습니다. 프로그래머는 프로그램을 한번만 작성하여 자바 런타임 환경을 지원하는 어떤 기기에서도 실행되게 할 수 있습니다.
1.2. 자바 가상머신
자바 가상머신은 자바 플랫폼의 기초이다. 자바 가상머신은 하드웨어, 운영체제 독립성, 작은 크기의 컴파일된 코드, 악성프로그램으로부터 사용자를 보호하는 역할을 맡은 요소입니다.
자바 가상머신은 추상 컴퓨팅 기계입니다. 실제 컴퓨팅 기계처럼 가상머신은 자신의 명령어 세트를 가지며 자신의 다양한 메모리 영역을 실행시간에 관리합니다.
Sun Microsystems에서 구현한 JVM의 첫번째 프로토타입은 현대의 PDA와 비슷한 기기에서 호스팅되도록 구현되었습니다. 현재 오라클에서 구현하는 JVM은 모바일기기, 데스크탑, 서버 기기에서 실행되도록 구현되지만, JVM은 특정한 구현 기술이나 호스트 하드웨어, 운영체제를 가정하지 않습니다. 뇌절이긴 하지만, JVM은 실리콘 칩으로 구현할 수 도 있습니다.
JVM은 자바 프로그래밍 언어에 대해선 아무것도 모르고 단지 class 파일 형식만 알고 있습니다. class 파일은 JVM 명령어(혹은 바이트코드), 심볼 테이블및 기타 보조정보 를 포함합니다.
보안때문에 JVM은 class 파일 내의 코드에 엄격한 타입제한과 구조 제약을 부여합니다. 하지만, 유효한 class파일로 표현할 수 있는 기능을 가진 언어라면 모두 JVM에 의해 동작할 수 있습니다(코틀린 같이). JVM의 플랫폼 독립적인 속성에 매료된 다른 언어 개발자는, 그들의 언어가 JVM에서 동작하게 할 수 있습니다.
이곳에 적힌 JVM은 Java SE 11 플랫폼과 호환되고, Java SE 11 에서 정해진 Java 프로그래밍 언어를 지원합니다.
1.3. 공식문서의 목차
챕터 2에선 JVM 아키텍쳐에 대한 개요를 말한다.
챕터 3에선 자바 코드가 JVM 명령어 세트로 컴파일되는 것을 소개한다.
챕터 4에선 하드웨어, 운영체제 독립적인 바이너리 포맷인 class 파일 포맷에 대해 설명한다.
챕터 5에선 JVM의 시작과 로딩, 링킹, 그리고 클래스와 인터페이스의 초기화 과정을 설명한다.
챕터 6에선 JVM의 명령어 세트 사양을 다룬다. opcode의 니모닉을 알파벳 순서로 표시한다. (니모닉 : 기계어로된 일련의 숫자를 알아보기 쉽게 영단어로 바꿔준 것)
챕터 7에선 JVM의 opcode 니모닉 테이블을 제공한다.
JVM 스펙시트 2판에서와 달리 JVM의 스펙시트 설명을 위해 필요한 자바 프로그래밍 언어에 대한 것은 해당 문서 참조를 제공합니다.
'개발영어공부' 카테고리의 다른 글
[Spring 공식문서 번역 프로젝트]Spring Web MVC (1.1.9) (0) | 2022.05.22 |
---|---|
[Spring 공식문서 번역 프로젝트]Spring Web MVC (1.1.5 ~1.1.8) (0) | 2022.05.08 |
[Spring 공식문서 번역 프로젝트] Spring Web MVC (~1.1.4) (0) | 2022.04.07 |