Java 编年史映射(以及更通用的堆外数据结构)实现?

Java 编年史映射(以及更通用的堆外数据结构)实现?,java,concurrency,compiler-construction,jvm,chronicle-map,Java,Concurrency,Compiler Construction,Jvm,Chronicle Map,OpenHFT文档中的状态历史地图: Chronicle Map implements the java.util.concurrent.ConcurrentMap, that stores its data off the java heap. 我构建了一个编译器,并为一些非主流语言的编译器实现做出了贡献。我曾经使用过的方法是分配堆栈上的所有内容(这是代码生成过程中可用的)。我从未使用过JVM和java编译器,但我知道通常只有堆和堆栈可用于分配类、局部变量、函数参数等的实例 有人

OpenHFT文档中的状态历史地图:

  Chronicle Map implements the java.util.concurrent.ConcurrentMap, that stores 
  its data off the java heap. 
我构建了一个编译器,并为一些非主流语言的编译器实现做出了贡献。我曾经使用过的方法是分配堆栈上的所有内容(这是代码生成过程中可用的)。我从未使用过JVM和java编译器,但我知道通常只有堆和堆栈可用于分配类、局部变量、函数参数等的实例

有人能解释一下我们是如何编写代码的吗?我们可以告诉编译器实例化诸如ChronicalMap之类的数据结构,让JVM对它们进行垃圾收集(并跟踪JVM的一般内存管理特性),但不依赖堆


我已经读过这本书了。我看到了
如何
,但与JVM结合到底发生了什么还不清楚。

需要记住的一件重要事情是
javac
编译器在优化方面做得不多,也没有为您提供任何指定数据存储位置或代码优化方式的方法。(在Java8中有一些模糊的例外,比如@contemped)

Java的大部分可扩展性来自于通常在运行时运行的库。(通常也有一个构建时选项)需要意识到的一个关键点是Java程序可以在运行时生成和修改代码,因此实际上大部分智能都是在运行时发生的

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

虽然堆外内存不是由GC直接管理的,但是您可以使用代理对象,例如
ByteBuffer
,这些代理对象具有
清理器
,以便在对这些对象进行GC清理时,也会清理与其关联的堆外内存


免责声明,我写了大部分编年史地图。

需要记住的一件重要事情是,
javac
编译器在优化方面做得不多,也没有为您提供任何指定数据存储位置或代码优化方式的方法。(在Java8中有一些模糊的例外,比如@contemped)

Java的大部分可扩展性来自于通常在运行时运行的库。(通常也有一个构建时选项)需要意识到的一个关键点是Java程序可以在运行时生成和修改代码,因此实际上大部分智能都是在运行时发生的

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

虽然堆外内存不是由GC直接管理的,但是您可以使用代理对象,例如
ByteBuffer
,这些代理对象具有
清理器
,以便在对这些对象进行GC清理时,也会清理与其关联的堆外内存


免责声明,我写了大部分编年史地图。

堆外术语指的是在java中使用“原始”内存缓冲区的能力。这些可能是进程地址空间中的常规内存缓冲区,也可能是内存映射文件


这些缓冲区是“原始的”——您自己管理它们的内容——它们不是由垃圾收集器管理的。

堆外术语指的是在java中使用“原始”内存缓冲区的能力。这些可能是进程地址空间中的常规内存缓冲区,也可能是内存映射文件


这些缓冲区是“原始的”——你自己管理它们的内容——它们不是由垃圾收集器管理的。

很少有Java开发人员知道你可以这样使用堆外缓冲区,更不用说如何使用它编写代码了,这就是为什么有库隐藏这些细节的原因。很少有Java开发人员知道你可以这样使用堆外缓冲区,更不用说如何使用它来编写代码了,这就是为什么有库可以隐藏这些细节。Peter,谢谢你的回答和对编年史地图的深入了解,我将研究
sun.miscm.safe
Cleaner,
,并阅读更多关于它们的信息。我也是你在S.O.上的许多答案的忠实粉丝,谢谢!(小世界看你怎么写编年史地图,没想到会这样!哈哈)希望你有一个伟大的一周@DevarshDesai我的公司是我需要一张新照片;)彼得,谢谢你的精彩回答和对编年史地图的一点深入了解,我将查看
sun.miscm.Unsafe
Cleaner,
并阅读更多关于它们的信息。我也是你在S.O.上的许多答案的忠实粉丝,谢谢!(小世界看你怎么写编年史地图,没想到会这样!哈哈)希望你有一个伟大的一周@DevarshDesai我的公司是我需要一张新照片;)谢谢你的一点见解,感谢你的时间,奥菲尔!谢谢你的一点见解,感谢你的时间,奥菲尔!