Thu gom rác & biên dịch Just-In-Time (JIT)

Tối ưu hóa mã trong Java

Pavlos Kosmetatos

Lead Engineer @Wealthyhood

Thu gom rác - cơ bản

Quản lý bộ nhớ thủ công (C/C++)

  • Lập trình viên tự cấp phát & giải phóng bộ nhớ
  • Dễ rò rỉ bộ nhớ

$$

Garbage Collection của Java

  • Cấp phát bộ nhớ tự động
  • Tự động phát hiện đối tượng không dùng
  • Thu hồi bộ nhớ tự động
Tối ưu hóa mã trong Java

Cách GC hoạt động

  • Đánh dấu: Xác định đối tượng còn truy cập được từ gốc
  • Quét: Gỡ bỏ đối tượng không còn truy cập được

Ảnh chụp màn hình 2025-05-11 lúc 6:58:38 CH.png

Tối ưu hóa mã trong Java

GC và hiệu năng

Đánh đổi hiệu năng của GC

  • Đơn giản hóa phát triển, nhưng có cân nhắc về hiệu năng

$$

Thuật toán GC

  • JVM hiện đại cung cấp nhiều thuật toán GC
  • Lựa chọn phụ thuộc yêu cầu ứng dụng
  • Xem hướng dẫn chi tiết về thuật toán GC tại đây
1 https://www.baeldung.com/jvm-garbage-collectors
Tối ưu hóa mã trong Java

Tác động hiệu năng của GC

// Tệ - Tạo nhiều đối tượng sống ngắn
for (int i = 0; i < 1000000; i++) {
    new Object(); // Thành rác ngay
}


// vs. Tái sử dụng đối tượng Object obj; for (int i = 0; i < 1000000; i++) { obj = new Object(); // Chỉ một tham chiếu }
Tối ưu hóa mã trong Java

Viết mã thân thiện với GC

// Tránh trong mã cần hiệu năng cao
String result = "";
for (int i = 0; i < 100000; i++) {
    result += i; // Mỗi lần tạo một String mới
}


// Cách tốt hơn StringBuilder builder = new StringBuilder(); for (int i = 0; i < 100000; i++) { builder.append(i); // Tái sử dụng cùng bộ đệm } String result = builder.toString();
Tối ưu hóa mã trong Java

Biên dịch Just-In-Time

  • Quy trình thực thi JVM:
    • Mã nguồn Java -> Bytecode
    • Bytecode -> Thực thi thông dịch
    • Phương thức “nóng” -> Mã máy gốc
  • Tối ưu mã chạy thường xuyên
Tối ưu hóa mã trong Java

Mẫu mã thân thiện với JIT

  • Viết mã có tính dự đoán
// Nhánh dễ đoán giúp JIT tối ưu hóa
if (value > 0) {
    // Mã A - nhánh thường gặp
} else {
    // Mã B - nhánh hiếm gặp
}
  • Tạo phương thức nhỏ, tập trung
  • Phương thức nhỏ, gọi thường xuyên phù hợp cho inlining
  • Mã phức tạp khó tối ưu hiệu quả
Tối ưu hóa mã trong Java

Tóm tắt

  • Giảm tạo đối tượng trong đường chạy quan trọng về hiệu năng
  • Viết mã dự đoán được, phù hợp khả năng tối ưu của JIT
  • Tối ưu chỗ quan trọng sau khi profiling
Tối ưu hóa mã trong Java

Ayo berlatih!

Tối ưu hóa mã trong Java

Preparing Video For Download...