Avatar
1
Hihi Teacher
Hihi Teacher
Hỏi về quản lý bộ nhớ và đa luồng trong java
Hi mọi người, hiện tại kiến thức của em đa số là tự học nên còn nhiều điều thắc mắc mà ko biết hỏi ai nên em muốn hỏi mọi người.Mong mọi người giải đáp giúp em ạ.
  1. Khi tạo 1 mảng byte lớn (ví dụ đến vài MB,GB) thì bộ nhớ mà chương trình Java sẽ dùng để chứa mảng bye đó sẽ dựa vào gì ạ ? RAM hay máy ảo JVM.Có phải PC có RAM dung lượng càng to thì có thể phải tạo nhiều biến dung lượng lớn như vậy cùng 1 lúc ko ạ ?
  2.  Làm cách nào để tải file nặng trong Java(Em có tìm hiểu thì thấy trên mạng ngta hướng dẫn là dùng Resource của Spring có đúng ko ạ em thấy cách này Spring đã làm hết cho mình rồi nên em muốn hỏi thêm để có thể custom theo ý mình ạ)
  3.  Về đa luồng, đối với Spring Boot thì việc dùng đa luồng em thấy xử lí rất nhanh những tác vụ nặng (gửi mail,....) trong thực tế thì ngta có dùng đa luồng ko ạ ? Và quan trọng là ngta có giới hạn số luồng Thread Pool theo 1 con số cụ thể nào ko (Ví dụ mình dùng quá nhiều thread thì có vấn đề gì xảy ra ko ạ ?)
Cảm ơn mọi người ạ !
  • Answer
java
Remain: 5
1 Answer
Avatar
monkey Enlightened
monkey Enlightened
  1. Về lý thuyết thì em có thể tạo ra mảng byte với kích thước bao nhiêu tuỳ ý, nhưng trong thực tế sẽ chẳng bao giờ em tạo ra 1 mảng byte lên tới hàng MB cả. Việc cấp phát dữ liệu sẽ do hệ điều hành đảm nhiệm, JVM được viết bằng C/C++ nên nó cũng phải theo hệ điều hành. Mà việc cấp phát 1 mảng byte lớn là cực kỳ nặng nề bởi vì nó phải đi tìm kiếm các vùng nhớ còn trống sao cho đủ với kích thước em yêu cầu.
RAM dung lượng lớn hay bé đều như nhau cả em ạ, các mảng byte khởi tạo cần phải nhỏ thôi, nên dưới 100KB. Chính vì thế người ta mới sinh ra InputStream, OutputStream để đọc ghi từ từ đó em.
  1. File nặng có kích thước từ 30MB trở nên thì việc upload/download file là tương đối khó khăn, muốn đảm bảo rằng file sẽ upload/download thành công thì nên chia nhỏ file lớn ra rồi download các file nhỏ và ghép lại sau, đây chính là tư tưởng của giao thức <a href="https://en.wikipedia.org/wiki/HTTP_Live_Streaming" target="_blank" rel="noopener nofollow ugc">hls</a>. Và anh tin là spring chưa hỗ trợ việc này, bởi vì việc cắt nhỏ file cần phải có công cụ, có thể ffmpeg hoặc em tự code, nhưng spring thì chưa có đâu.
  • 1
  • Reply
Cảm ơn anh rất nhiều !
Chúc anh luôn vui vẻ và có thật nhiều sức khỏe !
 –  Hihi 1653967126000