Cách tốt nhất để giải phóng bộ nhớ được cấp phát bởi một mảng byte (byte mới [kích thước] trong Java) là gì?Bộ nhớ miễn phí của một mảng byte trong Java
Trả lời
Xóa tất cả tham chiếu đến mảng byte đó. Người thu gom rác sẽ lo phần còn lại.
Khi tạo một byte mới [] trong Java, bạn làm điều gì đó như
byte[] myArray = new byte[54];
Để giải phóng nó, bạn nên làm
myArray = null;
Nếu cái gì khác tham chiếu mảng byte của bạn, giống như
yourArray = myArray;
bạn cũng cần phải đặt các tham chiếu khác thành không, như vậy
yourArray = null;
Trong bộ sưu tập rác Java là tự động. Nếu JVM có thể phát hiện rằng một phần bộ nhớ không còn có thể truy cập được bởi toàn bộ chương trình, thì JVM sẽ giải phóng bộ nhớ cho bạn.
JVM sẽ giải phóng bộ nhớ khi nó cảm thấy như vậy. Là một sự gần đúng thứ tự đầu tiên cho hầu hết các chương trình java, đừng lo lắng về bộ nhớ, hãy vui vẻ, JVM đã lấy lại của bạn. –
Nói chung, bạn không cần phải đặt tham chiếu thành null để cho phép đối tượng được thu thập. Nếu bạn cần phải làm điều này có rất có thể là một vấn đề nghiêm trọng với IMHO thực hiện của bạn. –
@Peter: Phụ thuộc. Nếu bạn biết rằng biến sẽ tồn tại lâu hơn một chút so với mảng mà nó đang đề cập đến, sau đó đặt nó rõ ràng có ý nghĩa. Đó là khá hiếm. –
Đặt tất cả các tham chiếu đến nó thành null sẽ làm cho nó trở thành ứng cử viên cho bộ sưu tập rác tự động của Java. Bạn không thể chắc chắn sẽ mất bao lâu để điều này xảy ra. Nếu bạn thực sự cần lấy lại bộ nhớ một cách rõ ràng ngay lập tức, bạn có thể thực hiện cuộc gọi tới System.gc();
Cũng chỉ để xóa bạn có thể không cần đặt tham chiếu thành null một cách rõ ràng. Nếu các tham chiếu vượt quá phạm vi, chúng sẽ tự động bị vô hiệu hóa, ví dụ: một tham chiếu biến cục bộ sẽ bị vô hiệu hóa khi phương thức được khai báo trong khi thực hiện xong. Vì vậy, các biến cục bộ thường được phát hành hoàn toàn trong suốt thời gian chạy ứng dụng.
System.gc() không đòi lại bộ nhớ ngay lập tức. Bạn chỉ cần nói với JVM "Xin vui lòng, nếu bạn cảm thấy thích nó, có thể bạn có thể làm sạch công cụ lên." Đó chỉ là một gợi ý. –
System.gc() sẽ không ép buộc GC. Nó chỉ là một gợi ý. Nó giống như sự khác biệt giữa bạn cùng phòng của bạn nói "dude, nơi này là một xác tàu, những gì với điều đó?" và mẹ của bạn nói "SẠCH LÊN NÀY!" Trong hầu hết các triển khai, System.gc() chỉ là bạn cùng phòng của bạn. –
@Jonathon @Jim Tôi không biết điều đó. Các javadocs nói "Chạy bộ thu gom rác. Gọi phương thức gc cho thấy rằng việc sử dụng Java Virtual Machine dành cho việc tái chế các đối tượng không sử dụng để tạo bộ nhớ mà chúng hiện đang có sẵn để sử dụng lại nhanh. Khi điều khiển trả về từ lời gọi phương thức, Java Virtual Máy đã thực hiện một nỗ lực tốt nhất để lấy lại không gian từ tất cả các đối tượng bị loại bỏ. " và trong kinh nghiệm của tôi gọi nó nó đã xuất hiện để chạy ngay lập tức, nhưng có lẽ tôi là sai – Alb
- 1. miễn phí() trên bộ nhớ ngăn xếp
- 2. tạo bộ nhớ cache của mảng byte
- 3. Kích thước của một byte trong bộ nhớ - Java
- 4. Matlab: Mất bộ nhớ miễn phí sau khi gọi hàm
- 5. C++ xóa vector, đối tượng, bộ nhớ miễn phí
- 6. Lệnh Linux cho phần trăm bộ nhớ miễn phí
- 7. Bộ nhớ miễn phí được cấp phát trong một chức năng khác?
- 8. Động cơ java 3d miễn phí
- 9. C#: Tìm kiếm mảng byte [] trong bộ nhớ của một quá trình khác
- 10. Bộ nhớ mã c không được quản lý miễn phí trong C#
- 11. Cắt mảng byte trong Java
- 12. Java EE 6 có miễn phí không?
- 13. Đọc một mảng C# byte trong Java
- 14. Phân bổ bộ nhớ không được quản lý miễn phí từ mã được quản lý
- 15. Trình biên dịch Java AOT miễn phí
- 16. Có thể ký một applet java miễn phí không?
- 17. Làm cách nào để tìm kiếm văn bản miễn phí trong Bộ nhớ bảng Azure?
- 18. Tìm một cổng miễn phí
- 19. Làm thế nào để miễn phí() biết bao nhiêu bộ nhớ để deallocate?
- 20. Làm thế nào để phát hiện rò rỉ bộ nhớ trong Pascal/Lazarus miễn phí?
- 21. Có một trình thiết kế Java GUI miễn phí không?
- 22. windbg "miễn phí" loại đối tượng
- 23. Khai báo mảng Mảng Byte trong Java
- 24. Kích thước bộ nhớ của một ArrayList trong Java
- 25. ca cao 64bit nhị phân bị rò rỉ bộ nhớ? (phát hành NSData không miễn phí bộ nhớ)
- 26. Bố cục bộ nhớ của một mảng .NET
- 27. Lập trình C: malloc và miễn phí trong vòng một
- 28. Giữ các trường hợp miễn phí EC2 Miễn phí
- 29. nối thêm một phần của mảng byte java vào StringBuilder
- 30. Bàn cờ JavaScript miễn phí
sử dụng lại. Tốt nhất de-phân bổ bao giờ hết. – SyntaxT3rr0r