0

这适用于我要求的 C 和 JAVA。

我有一个更新循环,它可能每秒运行几百次,无法确定。

我关心的主要是内存管理和会发生什么。

这是一个例子

public methodA(double Delta)
{
    double doubleTest = Delta;
    SomeObject newObject = new Object(Delta);
}

SomeObject newObject = new Object();
double doubleTest;
public methodB(double Delta)
{
    doubleTest = Delta;
    newObject.setUpdate(Delta);
}

现在我知道在 JAVA 中,methodA 是以性能为代价进行 GC 处理的,但在 C 或 C++ 中究竟发生了什么?在方法范围内声明的变量或对象会被破坏吗?如果是这样,哪个循环更好?(我们会在第二个循环中耗尽内存吗?)

此外,是否真的值得为方法更新预先创建对象?如果有的话,性能增益是多少?

4

3 回答 3

1

1. - 变量被破坏。

2. - 其次,如果你传入一个参数,它不需要在方法范围之外。

3. - 从写作的角度来看,将它们全部放在一行中会更有效。如果有的话,两者之间的内存占用非常小。

于 2013-08-13T04:31:30.930 回答
0
  1. 方法不是垃圾收集的。

  2. 我在您的代码中看不到任何循环,所以我对您的要求感到困惑。

  3. 您的两种方法做的事情非常不同,因此很难比较它们。首先,如今的编译器非常聪明(Java、C 和 C++)。除非 Object 的构造函数有副作用,否则一个合理的编译器可能会优化所有对methodA反正的调用,因为它什么都不做。

    methodB做的事情与 完全不同methodA,所以我不确定你为什么要比较两者。methodB调用newObject.setUpdate(),假设它有副作用,编译器不会删除它。当然,如果您从未newObject在其他任何地方实际使用过,编译器可能仍会确定它是不必要的,并优化所有对methodB.

无论如何,您的问题让我感到困惑,因为我不确定您具体要比较什么。

于 2013-08-13T04:31:39.363 回答
0

现在我知道在 JAVA 中,methodA 是以性能为代价进行 GC 处理的,但在 C 或 C++ 中究竟发生了什么?在方法范围内声明的变量或对象会被破坏吗?如果是这样,哪个循环更好?(我们会在第二个循环中耗尽内存吗?)

没有方法被垃圾收集的概念,只有引用被垃圾收集。局部变量范围仅限于为 Java 和 c++ 定义的方法/函数。但是在 c++ 中有一个例外,如果您使用 malloc/calloc 创建动态数据结构,那么除非您没有明确地这样做,否则该变量的内存将不会被释放。C++ 中没有垃圾收集器,因此您需要注意动态内存分配并释放该内存。这个责任在于 C++ 中的开发人员,而在 Java 中,JVM 垃圾收集器负责处理它。

于 2013-08-13T04:31:53.283 回答