gpt4 book ai didi

java - java/静态模拟中静态调用中创建的对象

转载 作者:行者123 更新时间:2023-12-01 12:34:33 25 4
gpt4 key购买 nike

假设我在java中有一个静态方法。我将静态方法包装在这样的方法中,这样我就可以通过模拟新的 getInterestingString 方法来“模拟”测试中的静态方法:

Class AClass{

private static String getStaticString(int parameter){
Something something = new Something(parameter);
return something.doSomethingThatReturnsAString();

}

public String getInterestingString(int parameter){
AClass.getStaticString(parameter);
}

}

在阅读了静态模拟框架的工作原理之后,我对框架操纵字节代码以模拟其响应的想法并不感到兴奋,这有点黑客攻击。

当正确使用时,静态调用是有用的(就像任何有用的东西一样),但是假设我正在重构一个遗留应用程序,其中存在静态调用,无论我喜欢与否,我都必须处理它们,并且我想要使静态调用像上面一样可模拟,并且由于时间限制,我无法更改静态方法。

我的主要问题:因此,在静态方法中创建了一个对象:返回结果后就不再需要它了。会发生什么?我需要担心效率吗?

其他东西:帮助我解决我在这里所说的任何问题,或者如果此方法已在某处记录,请告诉我,因为我不想毒害我的代码库,而且我什么都不知道。

最佳答案

My main question: So an object gets created in static method : it isn't needed after the result has been returned, ever. What happens? Is it something I need to worry about efficiency wise?

如果没有对该对象的引用,则 GC 将在将来的某个时刻释放该对象。在现代平台上,这种方式的开销非常低,分配的成本通常只是线程本地指针的碰撞以及对象初始化/构造函数的成本。 GC 的成本是免费的,因为 GC 的成本与堆上有多少可到达的对象有关。该对象将无法访问,因此不会产生 GC 成本。我应该注意,我假设该对象没有析构函数方法;如果这样做,就会产生成本;但如今谁使用这些呢?如果对该对象的引用确实存活了足够长的时间以进行 GC,则成本将是检测该对象是否可达以及在幸存者空间之间复制该对象所需的时间。对于任何正常大小的物体来说,这都以微秒为单位进行测量;大对象(例如大数组)可能需要更长的时间来复制。

在正常应用中,这种微小的成本无需担心。然而,如果它出现在具有数百万次迭代的循环中(这在金融或科学计算中并不罕见),那么成本就会被放大,并且会面临高 GC 负担的风险。在非常低延迟的应用程序中,必须避免 GC 暂停,因此任何分配对象的操作都有可能使时间更接近下一次 GC 暂停,因此应该避免。然而,对于所有其他应用程序和单元测试来说,不必担心微秒成本低。仅仅打印到标准输出会花费更多。

关于java - java/静态模拟中静态调用中创建的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25698880/

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