Java 컴파일러와 JVM은 어떤 언어로 작성됩니까?


196

Java 컴파일러 ( javac), 가상 머신 (JVM) 및 java스타터 는 어떤 언어로 작성됩니까?


23
나는 자바에 대해 작업하고 있으므로 언어에 대해 알고 싶다 ... :)
Rahul Garg

26
U가 20 년 동안 어떤 기술을 연구 해 왔으며 면접관이 작성한 언어 나 작동 방식을 물어 보면 신경 쓰지 않는다고 말할 수 있습니다. 언어를 정말 이해합니다
Rahul Garg

22
그리고 더 이상 나는 지식이 결코 낭비되지 않는다고 생각합니다. 그래서 무언가를 아는 것은 시간 낭비가 아닙니다.
Rahul Garg

1
... 기계 엔지니어 또는 레이스 드라이버 (은유를 늘리기 위해)
Epaga

2
@paxdiablo가 차를 운전하는 것은 당신이하는 일이지만 직업이 아닙니다. 경주 용 자동차 운전자는 엔진 작동 방식을 신경 쓸 수 있습니다. 나는 그들이 모두 걱정한다고 말하지는 않는다. 그러나 만약 경주 용 자동차 운전자가 엔진에서 어떻게 작동하는지에 대해 더 많이 알고 싶었다면, 그것이 합리적이지 않다고 생각하겠습니까?
JD Isaacks

답변:


172

질문의 정확한 문구는 약간 오해의 소지 가 있습니다. 여러 JVM 공급 업체 (jrockit는 하나, IBM은 다른 것) 가 있으므로 " JVM" 또는 "컴파일러" 가 아닙니다. 여러 컴파일러 .

  • 썬 JVM이 되어 작성 C은 당신의 컴퓨터에서 실행으로 JVM A - 될 필요는 없다, 플랫폼에 따라 실행 따라서 원래 어떤 언어로 작성되었습니다. 예를 들어, 원래 IBM JVM은 Smalltalk 로 작성되었습니다.

  • Java 라이브러리 ( java.langjava.util종종 Java API 라고도 함 )는 자체로 Java native로 작성되지만 C또는 로 표시된 메소드 는 또는 로 작성되었습니다 C++.

  • Sun에서 제공하는 Java 컴파일러도 Java로 작성되었다고 생각합니다. (다시 말하지만, 거기에는 여러 개의 컴파일러가 있습니다)


JVM을 시작하는 데 사용하는 프로그램 인 "java"를 의미한다고 생각합니다.
Stephen C

1
사실은, Sun의 JRE에있는 하나의 라이브러리는 NetRexx로 작성되었습니다. (그것은 BigInteger, BigNum 또는 BigDecimal과 같은 임의의 정밀 수학 라이브러리 중 하나입니다. 어느 것을 잊어 버렸습니다.) 이론적으로 Java 프로그램이 표현할 수있는 표현으로 컴파일 할 수있는 한 모든 언어를 사용하여 JRE를 구현할 수 있습니다 이해하다.
Jörg W Mittag

18
C로 작성된 Sun JVM에 대한 참조를 제공하십시오.
Mohamed Bana

8
핫스팟 JVM은 C ++로 작성되었습니다 -www2.research.att.com/~bs/applications.html
devdimi

5
@devdimi 링크가 끊어졌으며 현재 stroustrup.com/applications.html
flup

81

최초의 Java 컴파일러는 Sun Microsystems에서 개발했으며 C ++의 일부 라이브러리를 사용하여 C로 작성되었습니다. 오늘날 Java 컴파일러는 Java로 작성되고 JRE는 C로 작성됩니다.

Java 컴파일러가 다음과 같이 Java로 작성된 방법을 상상할 수 있습니다.

Java 컴파일러는 Java 프로그램으로 작성된 다음 C (첫 번째 Java 컴파일러)로 작성된 Java 컴파일러로 컴파일됩니다. 따라서 새로 컴파일 된 Java 컴파일러 (Java로 작성)를 사용하여 Java 프로그램을 컴파일 할 수 있습니다.


