【发布时间】:2011-08-22 14:29:16
【问题描述】:
只是想解决我在这里遇到的一个小问题。
目前,我正在开发一个应用程序,该应用程序涉及将文件列表收集到内存中,以便删除。现在,在这一点上,我认为 java.io.File 数组可能会占用太多内存,因为此上下文中的文件列表可能有数百个可能的条目。
我认为收集文件名列表并将它们存储为 java.lang.String 会更节省内存,而不是用 File 对象列表消耗过多的内存。现在,这是我的问题:考虑到要删除这些文件的目标,其中哪些会更便宜:
- 存储文件对象数组而不是字符串对象,并调用 .delete();循环中的每一个(使用的内存过多)。
- 使用文件名存储字符串对象数组,但对于循环的每次迭代,使用文件名列表创建一个新的文件对象,然后调用 .delete();在该文件上(这意味着每次循环迭代时,都会创建和销毁一个新的 File 对象——可能使用了过多的处理器能力)。
我想让程序尽可能快,所以任何一种方法都有其优点,我只想看看哪一种方法的开销最小。提前致谢!
【问题讨论】:
-
你都试过了吗?哪个更快?这是一个理论上很难回答的问题。
-
过早优化是万恶之源
-
你确认
File数组占用太多内存了吗?当然,Java 的File对象的大小大于零,但它们只是对文件系统位置的引用。它们不会将文件内容隐式传输到您的程序中。 -
@Kevin:适当强调过早的;在较弱的 Droids 上,这可能实际上是相关的(不确定这是否真的是 ,OP 没有在那里共享足够的上下文)。
-
使用
File数组,除非部署后的基准测试表明该方法存在问题。谢谢。
标签: java arrays string file for-loop