Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 基元类型之间的强制转换是否会导致堆分配?_Java_Jvm - Fatal编程技术网

Java 基元类型之间的强制转换是否会导致堆分配?

Java 基元类型之间的强制转换是否会导致堆分配?,java,jvm,Java,Jvm,下面的Java示例会在任何JVM p.position.x和p.position.y中创建堆分配吗 p.position.x = (float)(Math.cos(radians) * 30) + x; p.position.y = (float)(Math.sin(radians) * 30) + y; 同样,下面的隐式示例: float tempX = 0; float tempY = 0; tempX += (Math.cos(p.currentOrbitDegrees) * 30)

下面的Java示例会在任何JVM p.position.x和p.position.y中创建堆分配吗

p.position.x = (float)(Math.cos(radians) * 30) + x;
p.position.y = (float)(Math.sin(radians) * 30) + y;
同样,下面的隐式示例:

float tempX = 0;
float tempY = 0;

tempX += (Math.cos(p.currentOrbitDegrees) * 30) + x;
p.position.x = tempX;

tempY += (Math.sin(p.currentOrbitDegrees) * 30) + y;
p.position.y = tempY;

另外,在所有JVM中,一种方法可能比另一种方法更快吗?

问题中的任何代码都不会导致堆分配

通常,转换可能导致堆分配的唯一情况1是装箱,以及当其中一个操作数不是字符串时使用字符串串联运算符+进行的转换

另外,在所有JVM中,一种方法可能比另一种更快吗

不,不太可能。跨所有JVM

某些平台上的JIT可能会优化冗余初始化,而不是其他平台上的。因此,这两个代码段的相对性能将取决于平台

事实上,对于足够老的JVM来说,这种差异可能是显著的;i、 当JIT编译器成为新技术时。。。或者之前

然而:

如果我们考虑java的未来版本,它还没有被发布/预先发布,那么整个问题是客观的无法回答的。 你不应该依赖其他人的直觉。要科学。对应用程序进行基准测试并在多个平台上运行。然后使用分析器来决定是否值得优化这部分代码

但是对于您提供的示例,第一个版本显然是编写代码的简单方法,因此应该是首选


1-从技术上讲,这些转换不是由类型强制转换本身完成的,但它们可能发生在类型强制转换指定的加宽或缩小转换之前或之后。

堆分配编号。一种方法可能比另一种方法更快。如果有,不管怎样,编译器都会对其进行优化。有消息告诉我堆分配错误来自您的系统中的其他地方code@Michael你应该把它作为这个问题的答案。@rabbitguy-OP从来没有说过有错误