32
Java로 Java 컴파일러를 작성하는 방법을 설명하는 +1 :)
Eduard Luca

2
보다 기본적인 컴파일러에서 코드를 컴파일하여 새로운 컴파일러로 "업그레이드"하는 과정을 "부트 스트랩 (bootstrapping)"이라고합니다. YouTube의 Computerphile는 이것과 "T 다이어그램"에 관한 좋은 비디오를 가지고 있습니다
iono

그것은 닭고기와 계란 문제에 대해서도 답변합니까 :)
Skynet

@Skynet 자체 호스팅 치킨
sportzpikachu

65

에서 자바 문서

컴파일러는 Java로 작성되고 런타임은 ANSI C로 작성됩니다.


1
Sun Microsystems가 개발 한 최초의 Java 컴파일러는 C ++ en.wikipedia.org/wiki/Java_compiler의
Rahul Garg

4
이것은 실제로 오히려 오래된 문서입니다 (사물로 10 년 이상). 예를 들어, 약 5 년 동안 사실이 아닌 "자바 바이트 코드는 기본 기계 명령어 (통역 됨)로 즉시 변환되어 어디에도 저장되지 않습니다"라고 표시 되어 있습니다!
oxbow_lakes

2
글쎄, 언제부터 문서가 실제로 최신 상태 였는가? :)
Esko

글쎄-대답은 실제로 정확하지 않습니다. Sun JVM은 C로 작성되고 Sun Java 컴파일러는 Java로 작성됩니다. 첫 번째 IBM JVM은 Smalltalk로 작성되었습니다.
oxbow_lakes

8
Java를 컴파일하는 것은 무엇입니까? 자바. 글쎄, Java를 어떻게 얻습니까? 컴파일하십시오. 응?


9

이 링크 는 귀하의 질문에 답변해야합니다

컴파일러는 이제 Java로 작성되었지만 런타임은 ANSI C로 작성되었습니다.


8

원칙적으로 거의 모든 것, 일반적으로 C


3

연구 목적으로 광범위하게 사용되는 자체 호스팅 JVM 인 Jikes RVM 은 Java로 작성됩니다. 사람들이 데스크톱에서 실행하는 사람은 아니지만 "지금은 언어의 일반적인 힘을 보여 드리겠습니다."라는 목록에 있습니다.


그것은의 거북이 모든 방법을 아래로 ? 마이크로 커널이 있습니까? 그렇다면 어떤 언어로 쓰여 있습니까?
Raedwald

3

Sun에서 제공하는 iirc 인 Hotspot JVM에 대해 이야기하고 있다고 가정하면 C ++로 작성됩니다. Java 용 다양한 가상 머신에 대한 자세한 정보는이 링크를 확인 하십시오 . 대부분의 Java 컴파일러와 마찬가지로 javac 는 Java로 작성됩니다.


0
  • Java가 Sun Microsystem에 의해 도입되면 Java 컴파일러는 C ++의 일부 라이브러리를 사용하여 C로 작성되었습니다.
  • 컴파일러 디자인에는 Bootstapping이라는 개념이 있으므로 대부분 컴파일러 개발에 사용되며 Bootstrapping 은 컴파일하려는 소스 프로그래밍 언어로 컴파일러 (또는 어셈블러)를 작성하는 프로세스입니다. 자체 호스팅 컴파일러를 생성하는 데 사용됩니다. 새로운 프로그래밍 언어를위한 컴파일러의 개발은 먼저 기존 언어로 개발 된 후 새로운 언어로 다시 작성되고 자체적으로 컴파일됩니다. 이것이 오늘날 Java 컴파일러가 Java 자체로 작성된 이유입니다 .
  • Java 가상 머신 : Java 가상 머신은 추상 머신입니다. 실제 컴퓨팅 머신과 마찬가지로 명령 세트가 있으며 런타임의 다양한 메모리 영역을 조작합니다. 일반적으로 JVM은 바이트 코드를 머신 코드로 해석합니다.

(자세한 내용은이 링크를 확인할 수 있습니다 : https://docs.oracle.com/javase/specs/jvms/se7/html/ )

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.