gpt4 book ai didi

java - 在游戏循环中创建新对象与重用临时对象

转载 作者:太空宇宙 更新时间:2023-11-04 10:00:29 25 4
gpt4 key购买 nike

有一个 Point 类,它包含两个 float 并可以对它们进行赋值。 Boat 类还有一个船对象,它有 setPosition 方法,只能分配 Point 类。

    Point temp = new Point(0.0f, 0.0f);

while (true) {
temp.setX(boat.getX() + 1.0f);
temp.setY(boat.getY());
boat.setPosition(temp);
}

对比

while (true) {
boat.setPosition(new Point(boat.getX() + 1.0f, boat.getY()));
}

第一种方法的执行速度会比第二种方法快吗?对我来说,第二个运行速度是第一个的两倍,迭代了 20 亿次,它不是应该由 JVM 优化吗?

最佳答案

如果在实际应用程序中,您将不会检测到显着的性能差异。创建像 Point 这样的小对象不太可能成为性能瓶颈,因为大部分工作将在 Boat.setPosition() 内部进行。 “过早的优化是万恶之源”(c)。 JVM 优化是一门艺术,您永远无法仅通过查看来判断哪个代码更快(当然,除了明显的情况)。

考虑到这一点,您应该专注于代码的设计和可读性。一般来说,您不应该重用像 Point 这样的小值对象。

在第一种方法中,您将在代码中的许多地方使用相同的对象,并且对其所做的任何更改都将在引用它的所有对象中可见,这使得您的代码难以理解、维护并可能出现错误。

使用不可变对象(immutable对象)(您的第二个代码片段)的方法是一个更好的设计。在这种情况下,您应该倾向于使用不可变对象(immutable对象)。 JVM 非常擅长管理小的、短命的对象。您可能想查看https://immutables.github.io/或 Kotlin 数据类(如果您决定在代码中使用不可变对象(immutable对象))。

关于java - 在游戏循环中创建新对象与重用临时对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53570986/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com