2015-04-02 14 views
5

Tôi muốn biết có bao nhiêu hướng dẫn mã java của tôi tiêu thụ để thực thi. Tôi đang tìm kiếm một api mà bắt đầu tính hướng dẫn và tổng số cuối cùng của hướng dẫn nên được trả lại vào cuốiCó cách nào để đếm số lượng hướng dẫn trong java

Ví dụ:

public static void main() 
{ 
    int a=0; 
    int b=0; 
    int c=0; 
    startCountinst(); 
    if(a==b) 
    { 
    c++; 
    } 
    int n = stopCountinst(); 
} 

Cuối cùng, n nên đại diện cho tổng số hướng dẫn được thực hiện sau khi gọi số startCountinst(). Có thể trong java để đếm các hướng dẫn?

+1

lý do bạn muốn đếm số lượng hướng dẫn ?? – Pratik

+1

1. Chọn một ngôn ngữ. 2. Xác định mức bạn muốn đếm số lượng lệnh (mã byte. Assembly, mức máy). 3. Câu trả lời sẽ thay đổi tại * mọi cấp độ * dựa trên trình biên dịch, jvm, kiến ​​trúc máy vv Vì vậy, không thể đưa ra một câu trả lời thích hợp – TheLostMind

+0

Đó là trong java, vì vậy rõ ràng là mã byte. như vậy là nó không thể đếm các hướng dẫn? – user3201343

Trả lời

1

Tôi thích câu hỏi. Có thể hữu ích để đo lường hiệu suất. Nhưng không phải mọi hướng dẫn đều mất thời gian như nhau. Vì vậy, bạn nên xem xét định dạng mã của mình.

JProfiler là khá phổ biến:

https://www.ej-technologies.com/products/jprofiler/overview.html

Và có một số lựa chọn thay thế miễn phí có sẵn. Chỉ cần Google cho java profiler và có một cái nhìn. Rất nhiều thông tin có sẵn.

+0

Số lượng hướng dẫn không liên quan trực tiếp đến hiệu suất *. 5 hướng dẫn có thể mất ít thời gian hơn một lệnh .. Vì vậy, 2 câu đầu tiên của bạn không chính xác – TheLostMind

+0

Bạn có thể hỏi một câu hỏi hay khi được tạo ra nhiều nhận xét dumbass – sloven

0

Chương trình gốc C hoặc C++, khi được biên dịch, sẽ bao gồm một bộ hướng dẫn lắp ráp (máy). Vì vậy, nó có ý nghĩa để thảo luận về số lượng các hướng dẫn sẽ thực thi khi chạy một mã số C/C++. Tuy nhiên, khi bạn biên dịch một lớp Java, bạn tạo một tệp .class bao gồm bytecode độc ​​lập nền tảng. Điều gần nhất với số lượng hướng dẫn của Java sẽ là số hướng dẫn bytecode.

Tiến sĩ Garbage có Eclipse plugin for visualizing bytecode. Bạn có thể xác định số lượng lệnh bytecode bằng cách kiểm tra, và sau đó tìm ra tổng số lệnh đã được thực thi.

2

Trên Linux, bạn có thể chạy perf cpu-cycles Điều này sẽ tính số chu kỳ CPU mà chương trình sử dụng. Nếu bạn sử dụng perf list, bạn có thể xem tất cả các tùy chọn khác để theo dõi ứng dụng.

1

Nếu bạn quan tâm đến số lượng hướng dẫn JVM, bạn có thể đếm chúng bằng tay. Nguồn:

public static void main() 
{ 
    int a = 0; 
    int b = 0; 
    int c = 0; 
    if (a == b) 
    { 
     c++; 
    } 
} 

Bạn có thể ghé qua bytecode bằng cách gọi javap -c YouClassName:

public static void main(); 
Code: 
    0: iconst_0  
    1: istore_0  
    2: iconst_0  
    3: istore_1  
    4: iconst_0  
    5: istore_2  

    6: iload_0  
    7: iload_1  
    8: if_icmpne  14 
    11: iinc   2, 1 

    14: return   

Các câu lệnh if bạn đã quan tâm đến việc biên dịch xuống 4 hướng dẫn JVM.

+0

vâng, tôi đồng ý với bạn chúng tôi sẽ đếm bằng tay. Nhưng tôi muốn đếm hướng dẫn trong thời gian chạy. Để tôi có thể tối ưu hóa trong thời gian chạy. Không thể đếm được hướng dẫn? – user3201343

+0

Chừng nào mã không tự sửa đổi nó sẽ vẫn là một số hướng dẫn cố định. (Bỏ qua việc JVM sẽ thực hiện tối ưu hóa thời gian chạy ...) – Bodo

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