不在heap上的对象
比如这样普通的new会在heap上分配一个内存,然后这个对象的内存空间也会受到垃圾回收的控制,没有问题。
StringBuffer sbuffer = new StringBuffer()
那有什么方法可以创建一些“不在heap上的内存对象”(是不是等同于“不受垃圾回收控制的对象”)呢?
我知道有一个java nio里面有一个directByteBuffer好像是这样的特点。
http://download.oracle.com/javase/1.4.2/docs/api/java/nio/ByteBuffer.html
(The contents of direct buffers may reside outside of the normal garbage-collected heap, and so their impact upon the memory footprint of an application might not be obvious.)
不知道还有没有其它补充的,以及关于这些不在heap上的对象的特点和应用场景介绍。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
引用来自#3楼“rayeaster”的帖子
引用来自#2楼“CheckStyle”的帖子
Terracotta的BigMemory就是用了directByteBuffer的办法,达到管理100多G内存的能力。这些内存空间,不在Heap,不在JVM里,却是属于JVM所在进程的。
不过呢,这个思路意味这你得自己来管理对象的生命周期,就像写C那样,有手动的malloc,就得有显式的free。BigMemory给你做了这些个事情。如果你想自己实现一个类似的东西,务必要注意这点。
引用来自#2楼“CheckStyle”的帖子
Terracotta的BigMemory就是用了directByteBuffer的办法,达到管理100多G内存的能力。这些内存空间,不在Heap,不在JVM里,却是属于JVM所在进程的。
不过呢,这个思路意味这你得自己来管理对象的生命周期,就像写C那样,有手动的malloc,就得有显式的free。BigMemory给你做了这些个事情。如果你想自己实现一个类似的东西,务必要注意这点。
Terracotta的BigMemory就是用了directByteBuffer的办法,达到管理100多G内存的能力。这些内存空间,不在Heap,不在JVM里,却是属于JVM所在进程的。
不过呢,这个思路意味这你得自己来管理对象的生命周期,就像写C那样,有手动的malloc,就得有显式的free。BigMemory给你做了这些个事情。如果你想自己实现一个类似的东西,务必要注意这点。