gpt4 book ai didi

java - ChronicleMap(以及更通用的堆外数据结构)实现?

转载 作者:行者123 更新时间:2023-11-29 03:16:43 24 4
gpt4 key购买 nike

OpenHFT 上的 ChronicleMap repository on Github在他们的文档中声明:

  Chronicle Map implements the java.util.concurrent.ConcurrentMap, that stores 
its data off the java heap.

我构建了一个编译器,并为一些分支语言的编译器实现做出了贡献。我用过的那个分配堆栈上的所有东西(这是代码生成期间可用的)。我从未研究过 JVM 和 java 编译器,但我知道通常只有堆和堆栈可用于分配类实例、局部变量、函数参数等。

有人能解释一下我们如何能够编写代码,我们可以告诉编译器实例化数据结构,例如 ChronicalMap,让它们可用于 JVM 的垃圾收集(并与 JVM 保持联系)一般内存管理功能),但生活在堆外?

我已经阅读了 simple construction documentation and the associate example .我看到了如何,但与 JVM 结合到底发生了什么的推理尚不清楚。

最佳答案

要记住的重要一点是,javac 编译器在优化方面并没有做太多事情,它也没有为您提供任何指定数据存储位置或代码应如何优化的方法. (在 Java 8 中有一些模糊的异常(exception),比如 @Contended)

Java 从通常在运行时运行的库中获得大部分可扩展性。 (通常还有一个构建时间选项)要认识到的一个关键点是 Java 程序可以在运行时生成和更改代码,因此实际上很多智能都是在运行时发生的。

在堆外使用的情况下,您需要一个支持此功能的库,这将直接或间接使用 sun.misc.Unsafe(在最流行的 JVM 上)此类允许您做许多语言不支持的事情,但如果您是低级库构建者,仍然非常有用。

虽然堆外内存不直接由 GC 管理,但您可以使用代理对象,例如ByteBuffer,它有一个 Cleaner,因此当这些对象被 GC 处理时,与其关联的堆外内存也会被清理。

免责声明,我编写了 ChronicleMap 的大部分内容。

关于java - ChronicleMap(以及更通用的堆外数据结构)实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26147651/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com