我有以下三种方法:

 public static void test1(Point point)
    {
        Handler.doSomething(point.x / 2.0f, point.y / 1.75f);
    }

    public static void test2(Point point)
    {
        Handler.doSomething(point.x / 2.0f, point.y / 0.55f);
    }

    public static void test3(Point point)
    {
        Handler.doSomething(point.x / 2.0f, point.y / 1.25f);
    }

每次调用这些方法中的一个时,都会执行除法. Java中是否有某种类型的池可以避免重复最近的算术运算? 因为如果没有,那么第一次保存结果可能会更好,这样我就可以避免多次进行这种除法? 例如,我知道一个事实,Java有字符串池.

推荐答案

引用Josh Bloch的Effective Java 3rd Edition,第6项("避免创建必要的对象"):

...通过维护您自己的对象池来避免创建对象不是一个好主意,除非池中的对象非常重量级[如数据库连接]……然而,一般而言,维护您自己的对象池 使您的代码变得混乱,增加内存占用,并损害性能.现代 JVM实现具有高度优化的垃圾收集器,可以轻松地在轻量级对象上超越此类对象池

算术运算是很便宜的,即使你反复做.在某些情况下,JVM优化甚至可以避免创建对象.

因此,在您有证据表明您的程序将从对象池中受益之前,不要try 使用对象池.

Java相关问答推荐

Java WireMock定义存根在Cucumber并行执行的多线程测试中失败

屏蔽字母数字代码的Java正则表达式

如何在Java中声明未使用的变量?

Java 8中的多个字段和计数

所有 case 一起输入时输出错误,而单独放置时输出正确

如何在运行时动态创建表(使用Java、JPA、SprringBoot)

第三方Jar pom.xml

在Eclipse中数组的可空性

Domino Designer 14中的保存代理添加了重影库

如何仅使用键/ID的一部分(组合)高效地返回映射值?

如何在JavaFX循环中完美地制作一个AudioClip/MediaPlayer?

为什么有两种实现来检索数组类的组件类型?

二进制数据的未知编码/序列化

如何在Java中为thunk创建映射器函数

在Spring Boot JPA for MySQL中为我的所有类创建Bean时出错?

JavaFX,GridPane:在GridPane的列中生成元素将保持所有列的宽度

为什么没有加载java.se模块?

我无法在我的Spring Boot应用程序中导入CSV依赖项

如何在更改分辨率时将鼠标坐标计算为世界坐标

Java 21保护模式的穷尽性