Skip to main content

Bộ nhớ heap của Java

Làm quen với Java lâu nhưng ít người để ý bộ nhớ heap của Java trong khi nó đóng vai trò rất quan trọng trong việc bảo đảm hiệu suất làm việc của Java.
Bộ nhớ heap là gì?
Bộ nhớ heap chính là bộ nhớ dùng để lưu trữ các đối tượng được tạo ra trong 1 chương trình Java. Như vậy nếu kích thước bộ nhớ quá nhỏ trong khi số lượng đối tượng được tạo ra lớn hơn dẫn đến tràn bộ nhớ.
Ví dụ cụ thể, bộ nhớ heap mặc định của Java là 64MB. 1 chương trình Java có 1 đối tượng với khoảng 10 thuộc tính kiểu String với độ dài trung bình là 50 ký tự, 1 ký tự 2 bytes như vậy khoảng 100 bytes. Nhân với 10 thuộc tính là 1MB. Nếu chương trình khởi tạo 1 danh sách khoảng 100 đối tượng như vậy lượng bộ nhớ cần dùng là 100MB, chương trình sẽ lập tức bị tràn bộ nhớ.
Có thể thấy khả năng dẫn đến tràn bộ nhớ là rất cao, đặc biệt đối với các chương trình Java lớn.

Cách khắc phục
Giải pháp là tăng bộ nhớ heap. Nói tuy đơn giản nhưng để thực hiện khá phức tạp vì mỗi 1 chương trình Java có cách thiết lập kích thước bộ nhớ heap khác nhau. Có ít nhất 3 cách chỉnh kích thước heap:
- Trong biến môi trường, tạo mới hoặc hiệu chỉnh giá trị của biến có tên JAVA_OPTS. Ví dụ, JAVA_OPTS = -Xms256m -Xmx256m
Xms256m: kích thước khởi tạo của heap là 256 Mb
Xmx256m: kích thước cực đại của heap là 256Mb
- Trong control panel, mở Java Control panel và hiệu chỉnh Runtime Java Environment theo thông số -Xmx256m
- Đối với file jar: java -Xms256m -Xmx256m your_program.jar
- Đối với jetty: vào bin mở file jetty-service.conf và chỉnh như sau:
wrapper.java.initmemory=1024m
wrapper.java.maxmemory= 1024m
 

Comments

Popular posts from this blog

How to Install SQL Server on MacOS with docker

 I'm writing a small tut for who need to install SQL Server on macOS using docker Step 1: Download the SQL Server Image sudo docker pull mcr.microsoft.com/mssql/server:2019-latest Step 2: Launch the SQL Server Image in Docker docker run -d --name example_sql_server -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=Pass.word-123' -p 1433:1433 mcr.microsoft.com/mssql/server:2019-latest Step 3: Check the SQL Server Docker Container docker ps -a Step 4: Install SQL Server Command-Line Tool sudo npm install -g sql-cli Step 5: Connect to SQL Server  5.1 Using Command mssql -u sa -p Pass.word-123 5.2: Using VSCode to connect to sql server Using the extension SQL Server (mssql)

What is API Gateway?

  What does API gateway do? The diagram below shows the detail. Step 1 - The client sends an HTTP request to the API gateway. Step 2 - The API gateway parses and validates the attributes in the HTTP request. Step 3 - The API gateway performs allow-list/deny-list checks. Step 4 - The API gateway talks to an identity provider for authentication and authorization. Step 5 - The rate limiting rules are applied to the request. If it is over the limit, the request is rejected. Steps 6 and 7 - Now that the request has passed basic checks, the API gateway finds the relevant service to route to by path matching. Step 8 - The API gateway transforms the request into the appropriate protocol and sends it to backend microservices. Steps 9-12 : The API gateway can handle errors properly, and deals with faults if the error takes a longer time to recover (circuit break). It can also leverage ELK (Elastic-Logstash-Kibana) stack for logging and monitoring. We sometimes cache data in the API gatew...