我在开始使用Java时阅读了以下内容。从控制结构到数据结构 - 第5版由Tony Gaddis在第67页:
当在算术表达式中使用字节或短数据类型的值时,它们会临时转换为int值。
这是指Java。
我想知道使用字节或短数据类型进行数学运算虽然节省了内存,但由于转换为int数据类型而增加了处理器使用量,而不是仅使用int数据类型。
例如:
这是:
byte x = 2;
byte y = 3;
int z = x + y;
使用处理器的 更多 :
int x = 2;
int y = 3;
int z = x + y;
据我所知,第一个示例使用的内存较少。而且我也明白处理器使用的差异(如果有的话)会非常轻微。
答案 0 :(得分:2)
为了进行计算(如x + y),处理器需要在寄存器中加载x和y(取决于体系结构,但至少在x或y上应该在寄存器中)。寄存器的大小为32或64位(至少在可以使用Java的平台上)。因此,这些值无论如何都被转换为32(64)位整数。它是自动完成的,不会消耗额外的CPU资源。因此计算速度将是相同的。
答案 1 :(得分:0)
是的,如果需要执行计算,将信息存储为字节或字节数组将会增加处理器的负载。
通常没有理由将你的int保存为字节,除非你要将这么多的存储器存储太久以至于它们将填满你可用的HEAP空间。如果您只是将它们存储几个周期来执行计算,那么您可能不需要将它们存储为字节,因为一旦您不再使用它们,它们将被GC自动删除。
另一种选择,如果你要在int上反复使用同一个组,并将它们存储很长一段时间,可能就是创建一个Integers池。通过执行此操作,您可以在内存中创建一个100万个唯一整数的池,并且只要您想要使用该特定int执行计算,只需在内存中保存指向该Integer的指针。这可能最终会节省更多空间,而不是将每个int保存为一个字节,具体取决于您的应用程序......
如果不了解您的特定应用程序,很难推荐特定的行动方案。你能提供更多信息吗?