有人告诉我,直接使用数字而不是静态的最终int字段可以节省内存,这是真的吗?

时间:2012-05-09 08:07:51

标签: java android memory-management constants magic-numbers

在我的Android项目中,有许多constances来表示bundle额外的键,Handler的消息参数,dialog ids ant等。 我团队中的某个人使用一些正常数字来执行此操作,例如:

handler.sendMessage(handler.obtainMessage(MESSAGE_OK, 1, 0));
handler.sendMessage(handler.obtainMessage(MESSAGE_OK, 2, 0));
handler.sendMessage(handler.obtainMessage(MESSAGE_OK, 3, 0));
处理程序中的

switch (msg.arg1) {
case 1:
    break;
case 2:
    break;
case 3:
    break;
}
他说太多静态的最终常量会占用大量内存。但我认为他的解决方案使代码难以阅读和重构。

我已经阅读了这个问题并且搜索了很多内容而未能找到答案。 java: is using a final static int = 1 better than just a normal 1?

我希望有人能告诉我静态决赛的记忆成本。

抱歉我的英语不好。

3 个答案:

答案 0 :(得分:5)

您不应该费心将其更改为文字,它会降低您的代码的可读性和维护性。

从长远来看,你将受益于这种“失去记忆”

答案 1 :(得分:2)

从技术上讲,他是对的 - 静态int字段会花费额外的内存。

但是,成本可以忽略不计。它是一个int,加上反射支持的相关元数据。使用有意义的名称使您的代码更具可读性的好处,并确保该数字的语义是众所周知的,并且在使用它时始终如一,显然超出了成本。

你可以做一个简单的测试。编写一个小型应用程序,使用不同的数字文字调用handler.sendMessage 1000次,构建它并记下.dex文件的大小。然后用1000个静态int consts替换1000个文字,并执行相同的操作。比较两种尺寸,您将了解应用程序所需的额外内存的数量级。 (只是为了完整性,在这里发布评论作为评论: - ))

答案 2 :(得分:0)

它节省了非常少量的内存 - 基本上只是在相关类中记录额外常量所需的额外元数据,并从其他类中引用它。

不值得担心这一点,除非你受到极大的记忆限制。

从长远来看,使用命名良好的静态最终常量而不是神秘的魔术数字对于您的代码可维护性和完整性来说要好得多。