这适用于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中知道方法A是以性能为代价的GC,但在C或C ++中究竟发生了什么?在方法范围内声明的变量或对象是否会被破坏?如果是这样哪个循环更好? (我们是否会因第二个循环而失去记忆力?)
是否真的值得为方法更新预先创建对象?如果有的话,性能会有什么影响?
答案 0 :(得分:1)
1。 - 变量被破坏。
2. - 其次,如果您传入参数,则不需要在方法范围之外。
3。 - 从写作角度来看,将它全部放在一行会更有效率。如果有的话,两者之间的内存占用非常小。
答案 1 :(得分:0)
方法不是垃圾收集。
我的代码中没有看到任何循环,所以我对你的要求感到困惑。
你的两种方法做了很多不同的事情,因此比较它们很困难。首先,编译器现在非常聪明(Java,C和C ++)。除非Object的构造函数有副作用,否则合理的编译器可能会优化掉对methodA
的所有调用,因为它什么都不做。
methodB
做的事与methodA
完全不同,所以我不确定你为什么要比较这两者。 methodB
调用newObject.setUpdate()
,假定它有副作用,编译器不会删除它。当然,如果你从未在其他地方实际使用过newObject
,编译器仍然可以确定它是不必要的,并优化掉对methodB
的所有调用。
无论如何,你的问题让我感到困惑,因为我不确定你特意想要比较什么。
答案 2 :(得分:0)
现在我在JAVA中知道方法A是以GC为代价的 性能,但在C或C ++中究竟发生了什么?做变量或 在方法范围内声明的对象会被破坏吗?如果是这样的话 循环更好? (我们第二次会失去记忆吗? 循环?)
没有方法被垃圾收集的概念,只有引用被垃圾收集。 局部变量范围仅限于为Java和c ++定义的方法/函数。但是在c ++中有一个例外,如果你使用malloc / calloc创建动态数据结构,那么在你没有明确地这样做之前,该变量的内存不会被释放。 C ++中没有垃圾收集器,所以你需要注意动态内存分配并释放内存。这个责任在于C ++中的开发人员,而在Java中,JVM垃圾收集器负责处理它。