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

Processor usage when using byte and short data types in Java

我在 从 Java 开始阅读了以下内容。从控制结构到数据结构 - 第 67 页 Tony Gaddis 的第 3 版

When values of the byte or short data types are used in arithmetic expressions, they are temporarily converted to int values.

这是指Java。

我想知道是否使用 byte 或 short 数据类型进行数学运算,虽然它们节省内存,但由于转换为 int 数据类型而不是仅使用 int 数据会增加处理器使用率类型。

例如:

是否这样做:

byte x = 2;
byte y = 3;
int z = x + y;

使用 比这个处理器多:

int x = 2;
int y = 3;
int z = x + y;

我了解到第一个示例使用的内存较少。而且我也知道处理器使用率的差异(如果有的话)将非常轻微。

是的,如果您需要执行计算,将信息存储为字节或字节数组会增加处理器的负载。

通常没有理由将您的 int 保存为字节,除非您要存储如此多的它们太长时间以至于它们将填满您的可用 HEAP space。如果您只是将它们存储几个周期以执行计算,那么您可能不需要将它们存储为字节,因为一旦您不再使用它们,它们将被 GC 自动删除。

另一种选择,如果您要在 int 上一遍又一遍地使用同一组,并将它们存储很长一段时间,可能是创建一个整数池。通过这样做,您可以在内存中创建一个包含 100 万个唯一整数的池,并且只要您想使用该特定 int 执行计算,只需在内存中保存指向该整数的指针。根据您的应用程序,这可能比将每个单独的 int 保存为一个字节节省更多 space...

在不了解您的特定应用程序的更多信息的情况下,很难推荐特定的操作过程。你能提供更多信息吗?

为了进行计算(如 x+y),处理器需要将 x 和 y 加载到寄存器中(取决于体系结构,但至少 x 或 y 中的一个应该在寄存器中)。寄存器的大小为 32 位或 64 位(至少在可以使用 Java 的平台上是这样)。因此,这个值无论如何都会转换为 32(64) 位整数。它是自动完成的,不会消耗额外的 CPU 资源。所以计算速度将是相同的。