태그 보관물: jvm

jvm

Java / JVM 내부 접근 [폐쇄]

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

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



답변

몇 년 전에 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 기사 가 나타났습니다 . 좋은 소개인지 모르겠습니다. 마크 앤 스윕 및 세대 가비지 수집기에 대해 이미 알고 있다고 가정합니다. 그렇지 않다면, 먼저 그 내용을 읽으십시오.


답변

몇 가지 추가 아이디어 :

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

답변

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

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


답변

다른 사람들이 말한 것 외에도 Java Performance Tuning 페이지를 확인 하십시오. 가비지 수집 및 성능 조정에 대한 많은 기사가 일반적으로 포함되어 있습니다. 또한 흥미로운 성능 조정 서적 목록 도 포함되어 있습니다.


답변