我有一个问题,我们可以使用对象池概念,而不是将大型字节数组声明为20MB。如果是,那么如何?实际上我有byte[] fileData = new byte[2097152];
的声明,因为我必须从视频文件中读取那么多数据,在我们尝试连续播放相同的java文件20到24次之后,在应用程序中经常返回OutOfMemory Exception。意味着这不是错误,在这种情况下,堆内存已满,GC无法在给定的时间跨度内清除它,这就是它返回OutOfMemory Exception的原因。那么,我们可以使用JAVA的 ObjectPooling 概念来提高内存利用率。
提前致谢。
答案 0 :(得分:0)
你正试图解决错误的问题......你应该专注于不将整个2MB文件加载到RAM中,因为你真的不需要这样做。
在RAM中创建一个小窗口,64KB说,然后一块一块地加载文件。这就是视频播放器等所做的事情。
(也就是说,2MB不是 那么多。如果它更容易,只需确保你只分配一次并在此后重复使用该分配。)