如何在JVM中实现Java int []数组?

时间:2014-03-07 10:41:37

标签: java arrays performance jvm java-native-interface

我试图理解JVM如何在内部实现基本类型的数组,如int []

我的问题分为两部分:

1 - 它是否在内部使用ByteBuffer?我在哪里可以找到源代码,然后根据我的需要进行更改(制作我自己的修改后的JVM)。

2 - 有没有办法欺骗javac不使用int []的内置实现,而是使用库中提供的实现,比如classpath -cp?这可能吗?如何?

我的动机是在JVM之外的内存中声明这个int [](使用allocateDirect())并从本机JNI代码访问它。这应该避免内存复制开销。

-B

2 个答案:

答案 0 :(得分:0)

  1. int []是原始类型。 ByteBuffer可能基于int [],但相反的情况肯定不是真的。它几乎是一个字对齐的连续内存块,32位值存储在块的每个字中。有几个JVM是开源的,如果你真的想看,你可以去查看代码,但它会是高级的东西。

  2. 没有简单的方法可以做到这一点。

  3. 听起来你正试图以非常复杂的方式做事。描述您尝试解决的实际问题可能更好,而不是询问尝试解决该问题的问题。

答案 1 :(得分:0)

您可以使用sun.misc.Unsafe来分配和访问原始共享内存,而不是使用Java IntBuffer或JNI。这是危险的,但它是从Java和另一个进程访问共享内存的绝对最快的方式。

不安全方法的有用指南是here