Tôi đã làm việc trên một chương trình Java tạo quỹ đạo fractal trong một thời gian dài. Giống như các bức ảnh, bức ảnh càng lớn thì nó sẽ càng đẹp hơn khi thu nhỏ lại. Chương trình sử dụng mảng đối tượng 2D (Point), được viết khi giá trị của một điểm được tính toán. Tức là Điểm được lưu trữ với giá trị tương ứng, I.e .:Ổ cứng Heap Java
Point p = new Point(25,30);
histogram[25][30] = p;
Tất nhiên, điều này được chỉnh sửa để đơn giản. Tôi chỉ có thể viết các giá trị điểm vào một CSV, và áp dụng chúng vào raster sau, nhưng sử dụng các phương thức tương tự đã mang lại kết quả không mong muốn. Tôi đã thử một thời gian khá lâu vì tôi thích có thể tạo ra những hình ảnh lớn hơn với không gian được giải phóng bởi không có mảng này. Nó sẽ không hoạt động. Để rõ ràng, tôi muốn thêm rằng đối tượng Point cũng lưu trữ dữ liệu màu.
Vấn đề tiếp theo là WriteableRaster, sẽ có cùng kích thước với mảng. Kết hợp cả hai chiếm nhiều bộ nhớ. Tôi đã chấp nhận điều này, sau khi cố gắng thay đổi cách nó được thực hiện nhiều lần, mỗi lần có kết quả chất lượng thấp hơn.
Sau khi cố gắng tối ưu hóa bộ nhớ và thời gian, tôi đã đi đến kết luận rằng tôi thực sự bị giới hạn bởi RAM. Đây là những gì tôi muốn thay đổi. Tôi biết về chuyển đổi -Xmx (đặt thành 10 GB). Có cách nào để sử dụng bộ nhớ ảo của Windows để lưu trữ raster và/hoặc mảng không? Tôi nhận thức rõ về hiệu suất đáng kể mà nó sẽ gây ra, nhưng thay vì giảm chất lượng, có vẻ như không có nhiều lựa chọn.
Tôi nghĩ bạn muốn xem [Berkeley DB] (http://www.oracle.com/technetwork/products/berkeleydb/overview/persistence-160890.html), đặc biệt là sự kiên trì dựa trên chú thích cho POJO. –