Trong bài viết này chúng ta sẽ cùng nhau tìm hiểu cách cấu hình Stack size trong JVM.
Default Stack size
Mỗi thread trong JVM đều có một stack riêng dùng để lưu trữ các thông như biến local, các kết quả tính toán v.v Stack là một phần quan trọng trong JVM mà mọi triển khai của JVM đều phải sử dụng.
Mỗi khi JVM tạo một thread thì nó sẽ khởi tạo luôn stack cho thread đó. Nếu chúng ta không chỉ định stack size cụ thể thì nó sẽ sử dụng giá trị mặc định được định sẵn. Thông thường, stack size này phụ thuộc vào hệ điều hành và kiến trúc máy tính.
- Linux/x86 (64-bit): 1 MB
- macOS (64-bit): 1 MB
- Oracle Solaris (64-bit): 1 MB
- Còn trên windows JVM sử dụng system-wide stack size
Về cơ bản, chúng ta có thể xem 1 MB là kích thước của mỗi stack trong hầu hết các hệ điều hành và kiến trúc hiện đại.
Tùy biến Stack size
Để thay đổi kích thước mặc định của Stack, chúng ta có thể sử dụng -Xss flag để chỉ định kích thước của mỗi stack khi được khởi tạo. Ví dụ để đặt kích thước của stack là 1MB thì chúng ta sẽ sử dụng Xss1048576.
java -Xss1048576 ...
Nếu không muốn tính kích thước theo byte, chúng ta có thể sử dụng một số ký tự dại diện cho đơn vị muốn sử dụng ví dụ – chữ k hoặc K để chỉ KB, m hoặc M để chỉ MB và g hoặc G để chỉ GB. Ví dụ: hãy xem một số cách khác nhau để đặt kích thước ngăn xếp thành 1 MB:
-Xss1m -Xss1024k
Tương tự như -Xss, chúng ta cũng có thể sử dụng -XX: ThreadStackSize để định cấu hình kích thước stack.
java -XX:ThreadStackSize=1024 ...
Tuy nhiên JVM cũng chỉ định rõ kích thước stack tối thiểu được chỉ định, chúng ta không thể cấu hình kích thước stack nhỏ hơn giá trị này.
$ java -Xss1K -version The Java thread stack size specified is too small. Specify at least 144k Error: Could not create the Java Virtual Machine. Error: A fatal exception has occurred. Program will exit.
Tương tự cũng có một giá trị tối đa mà kích thước của stack không thể vượt qua.
$ java -Xss2g -version Invalid thread stack size: -Xss2g The specified size exceeds the maximum representable size. Error: Could not create the Java Virtual Machine. Error: A fatal exception has occurred. Program will exit
Nguồn