【发布时间】:2018-04-24 13:30:57
【问题描述】:
根据https://www.javonet.com/java-devs/guides/working-with-net-arrays-and-collections-from-java-with-javonet/ 中的示例,如果Java 调用的dll 返回一个int 数组,Javonet 将只显示一个Integer 类数组(而不是原语)。由于在我的情况下数组很大(大约 2GB 的数组),Javonet 有什么办法不自动装箱,而是返回一个基元数组?
【问题讨论】:
-
仅供参考:我问是因为数组中有 2GB 的原语,我假设装箱然后自动装箱会显着损害性能(基于我过去的自动装箱经验)
-
Jonathan 实际上当前用于 Int32 数组的 Javonet 将默认返回装箱的 Integer 数组。但是,我们确实同意您的建议,即应该可以得到纯 int[]。我们的开发团队正在为此努力,我希望我们能够为此发布一些热修复(可能需要大约 1-3 天)。
-
那太好了!这可能很明显,但在我们的例子中,它是我们提取的一个双精度数组和一个浮点数组(所有基元)。 (我之前提到整数只是为了使其与 Javonet 示例保持一致,但我认为应该(理想情况下)支持所有原语。)
-
另外,我很清楚,Javonet 是否会在内部将 Float 转换为浮动(我可以自己做),或者它是否足够聪明地意识到如果 .net 正在使用一个数组原语,它可以返回相同的原语数组(它甚至是相同的内存空间,以便我们避免不必要的复制中的 CPU 和内存周期吗?)
-
我们从 .NET 端接收原始格式的值,因此我们将仅从原始 Java 原始类型创建,而不是将装箱的类型转换为未装箱的类型。
标签: javonet