Java VisualVM và Garbage Collector trong JVM (p2)

Phần này chúng ta sẽ tìm hiểu một số thông số cấu hình cho ứng dụng Java

java -jar app.jar

câu lệnh trên là câu lệnh cơ bản nhất để chạy một ứng dụng java

Đã bao giờ các bạn thắc mắc một số câu hỏi khi chạy một ứng dụng java như làm thế nào để cấu hình kích thức bộ nhớ heap trong java, stack memory ...

Hôm nay tôi sẽ hướng dẫn một số thông số cơ bản nhất mà tôi từng dùng trong dự án

-Xmx512M

tham số này mô tả maximum kích thước vùng nhớ HEAP dành cho ứng dụng sẽ là 512MB, nếu ứng dụng dùng vượt quá vùng nhớ HEap nó sẽ báo lỗi Outofmemory

-Xms128M

Tham số này cấu hình khởi tạo vùng nhớ heap có kích thước là 128MB

-Xss4M

Tham số này muốn nói rằng kích thước vùng nhớ dành cho Stack là 4MB


Tiếp đến chúng ta sẽ cấu hình loại GC cho ứng dụng

Hiện tại chúng ta có thể cấu hình 4 cách phổ biến nhất cho GC

-XX:+UseParallelGC

Tham số này mô tả cơ chế Parallel khi dọn các đối tượng trong bộ nhớ heap không còn đc tham chiếu, nó được dùng trong các hệ thống multiprocessor hoặc multithread

-XX:+UseG1GC

Tham số này cũng mô tả cơ chế dọn đối tượng trong vùng nhớ heap, đây là một cơ chế mới nhất chạy song song nhiều luồng khi dọn rác. 

-XX:+UseSerialGC
Cách này là một trong những cách xưa cũ nhất. nếu hệ thống bạn chạy đơn giản thao tác CMD thì có lẽ nên dùng cách này. ứng dụng đơn luồng đơn giản nhất, dành cho các hệ thống dùng vùng nhớ nhỏ hơn 100M

Các bạn có thể xem thêm chi tiết về các  cơ chế dọn dẹp rác trong hệ thống tại https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/collectors.html

(Tôi giải thích vùng nhớ heap và stack cho một số bạn chưa hiểu 2 vùng nhớ này là thế nào?

Thứ nhất là vùng nhớ stack: Nó là vùng nhớ lưu trữ các biến tham chiếu trỏ đến các thể hiện cụ thể trong vùng nhớ heap. Nó chính là cách biến. Khi bạn khai báo biến trong một hàm thì nó chính đang được đẩy vào stack. Khi thực hiện xong hàm thì stack cũng xóa hết các biến này. Dẫn đến các thể hiện được trỏ bởi các biến này sẽ bị đánh dấu là unused và sẽ được dọn dẹp khỏi vùng nhớ heap

Vùng nhớ Heap chính là nơi lưu trữ các đối tượng thể hiện
Ví dụng bạn có

void xxx(){
Student s = new Student();
}

Thì biến s sẽ được lưu trữ trong stack , còn đối tượng new Student() được lưu trữ trong heap, khi hàm xxx() thực hiện xong thì biến s sẽ được xóa khỏi stack và đối tượng Student đang lưu trong heap được đánh dấu là unused và sẽ được xóa khi Perform GC




Comments

Popular posts from this blog

Fixing the DeepSpeed Import Error While Fine-Tuning the Qwen Model

Amazon Linux 2023 - User data configuration for launch templates to connect to the EKS cluster

How to create ISM policy and rotate logs in opensearch