2013-07-11 5 views
1

grepcode와 같은 곳에서 Java의 "소스 코드"를 볼 수 있지만 Java가 위에 빌드 된 C 코드를 볼 수있는 방법을 찾고 있습니다. 나는이 질문이 여러 번 물어 봤음에 틀림 없다고 생각하지만 나는 만족스러운 대답을 찾을 수 없었다.Java 코드의 C 코드를 볼 수있는 방법이 있습니까?

이것은 명백한 목적을위한 것이 아닙니다. 프로그래밍 언어가 어떻게 "더"구축되었는지 이해하고 싶습니다.

또한 생성 된 바이트 코드를 보는 방법을 보여줄 수 있다면 아마도 도움이 될 것입니다.

+0

내가 자바 6 또는 Java 7에 대해 알고하지 않습니다,하지만 자바 (8) 내 JDK 1.7에서 발견 한 오픈 소스 – MadProgrammer

+0

입니다. 내 Windows의 0_21 폴더에 src.zip 파일이 설치되어 있습니다. 그 안에는 호기심 (특히 java.c와 main.c)을 해결할 수있는 .c 및 .h 파일이있는 * 실행 프로그램 * 폴더가 있습니다. –

+1

그 파일들은 JVM 라이브러리를 둘러싼 단순한 래퍼 일뿐입니다. JVM의 소스는 다른 곳에서 얻을 수 있습니다. –

답변

5

오라클의 공식 JDK 7은 해당 링크에서 다운로드 할 수있는 the OpenJDK project의 코드를 기반으로합니다. 또한 동일한 사이트에서 사용할 수있는 JDK 8 지점이 있습니다.

JVM (Java Virtual Machine)은 *.class 파일을 실행하는 일종의 가상 컴퓨터입니다. 대부분의 경우 JVM은 인데은 실제 컴퓨터에서 실행되는 다른 언어 (C++ 등)로 작성된 프로그램에 의해 에뮬레이트됩니다. Windows 컴퓨터에서 Java 프로그램을 실행하면 (예 : java.exe) 주로 C++로 작성되고, JVM으로 가장하며, *.class 파일을 실행합니다. 자바 코드는

++i; 

같은 JVM 연산 코드에 (이 자바로 작성된 것입니다!) 자바 컴파일러에 의해 번역됩니다 같은

iinc 0 1 

JVM이 코드 (C++로 작성된, 또는 어셈블리) 처리 할 수있는이 포함되어 그 명령과 수백 가지의 추가 명령을 실제 기계 언어의 opcode처럼 사용합니다. 사실, 실제로는 더 복잡합니다. 모든 현대 JVM은 실행중인 동안 해당 JVM opcode를 플랫폼 특정 기계 코드로 변환하지만, 해당 변환을 수행하는 코드는 물론 C++와 같은 원시 (Java 이외의) 언어로 작성됩니다. 또는 어셈블리.

잘이 물건 설명 인터 웹에 대한 기사가 많이 있습니다 here's a nice one.

+0

Java가 C로 작성된 것입니까? 아니면 그냥 자바 -> 바이트 코드 -> 프로세서 레벨로 간다 ... 나는 분명히 여기 깊이 내고있다. 그러나 진행중인 일에 대한 "큰 그림"을주는 온라인 소스를 찾기 란 놀랍지 않다.아마 내가 주제를 벗어난 것처럼 보이지만 Java가 C (또는 C++)로 작성되지 않은 경우 아마도 내 질문은 논리적이지 않을 수 있습니다. –

+1

나는 더 많은 것을 배울 수있는 부분에 대해 약간의 자료와 좋은 포인터를 추가했다. –

+2

@Chris : 표준 JVM 인 핫스팟은 C/C++ (대부분 C++)로 작성되었습니다. 그러나 원하는 언어 (예 : Java)로 VM을 작성할 수 있습니다. – Antimony

관련 문제