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
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
Post a Comment