an0*_*00b 2 java performance garbage-collection new-operator
在C和C++中,我知道在堆栈上实例化对象与使用"new"在堆上创建对象之间的性能可能会有很大差异.
这在Java中是一样的吗?
Java中的"new"运算符非常方便(特别是当我不必记住释放/删除使用"new"创建的对象时),但这是否意味着我可以疯狂地使用'new'?
嗯,java中没有其他方法来实例化对象.
创建所有对象new,并在堆上创建所有对象.
在Java中,当你说
MyObject foo;
Run Code Online (Sandbox Code Playgroud)
你只是声明一个变量(引用).直到你说,它才会被实例化
foo = new MyObject();
Run Code Online (Sandbox Code Playgroud)
当对该对象的所有引用都超出范围时,该对象变得易于垃圾收集.你会注意到deletejava中没有这样的东西:)
您无法在堆栈上创建对象,您只能在堆栈上具有基元和引用,因此该问题不适用于Java.
已经尝试使用转义分析来优化短暂的对象(并且可能将它们放在堆栈上)但是我没有看到任何证据表明这种改进的性能.
与C/C++不同的性能命中/好处的部分原因是Java在堆上具有线程本地分配,并且对象不会像往常一样被回收.C/C++具有线程本地堆栈,但您需要其他库以支持多线程对象分配.物体被更具侵略性地回收,这增加了物体分配的成本.
来自C/C++世界的最大变化之一是发现Java具有更少的功能,但尝试充分利用它们(JVM中有很多复杂的优化)另一方面Java有一个丰富/令人困惑的开源库.
| 归档时间: |
|
| 查看次数: |
863 次 |
| 最近记录: |