Tối ưu hóa dựa trên phân tích thoát là tính năng được lên kế hoạch cho Proguard. Trong thời gian chờ đợi, có bất kỳ công cụ hiện có nào như proguard đã thực hiện tối ưu hóa yêu cầu phân tích thoát không?Trình tối ưu hóa bytecode tĩnh java (như proguard) với phân tích thoát?
Trả lời
Có, tôi nghĩ rằng Soot framework thực hiện phân tích thoát.
Làm thế nào để bạn cấu hình muội để làm tối ưu hóa toàn bộ chương trình (chẳng hạn như phân tích thoát), trên các ứng dụng Android? Nó xuất hiện khuôn khổ chỉ đơn giản giả định bạn có một chức năng chính và xây dựng cây gọi từ đó, nhưng các ứng dụng Android không có chức năng chính.Proguard cho phép bạn giữ nhiều lớp, sao cho mỗi phương thức trong lớp trở thành một "root" mới trong phân tích cây cuộc gọi để tối ưu hóa toàn bộ chương trình. Tôi không thể tìm thấy một lựa chọn tương tự cho bồ hóng. –
Sẽ đánh dấu đây là câu trả lời. Tôi đã mở một câu hỏi mới đặc biệt về muội và tối ưu hóa toàn bộ chương trình mà không có chức năng chính ở đây: http://stackoverflow.com/questions/3093648/how-to-use-soot-to-do-whole-program-optimizations-on- android-applications –
Bạn mong đợi điều gì từ phân tích thoát trên trình biên dịch? Các lớp Java giống như các tệp đối tượng trong C - chúng được liên kết trong JVM, do đó phân tích thoát có thể được thực hiện chỉ ở mức đơn phương, có khả năng sử dụng hạn chế và sẽ cản trở việc gỡ lỗi (ví dụ: bạn sẽ có dòng mã mà bạn không thể bước).
Trong thiết kế của Java, trình biên dịch khá câm - nó kiểm tra tính chính xác (như Lint), nhưng không cố gắng tối ưu hóa. Các mảnh thông minh được đặt trong JVM - nó sử dụng nhiều kỹ thuật tối ưu hóa để mang lại hiệu suất tốt mã trên nền tảng hiện tại, trong điều kiện hiện tại. Kể từ khi JVM biết tất cả các mã mà hiện đang được nạp nó có thể giả định nhiều hơn trình biên dịch và thực hiện tối ưu hóa đầu cơ được hoàn nguyên vào thời điểm các giả định bị vô hiệu. HotSpot JVM có thể thay thế mã bằng phiên bản được tối ưu hóa nhanh hơn khi chức năng đang chạy (ví dụ: ở giữa vòng lặp khi mã được 'nóng').
Khi không có trong trình gỡ lỗi, các biến có thời gian tồn tại không chồng chéo được thu gọn, các biến thể được thoát ra khỏi vòng lặp, vòng lặp chưa được kiểm soát, v.v. Tất cả điều này xảy ra trong mã JIT-ted và được thực hiện tùy thuộc vào thời gian trong chức năng này (nó không có ý nghĩa nhiều để dành thời gian tối ưu hóa mã mà không bao giờ chạy). Nếu chúng tôi thực hiện một số các tối ưu hóa này, thì JIT sẽ có ít tự do hơn và kết quả tổng thể có thể là số âm thuần. Tối ưu hóa khác là phân bổ các đối tượng không thoát khỏi phương pháp hiện tại - điều này được thực hiện trong một số trường hợp nhất định, mặc dù tôi đọc một bài báo ở đâu đó thời gian để thực hiện phân tích thoát nghiêm ngặt so với thời gian đạt được bằng cách tối ưu hóa. xứng đáng với nó, vì vậy chiến lược hiện tại là heuristic hơn.
Nhìn chung, JVM càng có nhiều thông tin về mã ban đầu của bạn thì càng có thể tối ưu hóa nó. Và việc tối ưu hóa JVM không ngừng cải thiện, do đó tôi sẽ nghĩ về tối ưu hóa mã được biên dịch chỉ khi nói về các JVM rất hạn chế và cơ bản như điện thoại di động. Trong những trường hợp này, bạn muốn chạy ứng dụng của bạn thông qua obfuscator anyway (để rút ngắn tên lớp, v.v.)
Tôi chỉ quan tâm đến máy ảo dalvik và tôi bị khóa vào nhắm mục tiêu nền tảng 1,5/1,6 trong ít nhất 6 tháng khác và 2,1 trong ít nhất một năm. Ngay cả khi tôi có thể nhắm mục tiêu 2.2, JIT được điều chỉnh đặc biệt để có thời gian khởi động rất nhanh và dành ít thời gian nhất có thể trong JIT, vì vậy việc tối ưu hóa đắt tiền như phân tích thoát cộng với thay thế vô hướng hoàn toàn. Điều tôi đang tìm kiếm cụ thể là một trình tối ưu hóa bytecode tĩnh có thể thực hiện thay thế vô hướng dựa trên phân tích thoát cho các đối tượng tạm thời ngắn ngủi. –
- 1. Tối ưu hóa Java: chỉ bytecode so với JIT
- 2. Android valvik vm có sử dụng tối ưu hóa phân tích thoát không?
- 3. Có trình tối ưu hóa bytecode Java nào xóa các ảnh không sử dụng được không?
- 4. Tối ưu hóa vòng lặp "tĩnh"
- 5. PHP có tích hợp trình tối ưu hóa không?
- 6. phân tích bảng, tối ưu hóa bảng, tần suất?
- 7. Phân loại bong bóng được tối ưu hóa (Java)
- 8. Java Compiler Chuỗi tối ưu hóa
- 9. Java - tối ưu hóa loại SAM
- 10. Chuỗi tối ưu hóa Java so với mảng Char
- 11. Phân tích mã Java tĩnh
- 12. Loại bỏ đăng nhập với Proguard và tối ưu hóa tập tin cấu hình Android
- 13. Phân tích thoát trong .NET CLR VM
- 14. Tối ưu hóa trình biên dịch Erlang
- 15. Sử dụng CDN với trình tối ưu hóa RequireJS
- 16. Tối ưu hóa ABAP
- 17. Trình tối ưu hóa C# và JIT làm những loại tối ưu nào?
- 18. Mã Java "sao chép" được tối ưu hóa bởi trình biên dịch JIT JVM như thế nào?
- 19. Tối ưu hóa CVPixelBufferRef
- 20. Tối ưu hóa cờ vua
- 21. Tối ưu hóa chương trình C với các công nghệ giống như SLAB
- 22. tối ưu hóa quadprog
- 23. Lỗi trình tối ưu hóa hoặc lỗi lập trình?
- 24. Trình biên dịch có tối ưu hóa thoát khỏi vòng lặp bên trong không?
- 25. Tối ưu hóa ViewState
- 26. Tối ưu hóa CALayer?
- 27. Trình biên dịch có tối ưu hóa điều này không
- 28. Tối ưu hóa jQuery
- 29. Tối ưu hóa mã BeautifulSoup (Python)
- 30. Tối ưu hóa câu lệnh chuyển đổi Java với nhiều trường hợp?
SunSpot JVM của Sun đã thoát khỏi phân tích được tích hợp từ Sun Java 6 Update 14. Bạn cần bật nó bằng '-XX: + DoEscapeAnalysis'. Xem: http://java.sun.com/javase/6/webnotes/6u14.html – Jesper
Phân tích thoát được tắt trên u18 trở lên. – gustafc
Nó cũng chỉ có sẵn trên máy chủ VM, và không có sẵn ở tất cả trên valvik val android, cũng không phải bất kỳ biến thể javaME mà tôi biết. Vấn đề là làm phân tích thoát trước thời hạn để bạn có được những lợi ích ngay cả khi nó không được kích hoạt trong VM. –