Như tiêu đề ạ.
Em đang tập tành lập trình java. Em muốn kiểm tra thời gian chạy code của mình để kiểm tra mức độ tối ưu của nó đối với bài toán. Đồng thời mong mọi người cho em vài lời khuyên để giúp code java chạy nhanh hơn. Ví dụ nếu mình dùng nhiều biến hay phương thức static có làm chậm chương trình không? Chương trình viết kiểu chia nhỏ các phương thức hay gộp chung thì chạy sẽ nhanh hơn? v…v… Em xin cảm ơn ạ.
Làm thế nào để kiểm tra thời gian code chạy và cách tối ưu code Java?
Muốn kiểm tra code chạy nhanh hay lâu thì phải làm profiling thôi:
1- Có thể tự viết profiling xem thế nào? Ví dụ đơn giản nhất là trước khi chạy cho một cái time vào, sau khi chạy cho 1 cái time tiếp. Trừ đi sẽ ra thời gian chạy của function. Tuy nhiên, cách này chỉ đo được mà không hiểu nguyên nhân chậm do đâu.
2- Sử dụng tool profiling. Trong java SDK có 1 tool tên là VisualVM, bạn có thể xem log/trace mọi thứ khi app chạy.
(Ngoài VisualVM thì bạn có thể dùng Netbean Profiler, Petty, JRoket, Jprofiler (đều là tool offline). Ngoài của ngoài ra nữa, mình thấy có vài thằng online tool rất tốt, mình hay dùng newrelic.com)
Các câu hỏi extra:
- Dùng nhiều biến? tốn bộ nhớ stack (nhưng dễ hiểu khí viết, ví dụ bạn gọi new A().open(), nó chỉ tốn bộ nhớ init cái object mà không tốn bộ nhớ lưu biến nếu như a = new A(); a.open(). Tuy nhiên, nếu a được gọi lại nhiều lần thì init lại tiết kiệm hơn a.close()…)
- Dùng nhiều phương thức static? tốn nhiều RAM để lưu và không được GC nên app có thể tốn RAM (hoặc thiếu RAM khi chạy -> app chạy chậm vì nó sẽ phải dùng RAM ảo (cache lại trên ổ cứng)
- Chia nhỏ nhiều phương thức? tốn RAM (vì CPU sẽ phải linker lại chúng nó với nhau) nhưng sẽ dễ hiểu hơn khi dev.
Nói chung, cái gì cũng phải đánh đổi (trade-off)? Tối ưu và chấp nhận được cho 1 case cụ thể mà thôi.
Vâng em cảm ơn nhiều ạ.