2010-06-04 34 views

Trả lời

46

Dừng tham chiếu nó.

+6

Nó mang lại một nụ cười trên khuôn mặt của tôi :) – BalusC

+24

Java đối tượng == khủng hoảng tồn tại "Nếu không có ai nhắc tôi làm tôi vẫn còn tồn tại?" –

+0

Để lại tất cả các phần của bộ nhớ nghèo một mình. Ngừng tham chiếu chúng. Bây giờ :) – schnaader

6

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.

13

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.

+2

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. –

+4

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. –

+3

@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. –

1

Đặ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.

+3

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 ý. –

+3

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. –

+0

@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

Các vấn đề liên quan