在Java中使用字节和短数据类型时的处理器使用情况

时间:2015-05-06 17:07:39

标签: java variables math processor

我在开始使用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;

据我所知,第一个示例使用的内存较少。而且我也明白处理器使用的差异(如果有的话)会非常轻微。

2 个答案:

答案 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保存为一个字节,具体取决于您的应用程序......

如果不了解您的特定应用程序,很难推荐特定的行动方案。你能提供更多信息吗?