gpt4 book ai didi

android - 为什么 JNI 全局引用有最大数量限制?

转载 作者:行者123 更新时间:2023-12-04 23:53:45 29 4
gpt4 key购买 nike

众所周知,JNI 是 Java 和 C++ 之间的桥梁。最近在编写一个Java项目,主要模块是基于C++的,需要存储大量的GlobalReference。并且会随着 Activity 的开启而增加。因此,GlobalReferences 的最大数量 (65535) 成为一个严重的问题,我必须使用特殊的方法来解决这个问题。

所以我对为什么 GlobalReferences 有限制很感兴趣。是否仅用于检测内存泄漏 as other's saying

最佳答案

“为什么”这个问题很容易回答。 Android JVM(无论是 Dalvik 还是 ART)中的全局引用表的条目数量有限,因为它的架构师认为没有人需要更多。

他们有不同的限制需要担心:内存限制、性能、稳定性、维护工作。

但毕竟,这更像是一个修辞问题,与实际建议相比,对它的回答更不相关。以下是:

  • Android JVM 中引用表的限制仍然存在。不要期望这些表格在下一个 Android 版本中变得更大(但也许其中一些会)

  • 无论 Android 的 future 版本发生什么变化,当前版本都会保留下来。数百万人是still using Android devices with Gingerbread ,于 2010 年发布(20 亿的 0.6%)。截至today ,超过 20% 的人在他们的设备上安装了 Dalvik JVM。

  • 如果您达到或接近内部 JVM 表的限制,您必须重新考虑您的架构。当这些表溢出时,您不能相信系统的行为,即使这种情况并非每次都发生。

  • 请记住,您的应用可用的内存也是有限的,您使用的内存越多,您的应用在多任务环境中的性能就越有可能受到影响:如果其他应用需要内存,内核可以随时终止它.

  • 如果在 Java 端聚合对象,则可以避免表溢出。例如。您可以将它们放在 Java 映射或数组中,并在 C++ 中保留对集合的全局引用,而不是保留对数千个对象的全局引用。您可以使用 JNI 在 C++ 中管理集合以访问 Map.put()Map.remove .

关于android - 为什么 JNI 全局引用有最大数量限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45384947/

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