Java / JVM 내부 접근 [폐쇄]


15

저는 약 8 년 동안 Java로 프로그래밍했으며 개발자로서 언어를 잘 알고 있지만 내부 목표에 대한 지식을 심화시키는 것이 목표입니다. 나는 PL 디자인에서 학사 과정을 수강했지만 매우 광범위한 학업 개요 (IIRC의 Scheme에서)였습니다.

누군가 세부 사항을 조사하기 시작할 경로를 제안 할 수 있습니까? 특히, 접근하기 쉽고 좋은 출발점이 될 수있는 특정 주제 (가비지 수집)가 있습니까? JVM 내부 및 Java 프로그래밍 언어 설계에 대한 적절한 고급 책이 있습니까? 내 현재 접근 방식은 JVM 사양 으로 시작하고 필요에 따라 연구하는 것입니다.


2
내 개인적인 접근 방식은 Java에서 "이와 같이 정확히 작동하는 이유"가 거의없는 실제 이유 를 찾는 것 입니다. 자동 복싱은 어떻게 정의되고 일반 유형은 어떻게 작동합니까? var-args는 어떻습니까? SUPER클래스 파일 의 플래그는 실제로 무엇을합니까? 그것의 대부분은 JVM 스펙 자체에 설명되어 있지만, 그것을 밖으로 그리고 당신의 두뇌로 가져 오기 위해 약간의 작업이 필요합니다 ;-)
Joachim Sauer

답변:


13

몇 년 전에 Java를 시작할 때 약간의 작업을 수행했습니다. 내 접근법은 VM spec 을 읽고 클래스의 디스 어셈블 된 바이트 코드를 표시하는 javap -c의 출력을 보는 것입니다. 또한 Java 바이트 코드 어셈블러를 사용하여 특정 바이트 코드로 Java 클래스를 만들려고했습니다. 시도하고 싶다면 jasmin 이라는 어셈블러 가 있습니다.

또한 Oracle 8의 Brian Goetz가 게시 한 Lambda Expression Translation 문서 를 참조하십시오. 여기에는 Java 8에 추가되는 람다 (클로저)를 번역하는 데 사용되는 전략이 포함됩니다.

OpenJDK 에서 Hotspot VM 의 소스 코드 JDK 8에 대한 람다 지원 (hg 저장소) 이있는 javac 컴파일러 의 초기 액세스 버전 을 얻을 수도 있습니다.

가비지 콜렉션을 살펴 보는 것이 좋습니다. 빠른 검색으로 Java의 쓰레기 우선 GC에 관한 Dr. Dobbs 기사 가 나타났습니다 . 좋은 소개인지 모르겠습니다. 마크 앤 스윕 및 세대 가비지 수집기에 대해 이미 알고 있다고 가정합니다. 그렇지 않다면, 먼저 그 내용을 읽으십시오.


3

몇 가지 추가 아이디어 :

  • OpenJDK 프로젝트에 참여하십시오 . 해킹하여 일부 소프트웨어의 내부를 이해하는 것보다 더 좋은 것은 없습니다!
  • 다른 JVM 언어 (예 : Clojure 또는 Scala)가 JVM에 대한 코드를 생성 하는 방법을보십시오.
  • 관심이 있고 JVM 내부를 사용해야 하는 미니 프로젝트 를 수행하십시오. 아마도 ASM 과 같은 것을 사용하여 바이트 코드를 조작 할 수 있습니다.

2

Java 바이트 코드 형식에 익숙하지 않은 경우 유효한 Java 바이트 코드 (또는 Jasmin 어셈블러)를 작성하고 올바르게 실행하는 작은 컴파일러 작성을 고려하십시오.

코드에서 생성 된 "Hello World"또는 "4"(2 + 2 제공)를 보는 것이 매우 만족 스럽습니다.


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