不在heap上的对象

发布于 2021-11-12 21:22:36 字数 535 浏览 887 评论 3

比如这样普通的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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

画骨成沙 2021-11-14 20:09:02

引用来自#3楼“rayeaster”的帖子

引用来自#2楼“CheckStyle”的帖子

Terracotta的BigMemory就是用了directByteBuffer的办法,达到管理100多G内存的能力。这些内存空间,不在Heap,不在JVM里,却是属于JVM所在进程的。

不过呢,这个思路意味这你得自己来管理对象的生命周期,就像写C那样,有手动的malloc,就得有显式的free。BigMemory给你做了这些个事情。如果你想自己实现一个类似的东西,务必要注意这点。

月亮是我掰弯的 2021-11-14 03:18:55

引用来自#2楼“CheckStyle”的帖子

Terracotta的BigMemory就是用了directByteBuffer的办法,达到管理100多G内存的能力。这些内存空间,不在Heap,不在JVM里,却是属于JVM所在进程的。

不过呢,这个思路意味这你得自己来管理对象的生命周期,就像写C那样,有手动的malloc,就得有显式的free。BigMemory给你做了这些个事情。如果你想自己实现一个类似的东西,务必要注意这点。

情绪失控 2021-11-13 00:03:21

Terracotta的BigMemory就是用了directByteBuffer的办法,达到管理100多G内存的能力。这些内存空间,不在Heap,不在JVM里,却是属于JVM所在进程的。

不过呢,这个思路意味这你得自己来管理对象的生命周期,就像写C那样,有手动的malloc,就得有显式的free。BigMemory给你做了这些个事情。如果你想自己实现一个类似的东西,务必要注意这点。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文