2010-09-29 35 views
13

Khi cố gắng tối ưu hóa C và LISP, xem xét đầu ra mã trình biên dịch của trình biên dịch có thể là một trợ giúp lớn.Làm thế nào tôi có thể kiểm tra mã bytecode JVM cho một chức năng clojure?

Clojure có lẽ biên dịch thành mã bytecode JVM sẽ hữu ích như nhau.

Tôi làm cách nào để xem?

+4

Xin lưu ý rằng việc tối ưu hóa bytecode có thể không thực sự tạo ra bất kỳ kết quả tích cực nào. Xem [cuộc phỏng vấn này] (http://java.sun.com/developer/technicalArticles/Interviews/goetz_qa.html#CodePerformsWell). Nó nói về cách viết Java, nhưng về cơ bản nó áp dụng cho tất cả các ngôn ngữ sản xuất bytecode. –

Trả lời

11

Clojure động biên dịch tất cả các mã Clojure để bytecode tại thời gian chạy. Tôi không chắc làm thế nào bạn có thể thấy bytecode được biên dịch động này. Tuy nhiên, bạn có thể làm Trước thời hạn (AOT) tự mình biên dịch mã Clojure của bạn và sẽ tạo ra các tệp .class. Sau đó, bạn có thể sử dụng javap để xem mã byte.

Sử dụng compile chức năng trong Clojure/lõi để biên dịch namespace của bạn:

biên dịch chức năng

Cách sử dụng: (biên dịch lib)

Biên dịch namespace được đặt tên bởi các lib biểu tượng thành một thiết lập của các tệp lớp. Nguồn cho thư viện lib phải nằm trong một thư mục tương đối phù hợp với classpath tương đối . Các tệp đầu ra sẽ đi vào thư mục được chỉ định bởi đường dẫn biên dịch và thư mục đó cũng phải nằm trong đường dẫn lớp.

Sau đó sử dụng javap:

javap -l -c -s -private MyClass 
+0

Ngọt ngào! Cảm ơn nhiều. –

+1

Lưu ý rằng bạn phải thoát khỏi phần mở rộng .class. Bối rối tôi trong một phút. –

3

Một số giải pháp làm bằng tay:

+1

Tôi có thể hỏi tại sao bỏ phiếu xuống? Theo như tôi biết, đây là những câu trả lời hợp lệ về cách kiểm tra bytecode của các tệp lớp được biên dịch, vì vậy chúng có liên quan đến Clojure. Có thể có một cách Clojure-y hơn, nhưng nó vẫn hoạt động tốt. Nếu điều tôi nói là sai, hãy cho tôi biết điều gì và tại sao. – haylem

+4

Tôi nghi ngờ bạn đã bị bỏ phiếu vì bạn đã nói "Google it".Đó là kiến ​​thức chung về SO rằng bất kỳ câu hỏi được hỏi và nghiêm túc nào mà chưa được hỏi về SO trước đây là một câu hỏi hay. Ý tưởng cho SO là một phần của kết quả google. – Rayne

+0

Ah. Điều đó nghe có vẻ công bằng, mặc dù tôi không có ý định làm OP xuống và ngụ ý sự lười biếng trên phần của anh ta, chỉ là nó cung cấp các câu trả lời vượt thời gian với kết quả tốt vì đây là một câu hỏi khá phổ biến đối với các ngôn ngữ JVM. Tệ của tôi, tôi sẽ làm tốt hơn lần sau. – haylem

Các vấn đề liên quan