Thời điểm hiện tại thì Java và JVM đã tối ưu hóa khá nhiều tốc độ chạy ứng dụng, tuy nhiên có nhiều mẹo tối ưu hóa có thể giúp chúng ta cải thiện tốc độ, hiệu suất của ứng dụng.
Mục Lục
Tránh viết các phương thức dài
Nếu bạn viết các phương thức dài, thì máy ảo Java (JVM) của bạn sẽ mất nhiều thời gian hơn để thực thi. JVM là từ viết tắt của Java Virtual Machine, có nhiệm vụ cung cấp môi trường để thực thi các chương trình Java, cho phép các ứng dụng Java chạy trên bất kỳ hệ điều hành hoặc máy ảo nào.
Nếu một phương thức quá dài và đang xử lý quá nhiều logic thì chúng ta nên chia nó thành nhiều phương thức nhỏ tại những điểm logic hợp lý, mỗi phương thức chỉ nên tập trung cho một nhiệm vụ nhất định.
Hạn chế sử dụng lớp BigDecimal
Mặc dù lớp BigDecimal hữu ích cho các tình huống cụ thể, nó đảm bảo độ chính xác cho các số thập phân và dấu phẩy động, đặc biệt trong việc tính toán tiền tệ, nhưng nó cản trở hiệu suất của các ứng dụng. Lập trình viên càng thực hiện nhiều phép tính BigDecimal thì ứng dụng của họ càng chậm.
Nếu không cần độ chính xác mà lớp BigDecimal mang lại thì có thể sử dụng Long hoặc Double để thay thế.
Sử dụng kiểu dữ liệu nguyên thủy thay vì đối tượng
Có thể sử dụng kiểu dữ liệu nguyên thủy thay vì đối tượng để giảm chi phí xử lý và tăng hiệu suất, tuy nhiên điều này cũng có ưu nhược điểm riêng, mình sẽ phân tích dưới đây:
- sử dụng kiểu dữ liệu nguyên thủy thì JVM sẽ lưu trữ giá trị của chúng trong bộ nhớ Stack chứ không phải trong Heap, mà từ bài Bộ nhớ Heap vs bộ nhớ Stack chúng ta đã biết là dữ liệu được lưu trong Stack sẽ truy cập nhanh hơn Heap.
- khi dữ liệu được truyền giữa các phương thức thì nên dùng kiểu đối tượng vì lúc đó chỉ có các tham chiếu được sao chép và không gia tăng chi phí bộ nhớ, lúc này thì không nên dùng kiểu nguyên thủy.
- kiểu nguyên thủy chỉ nên dùng trong việc khai báo cục bộ: trong hàm, trong vòng lặp, kết quả trung gian.
Hạn chế sử dụng biểu thức chính quy Regex
Regex là một loại biểu thức chính quy hỗ trợ đắc lực trong việc tìm kiếm dữ liệu trong chuỗi, nó được triển khai dễ dàng tiện lợi, tuy nhiên cái giá phải trả là thời gian xử lý khá là chậm. Nếu bắt buộc phải sử dụng Regex trong logic thì chúng ta nên lưu lại biến tham chiếu của nó vào cache thay vì phải biên dịch liên tục.
Cache lại dữ liệu trong ứng dụng Java
Thực thi cache lại dữ liệu trong ứng dụng để tăng tốc độ tải trang và tốn ít tài nguyên máy chủ hơn.
cài đặt bộ nhớ đệm thích hợp giúp giảm độ trễ, tránh tắc nghẽn mạng, cải thiện tính khả dụng của nội dung và giảm tiêu thụ bộ nhớ và chu kì của CPU.
Sử dụng StringBuilder cho việc nối chuỗi
Việc nối chuỗi trong ứng dụng là việc cần thiết để xử lý một vài logic, tuy nhiên nhược điểm của nó là gây tốn bộ nhớ.
Thay vì sử dụng toán tử + thì chúng ta nên sử dụng StringBuilder để tránh việc tạo nhiều đối tượng khi ghép chuỗi.
StringBuilder không an toàn cho đa luồng nhưng bù lại tốc độ thì lại nhanh hơn nhiều StringBuffer.
Xem thêm các bài viết liên quan dưới đây:
- Hướng dẫn cài đặt JDK 8 trên windows
- Phân biệt JDK JRE và JVM trong Java
- Bộ nhớ Heap và bộ nhớ Stack trong Java
- Quy ước đặt tên trong Java (Naming convention)
- Pass by value, Pass by reference trong java
- Từ khóa trong java và chức năng của nó (keywords)
- Kiểu dữ liệu trong java và tác dụng của nó
- Câu chuyện phỏng vấn online mùa Covid
- Nói sao để được chào đón, làm thế nào để được ghi nhận
- Lập trình viên lúc rảnh rỗi thì nên làm gì?
- 13 Plugin không thể thiếu khi làm việc với IntellIJ IDEA
- Crack Intellij IDEA new versions 2021
- Crack IntellIJ để code như một senior
- Shortcut Intellij hữu ích để làm việc được hiệu quả hơn
- Build hệ thống Pub Sub dùng Hazelcast và Spring boot
- Build hệ thống Pub-Sub bằng Kafka+Spring boot (phần 3)
- Git stash giúp bạn trở nên chuyên nghiệp như thế nào?
- Git revert với git reset hoạt động như thế nào
- Active Jrebel để code trong IntellIJ IDEA
- Tìm hiểu cơ chế hoạt động của Apache Kafka (phần 1)
- Tìm hiểu cơ chế hoạt động của Apache Kafka (phần 2)
- Elasticsearch là gì mà bá đạo đến vậy? [Phần 1]
- Cùng nhau tìm hiểu Docker
- Cài đặt Hazelcast trên server Centos 7
- Elasticsearch và Kibana dựng bằng Docker