Avatar
1
Hihi Teacher
Hihi Teacher
Giới hạn bộ nhớ Java
Chào mọi người, em có một thắc mắc muốn hỏi là:
  1. Trong ứng dụng Java (Spring) khi chúng ta lập trình thì làm thế nào chúng ta biết cái chức năng của chúng ta đang làm có thể làm hết bộ nhớ của máy chủ (java.lang.OutOfMemoryError: Java heap space) vậy ạ?
  2. Cho em hỏi thêm là 1 ứng dụng Java khi chạy thì có thể chứa bao nhiêu byte cùng 1 lúc ? (Cái này là phụ thuộc vào JVM hay RAM của máy chủ ạ?)

Mọi người cho em xin các cách để tránh tràn bộ nhớ khi lập trình với Java với ạ.

(ví dụ: Khi chúng ta làm ở local ko có vấn đề nhưng khi deploy thì nhiều người có thể download 1 file nặng cùng 1 lúc thì có thể gây hết bộ nhớ ko ạ?)

Cảm ơn mọi người !

  • Answer
java spring
Remain: 5
1 Answer
Avatar
tvd12 Teacher
tvd12 Teacher
  1. Thường sẽ không thể biết được em ạ, vì nó phụ thuộc vào số lượng RAM em cấp, nếu số lượng RAM em có ít hơn số lượng em đòi cấp thì nó mới báo thôi.
  2. Nó có thể là do em set, ví dụ: -Xmx1024m -XX:MaxPermSize=256m, hoặc là nó sẽ lấy toàn bộ RAM trên máy chủ của em.
  3. Cách để tránh tràn bộ nhớ đó là: khởi tạo ít đối tượng nhất có thể, khởi tạo array với các kích thước bé, giải phóng (bằng cách xoá các mối liên kết của đối tượng đến các đối tượng khác) các đối tượng ngay khi không dùng đến. Set capacity cho các queue, list dựa theo tính toán số lượng RAM có sẵn.
  4. Có thể, nhưng còn phụ thuộc vào cách em code và các framework mà em dùng nữa, thường các framework đã code để chống tràn bộ nhớ rồi, còn ví dụ như em code đọc cả 1 cái file ra byte array rồi response xuống client thì framework không care được, nên em cần đọc khoảng 1024 byte rồi push từ từ xuống client qua output stream thôi.
  • 0
  • Reply