我试图理解JVM如何在内部实现基本类型的数组,如int []
我的问题分为两部分:
1 - 它是否在内部使用ByteBuffer?我在哪里可以找到源代码,然后根据我的需要进行更改(制作我自己的修改后的JVM)。
2 - 有没有办法欺骗javac
不使用int []
的内置实现,而是使用库中提供的实现,比如classpath -cp
?这可能吗?如何?
我的动机是在JVM之外的内存中声明这个int []
(使用allocateDirect()
)并从本机JNI代码访问它。这应该避免内存复制开销。
-B
答案 0 :(得分:0)
int []是原始类型。 ByteBuffer可能基于int [],但相反的情况肯定不是真的。它几乎是一个字对齐的连续内存块,32位值存储在块的每个字中。有几个JVM是开源的,如果你真的想看,你可以去查看代码,但它会是高级的东西。
没有简单的方法可以做到这一点。
听起来你正试图以非常复杂的方式做事。描述您尝试解决的实际问题可能更好,而不是询问尝试解决该问题的问题。
答案 1 :(得分:0)
您可以使用sun.misc.Unsafe来分配和访问原始共享内存,而不是使用Java IntBuffer或JNI。这是危险的,但它是从Java和另一个进程访问共享内存的绝对最快的方式。
不安全方法的有用指南是here。