Chương trình Java chạy trong Java Virtual Machine (JVM) dùng heap memory để quản lý dữ liệu. Nếu chương trình cần nhiều bộ nhớ hơn, JVM có thể ném OutOfMemoryError khi cố gắng tạo đối tượng mới.
Thay đổi/tăng JVM Heap Size
Trong Java, có thể tăng heap size do JVM cấp phát bằng các tùy chọn dòng lệnh:
- -Xms – Đặt kích thước heap ban đầu (initial heap size)
- -Xmx – Đặt kích thước heap tối đa (maximum heap size)
- -Xss – Đặt kích thước stack luồng Java (thread stack size)
Ví dụ kiểm tra heap size hiện tại
public class HeapSizeTest {
public static void main(String[] args){
// Lấy kích thước heap JVM
long heapSize = Runtime.getRuntime().totalMemory();
// In heap size
System.out.println("Heap Size: " + heapSize);
}
}
Kết quả đầu ra
Heap Size: 16252928
Cách sử dụng thực tế
# Khởi động với heap ban đầu 512MB, tối đa 2GB, stack 1MB java -Xms512m -Xmx2g -Xss1m MyApplication
Đơn vị: k/K (kilobyte), m/M (megabyte), g/G (gigabyte).
Lưu ý quan trọng
-Xmsvà-Xmxnên đặt bằng nhau trong production để tránh chi phí mở rộng heap động.- Heap size không vượt quá RAM vật lý có sẵn (trừ swap).
- JVM 64-bit cần thiết cho heap > ~1.5-2GB (tùy OS).
Runtime.getRuntime().maxMemory()trả về-Xmx,totalMemory()trả về heap hiện tại (có thể <-Xmxnếu chưa mở rộng).- Giám sát heap:
jconsole,jvisualvm,-Xlog:gc*,-XX:+PrintGCDetails.