2010-11-18 49 views
10

Tôi có hồ sơ Maven cho một dự án Java được kích hoạt khi thực hiện xây dựng cuối cùng trên máy chủ Hudson CI.Tối ưu hóa trình biên dịch Java trong khi xây dựng Maven?

Hiện nay tùy biến duy nhất của hồ sơ này là trình biên dịch plugin Maven như sau:

   <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-compiler-plugin</artifactId> 
        <configuration> 
         <debug>false</debug> 
         <optimize>true</optimize> 
        </configuration> 
       </plugin> 

Có bất kỳ tinh chỉnh khác hoặc tối ưu hóa để trình biên dịch Java mà một xây dựng chính thức nên làm để tối đa hóa hiệu suất?

Trả lời

17

Giả sử rằng bạn đang chạy trên Sun (Hotspot) JVM, tất cả tối ưu hóa xảy ra trong JVM.

Vì vậy, chỉ định <optimize>true</optimize> sẽ không làm gì cả.

Và chỉ định <debug>false</debug> chỉ cần xóa các ký hiệu gỡ lỗi. Điều này sẽ làm giảm kích thước JARfile của bạn một chút, nhưng sẽ làm cho việc theo dõi vấn đề sản xuất khó khăn hơn nhiều, bởi vì bạn sẽ không có số dòng trong các dấu vết ngăn xếp của bạn.


Một điều mà tôi sẽ định là JVM thiết lập khả năng tương thích:

<source>1.6</source> 
<target>1.6</target> 
+0

Bạn đang nói rằng để lại các biểu tượng gỡ lỗi trong đó không làm tổn thương hiệu suất? Sẽ thực hiện trên các cài đặt v1.6. – HDave

+3

@HDave - thông tin gỡ lỗi được lưu trữ trong LineNumberTable và LocalVariableTable trong tệp .class (xem http://java.sun.com/docs/books/jvms/second_edition/html/ClassFile.doc.html). Trong khi điều này có thể tiêu thụ bộ nhớ bổ sung, nó là riêng biệt với bytecode, và do đó không trực tiếp ảnh hưởng đến hiệu suất thực hiện. – Anon

+0

Điều cần biết ... cảm ơn. – HDave

11

Bạn thậm chí không nên làm điều đó - tối ưu hóa trong javac đã bị vô hiệu hóa trong một thời gian, IIRC. Về cơ bản JIT chịu trách nhiệm cho hầu hết tất cả các tối ưu hóa, và tối ưu hóa javac thực sự làm tổn thương trong một số trường hợp.

Nếu bạn đang tìm kiếm để thực hiện điều chỉnh bạn nên tìm nơi khác:

  • mã thực tế của bạn
  • VM tùy chọn (ví dụ GC tuning)
+0

Tôi sẽ không khuyên bạn nên tối ưu hóa trừ khi hiệu suất là một vấn đề, đặc biệt là kể từ khi JIT thực sự rất tốt. – extraneon

+0

@extraneon: Bạn đã bỏ lỡ quan điểm của tôi - tối ưu hóa tích cực * tổn thương * hiệu suất, vì vậy về cơ bản nó đã bị xóa. –

+0

Tôi thực sự có nghĩa là tối ưu hóa mã và tối ưu hóa GC. Tối ưu hóa mã có thể dẫn đến mã ít có thể đọc được hơn và các tùy chọn GC có thể gây ngạc nhiên cho những người không hiểu rõ. – extraneon

1

Đối với maven của chúng tôi dựa build Tôi không sử dụng <debug>false</debug> thay vào đó tôi đang thiết lập các tùy chọn gỡ lỗi với <debuglevel/> cho phép một kiểm soát tốt hơn nhiều {xem tùy chọn javac -g}.

+0

Tôi đã thử cách này và có một câu hỏi tiếp theo về vấn đề này: http://stackoverflow.com/questions/4220083/ set-maven-java-compiler-debug-to-false-không-không-xóa-dòng-số-bảng – HDave

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