我用Java编写了一本食谱。为此,我创建了一个Recipe-Object,其中保存了名称和菜肴图片等信息。
我将所有这些对象放入List并使用所有配方序列化List。当再次打开食谱时,所有这些食谱(每个食谱都有一张图片)再次加载到程序中。
如果有500多个食谱,那么必须将500多张照片加载到程序中。
我的问题:
答案 0 :(得分:4)
这与序列化无关;至少在概念层面上。
重点是:当你的某些自定义对象O消耗X字节的数据时;然后只要该对象O在您的JVM中“活着”,那么这些X字节的数据就会在JVM中分配。
换句话说:当您直接将图像字节放入对象时;那么这些对象是通过 new 创建的,还是从某些字节流中读取,或者从 n 不同来源读取它们无关紧要。
正是因为这个原因,人们会试图不将图像字节直接“包含”到“业务”对象中。例如,将图像保存为硬盘驱动器上的文件;并且只向对象添加文件名。含义:只有当您在屏幕上实际设置“配方”时,才会从驱动器中加载图片;以便将其显示给用户。
因此,您的问题的答案是:如果从一个文件或 n 文件加载序列化对象,程序的内存消耗无关紧要。
您的内存消耗更多取决于您如何处理与您的“配方对象”有某种关联的“资源”的确切内部细节。
最后:做什么真的取决于你的要求。如果我们正在讨论一些小型java程序,这个程序应该放在一些“普通桌面”机器上;然后在你的JVM中保留500或1000个“实时”对象可能没问题;即使每个人消耗说500 KB的图片(但请注意,我们已经在这里轻松达到250 MB的RAM消耗!)。
但是,如果我们谈论在手机上运行的某些应用程序;肯定你不想要浪费250 MB内存并在那里保留500个对象。
因此,在大多数情况下,合理的方法更像是: