2008-09-09 34 views

Trả lời

1

Hiệu suất bộ nhớ hoặc hiệu suất CPU? Hay chúng giống nhau vào những ngày này?

Bằng chứng duy nhất của tôi là giai thoại và trên một nền tảng khác: sau khi chuyển một loạt các ứng dụng CPU đến C# (.NET 2.0), tôi không nhận thấy sự mất mát đáng kể về hiệu suất (tôi không xem xét đáng kể 10%). Mã được viết tốt dường như hoạt động tốt trên nhiều kiến ​​trúc khác nhau.

Hầu hết các ứng dụng dành/lãng phí thời gian với:

  • hoạt động IO đó sẽ không được hưởng lợi từ tĩnh (thời gian biên dịch) phân tích.
  • Thuật toán kém sẽ không được hưởng lợi từ phân tích tĩnh.
  • Bố cục bộ nhớ kém trong các vòng bên trong CPU quan trọng. Mặc dù về mặt kỹ thuật, các trình biên dịch có thể giúp chúng tôi ở đây, nhưng tôi vẫn chưa thấy một trình biên dịch thực sự làm bất cứ điều gì thú vị.

Dựa trên trải nghiệm của tôi, trừ khi bạn đang viết codec video, không có lợi ích nào khi biên dịch ứng dụng Java so với chỉ dựa vào trình biên dịch điểm phát sóng.

4

Một số bằng chứng về giai thoại. Tôi đã làm việc trên một vài ứng dụng tài chính thương mại thời gian thực quan trọng. Tôi đồng ý với Frank, gần như mỗi lần vấn đề của bạn không phải là thiếu sự biên soạn, nó là thuật toán hay cấu trúc dữ liệu của bạn. Các trình biên dịch điểm nóng hiện đại rất tốt với mã đúng, ví dụ: CERN Colt library nằm trong phạm vi 90% của Fortran được biên dịch, tối ưu hóa cho công việc số.

Nếu bạn lo lắng về tốc độ, tôi thực sự khuyên bạn nên sử dụng profiler tốt và lấy bằng chứng về vị trí tắc nghẽn của bạn - Tôi sử dụng YourKit và đã rất hài lòng.

Chúng tôi chỉ sử dụng mã được biên dịch gốc cho tốc độ trong một trường hợp trong vài năm qua và do đó chúng tôi có thể sử dụng CUDA và nhận một số hiệu suất GPU nghiêm trọng.

2

Câu hỏi của bạn là một chút lớn, câu trả lời khác nhau rất nhiều

  • Nếu bạn đang sử dụng Just In Time biên soạn (JIT) hay không
  • Khi bạn đang sử dụng ,, nếu quá trình của bạn được thực hiện cho một thời gian dài hoặc không phải là

Tất cả JVM sử dụng JVM gần đây, nhưng trên JVM cũ mã java chậm hơn vài lần so với mã gốc.

Nếu bạn có một máy chủ chạy trong một thời gian dài hoặc lô thực thi cùng một mã một lần nữa và một lần nữa, sự khác biệt và lên rất thấp.

Chúng tôi đã viết cùng một lô cả trong C++ và Java và chạy nó với tập dữ liệu khác nhau, kết quả khác nhau trong khoảng 3 giây, với tập dữ liệu lấy từ 5 phút đến vài giờ.

Nhưng hãy cẩn thận, chúng là trường hợp đặc biệt sẽ có sự khác biệt quan trọng, ví dụ như lô cần nhiều bộ nhớ.

-2

Đã thử Hello-World với sáu cách triển khai khác nhau chỉ để kiểm tra phí trên và sự khác biệt đáng kinh ngạc. Java đã được tắt các bảng xếp hạng trong khi các ngôn ngữ biên soạn đã làm tốt như nhau. Tôi có thể chứng minh tất cả các bằng chứng (trong một bản sao) nếu cần thiết.

+1

Hello World không đại diện cho khối lượng công việc thực tế của cuộc sống, và tôi nghi ngờ nó được tối ưu hóa bởi JVM. Đối với những trường hợp rất nhỏ như thế này, Java rất có khả năng bị mất so với các ngôn ngữ được biên dịch. – nhahtdh

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