我对MemorySizeCalculator
的{{1}}感到好奇。我可以从Glide
获取默认内存缓存大小,从getMemoryCacheSize()
获取位图池大小。
MemorySizeCalculator :
getBitmapPoolSize()
我也理解了内存缓存概念但不确定位图池的大小,所以我从这个链接中找到了一些信息:https://medium.com/@ali.muzaffar/performance-improvement-and-bitmap-pooling-in-android-f97b380cf965
位图池是一种简单的技术(虽然相当复杂 实现),旨在重用位图而不是创建新的位图 每次。简单地说,当你需要一个位图时,你检查一下 位图堆栈,以查看是否有可用的位图。如果有 没有位图可用你创建一个新的位图,否则你弹出一个 堆栈中的位图并重用它。然后,当你完成了 位图,你可以把它放在堆栈上。
我认为推送到堆栈的位图也缓存在内存中。有没有人可以帮助我理解这个概念?
答案 0 :(得分:1)
答案 1 :(得分:0)
图像繁重的应用程序必须解码许多图像,因此应用程序中将存在连续的内存分配和释放。这导致频繁调用垃圾收集器(GC)。如果你多次调用GC,你的应用程序UI会冻结。 Glide使用位图池概念有效地加载图像。通过使用Bitmap池来避免应用程序中的内存连续分配和释放,可以减少GC开销,从而使应用程序平稳运行。
基本原则很简单。处理位图时,您必须验证位图2是否与位图1相同。为此,您必须比较它们。如果是这种情况,您可以将位图1作为inbitmap重用,以重复使用相同的内存空间来处理gitmap 2,然后滑动GC。
内存缓存是分配给每个应用程序的内存空间。一个应用程序无法访问其他应用程序的缓存内存。它的大小有限。