Tôi đã sử dụng biến có nhiều dữ liệu trong đó, nói String data
. Tôi muốn sử dụng một phần nhỏ trong chuỗi này theo cách sau:Tại sao phụ thêm "" vào bộ nhớ lưu chuỗi?
this.smallpart = data.substring(12,18);
Sau một vài giờ gỡ lỗi (với một visualizer bộ nhớ) tôi phát hiện ra rằng các đối tượng lĩnh vực smallpart
nhớ tất cả các dữ liệu từ data
, mặc dù nó chỉ chứa chuỗi con.
Khi tôi đã thay đổi mã vào:
this.smallpart = data.substring(12,18)+"";
..the vấn đề đã được giải quyết! Bây giờ ứng dụng của tôi sử dụng rất ít bộ nhớ ngay bây giờ!
Làm cách nào có thể? Bất cứ ai có thể giải thích điều này? Tôi nghĩ rằng this.smallpart tiếp tục tham chiếu tới dữ liệu, nhưng tại sao?
CẬP NHẬT: Làm cách nào để xóa chuỗi lớn? Sẽ dữ liệu = new String (data.substring (0,100)) làm điều này?
Đọc thêm về ý định cuối cùng của bạn bên dưới: Chuỗi đầu tiên xuất phát từ đâu? Nếu đọc từ một tập tin hoặc cơ sở dữ liệu CLOB hoặc một cái gì đó sau đó chỉ đọc những gì bạn cần trong khi phân tích cú pháp sẽ được tối ưu tất cả các cách xung quanh. – PSpeed
Tuyệt vời ... Tôi đang làm việc trong java hơn 4 đến 5 năm, vẫn còn điều này là mới đối với tôi :). cảm ơn cho bro thông tin. – Parth
Có một sự tinh tế để sử dụng 'chuỗi mới (Chuỗi)'; xem http://stackoverflow.com/a/390854/8946. –