Tiếp cận các phần tử Java / JVM [đã đóng]


15

Tôi đã lập trình bằng Java được khoảng 8 năm và tôi biết ngôn ngữ này khá tốt với tư cách là một nhà phát triển, nhưng mục tiêu của tôi là đào sâu kiến ​​thức về các phần bên trong. Tôi đã tham gia các khóa học đại học về thiết kế PL, nhưng chúng là những tổng quan học thuật rất rộng (trong Đề án, IIRC).

Ai đó có thể đề xuất một tuyến đường để bắt đầu đi sâu vào chi tiết? Cụ thể, có những chủ đề cụ thể (giả sử, bộ sưu tập rác) có thể dễ tiếp cận hơn hoặc là điểm khởi đầu tốt? Có một cuốn sách cấp cao đàng hoàng về các phần bên trong của JVM và thiết kế ngôn ngữ lập trình Java không? Cách tiếp cận hiện tại của tôi sẽ bắt đầu với thông số và nghiên cứu JVM khi cần thiết.


2
Cách tiếp cận cá nhân của tôi sẽ là (và là) để tìm ra lý do thực sự cho tất cả các trường hợp "tại sao chính xác nó hoạt động như thế này" trong Java. Làm thế nào là tự động đấm bốc được định nghĩa, làm thế nào để loại chung hoạt động. Thế còn var-args thì sao? Không những gì SUPERcờ trong các tập tin lớp học thực sự làm gì? Hầu hết điều đó được mô tả trong chính đặc tả JVM, nhưng nó đòi hỏi một số công việc để đưa nó ra khỏi đó và vào não của bạn ;-)
Joachim Sauer

Câu trả lời:


13

Tôi đã làm một chút về điều này khi tôi bắt đầu với Java, nhiều năm trước. Cách tiếp cận của tôi là đọc thông số VM và xem kết quả đầu ra của javap -c, hiển thị mã byte được phân tách của một lớp. Tôi cũng đã thử tạo các lớp java với mã byte cụ thể, bằng cách sử dụng trình biên dịch mã byte java. Có một trình biên dịch được gọi là jasmin , nếu bạn muốn thử điều đó.

Bạn cũng có thể muốn xem tài liệu Dịch thuật biểu hiện Lambda mà Brian Goetz của Oracle đã đăng, bao gồm chiến lược sẽ được sử dụng để dịch lambdas (về cơ bản là đóng) đang được thêm vào trong Java 8.

Bạn cũng có thể lấy mã nguồn cho Hotspot VM từ OpenJDK và phiên bản truy cập sớm của trình biên dịch javac có hỗ trợ lambda (kho lưu trữ hg) cho JDK 8, nếu bạn thực sự cảm thấy muốn lặn xuống đáy sâu của hồ bơi.

Nhìn vào bộ sưu tập rác có lẽ là một ý tưởng tốt. Một tìm kiếm nhanh đã đưa ra bài viết này của Tiến sĩ Dobbs về GC đầu tiên của Java. Tôi không biết nếu đó là một giới thiệu tốt. Tôi giả sử bạn đã biết về những người thu gom rác đánh dấu và quét thế hệ; nếu không, bạn sẽ muốn đọc lên những cái đó trước.


3

Một số ý tưởng bổ sung:

  • Tham gia vào dự án OpenJDK . Không có gì đánh bại sự hiểu biết bên trong của một số phần mềm bằng cách hack nó!
  • Hãy xem cách các ngôn ngữ JVM khác (ví dụ Clojure hoặc Scala) tạo mã cho JVM
  • Thực hiện một dự án nhỏ mà bạn quan tâm và yêu cầu sử dụng các phần tử JVM. Có lẽ sử dụng một cái gì đó như ASM để thao tác mã byte ..

2

Nếu bạn chưa quen với định dạng mã byte Java, thì hãy xem xét việc viết một trình biên dịch nhỏ tạo mã byte Java hợp lệ (hoặc trình biên dịch Jasmin) và làm cho nó chạy chính xác.

Xem "Hello World" hoặc "4" (đã cho 2 + 2) được tạo bởi mã của bạn là rất thỏa mãn.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.