浏览 2417 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-11-06
那么为什么不能用显式的释放方案呢?因为如果添加入显式的释放方法的话,那么就会迫使java所有的对象也需要添加上显式的释放方法(你总不会希望释放自己对象的时候,对象内部的基本对象不会随之释放吧)。这样既破坏了java的体系结构,也使java失去了不会出现空指针的优点。所以,GC还是必须GC,我们必须寻找更好的策略来解决GC的弱点。 在应用中,经常会出现一次性对象这样对象,这类对象的特点是初始化一次,使用一次,然后等待被GC释放。这样的对象对于GC来说会是沉重的负担。因为GC对于这样的对象也必须查找一次引用。如果这类对象数量巨大,GC的时间将会相当的长。 在C或者C++中,我们通常在这种情况下把结构或者对象本身存储在栈中(而java是只储存指针)。我很奇怪为什么java不也这样做。哪怕是专门分配一个heap给栈中创造的对象也是好的。这样我们就能够轻易的指定一个对象的生存期,也能大大降低GC的压力。 另外,我们是否能考虑一种能够分組控制对象的方法。对组内对象的引用计数一律记载入组而不是记载在对象内。仅当组引用为0时再一次性的清除掉组内所有。这样理论上就会大大减少GC需要查询引用的数量。 以上两种方案都必须修改编译器以及jvm的实现才能做到。所以现在实现的可能还是非常的低。不过我认为如果实现,将会大大改善java在高性能应用中的不足。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-11-06
最后修改:2008-11-06
如果这样改,那你为什么不直接用cpp? C++ 0x都要引入GC了
|
|
返回顶楼 | |
发表时间:2008-11-06
cpp和java,我一般都是混用的...呵呵
谁叫java能力弱呢 |
|
返回顶楼 | |
发表时间:2008-11-06
最后修改:2008-11-06
JVM在Java 7中据说将加入内存逃逸分析,对于非逃逸行对象采用运行栈分配的方法。
比如: void doSomething(){ A a = new A(); a.doOtherthing(); } 这个方法产生的对象a是非逃逸的,Java 7的虚拟机可以检测这种对象的生成,将new A的对象放在运行时栈上产生。这种方法有很大的好处,开发人员不需要显示的声明某个对象是栈式分配,和以前的编程方式没有任何区别,又大大提升了内存管理效率。 |
|
返回顶楼 | |
发表时间:2008-11-06
关于java内存管理的问题,随着版本的变化也在不段地优化,更何况有一些更高效的jvm可选择。
|
|
返回顶楼 | |
发表时间:2008-11-06
dennis_zane 写道 如果这样改,那你为什么不直接用cpp? C++ 0x都要引入GC了
据闻c++0x最新定下的草案取消了直接的GC支持 引用 Transparent garbage collection
C++0x will not feature transparent garbage collection directly. Instead, the C++0x standard will include features that will make it easier to implement garbage collection in C++. Full garbage collection support has been remanded to a later version of the standard or a Technical Report. http://en.wikipedia.org/wiki/C%2B%2B09#Transparent_garbage_collection |
|
返回顶楼 | |