2012-08-16 27 views
5

Tôi quan tâm để biết nếu có tồn tại một cách tiếp cận có mã phương thức java làm đầu vào và xác định hàm chi phí của mã đó (số vòng lặp, ifs/elses, I/Os và những thứ phổ biến khác). Tôi có nghĩa là không chính xác chi phí trong ms nhưng một số chi phí chung mà mã này có thể gây ra. Điều là tôi muốn có thể cho phương pháp tùy ý mà người dùng viết để nói những gì có thể là chi phí của phương pháp như vậy (tất nhiên không tính đến một số tính năng cụ thể như JVM, vv).Có cách nào để xác định hàm chi phí chung của một phương thức java tùy ý?

+1

Câu hỏi này đề cập đến vấn đề sâu trong phân tích tĩnh và nói chung các giải pháp sẽ gần đúng đến mức chúng có thể không thực sự hoạt động đối với trường hợp bạn quan tâm (đọc, phân tích tĩnh là khó). Nếu bạn cung cấp thêm một chút thông tin về * lý do tại sao * bạn muốn điều này, bạn có thể có được nhiều câu trả lời tinh tế hơn cho các công cụ bạn có thể sử dụng. –

+0

Nhiều thuật toán siêu mát mẻ đòi hỏi kỹ thuật khá phức tạp để chứng minh sự phức tạp tiệm cận của chúng. Làm nó từ mã một mình là cho tất cả các mục đích thực tế không thể. –

Trả lời

5

Tôi không biết nếu một công cụ như vậy tồn tại, nhưng tôi nghi ngờ cả về tính khả thi của nó và khả năng sử dụng của nó:

  • Đối với tính khả thi của một công cụ như vậy trong trường hợp chung có một cái nhìn tại Halting problem, mà là một phần quan trọng trong những gì bạn đang yêu cầu và đã được chứng minh là undecidable.

  • Vì khả năng sử dụng của công cụ này, tôi tin rằng việc phân tích mã tĩnh là vô ích, bởi vì một phần quan trọng của hiệu suất của hệ thống phụ thuộc vào các mẫu sử dụng của chúng tôi.

    Có một lý do khiến hệ thống đo điểm chuẩn ở thời lượng thời gian chạy không phải là chuyển tiếp thẳng; cùng một phần mềm có thể nhanh chóng đáng kinh ngạc trong một số trường hợp và chậm chạp ở những người khác.

Điều đó nói rằng, có several tools for code complexity analysis, nhưng những chỉ số này tập trung vào độ phức tạp về cấu trúc, liên quan nhiều hơn đến chất lượng và bảo trì hơn hiệu suất.

1

Đối với số vòng lặp, nếu/elses bạn có thể sử dụng số liệu độ phức tạp chu kỳ. Có những công cụ để tính toán nó. Ví dụ: JavaNCSS. Về những thứ khác, bạn nên quyết định chính xác những gì bạn quan tâm. Có rất nhiều software metrics và một số trong số đó có thể phù hợp với bạn. Nếu không, bạn có thể phát minh ra và thực hiện chúng. Nói, PMD - một công cụ phổ biến khác để thu thập các số liệu khác nhau - cho phép bạn viết các quy tắc của riêng mình.

Nếu bạn muốn tự động dự đoán hiệu suất mã của mình thì bạn sẽ không may mắn. Lý do được chỉ định bởi thkala, những người khác bao gồm biên dịch JVM JIT và tối ưu hóa thời gian chạy. Những người bạn tốt nhất của bạn ở đây là lược tả, kiểm tra hiệu suất (tự động) và phân tích thuật toán. Phân tích tĩnh có thể hiển thị cho bạn một số vấn đề về hiệu suất tiềm năng của như ghép các chuỗi hoặc phân bổ các đối tượng trong một vòng lặp. IDE hiện đại có thể làm điều này. Tuy nhiên, hiệu suất chủ yếu được xác định bởi các thuật toán và kiến ​​trúc, vì vậy bạn hầu như không nhận được nhiều cải tiến về cách phân tích tĩnh.

+0

Xin cảm ơn các bạn! Có, tôi biết rằng sự phức tạp về cấu trúc sẽ không mang lại cho tôi chi phí thực sự nhưng tôi muốn bắt đầu từ đó và sau đó xem những gì khác tôi cần phải tính đến. Tôi sẽ nghiên cứu các liên kết này và xem tôi có thể làm gì. – kepha

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