2015-06-11 36 views

回答

1

Dalvik从未有过移动物体的GC。我们做了必要的准备工作,比如明确固定对象,但是在复制收集器的开发越来越严重的时候(2011年中),所有开发工作都转移到了Art。

“全局引用”列表包含所有JNI全局引用。在早期,VM发布了原始指针,因此任何对JNI可见的引用都需要被固定,这意味着所有由本地或全局JNI引用引用的对象都是不可移动的。在ICS(?)版本中,Dalvik的JNI切换为间接引用,这意味着我们只需锁定显式固定为直接访问的基元数组。 (如果您从链接的更改中取回日志中的一些提交,可以看到一些work in progress。)

间接引用代码由于某些代码深度而未推出几年在假定JNI引用的Android框架的核心是唯一不变的值。拷贝收集器的工作还没有开始,间接的参考引起了轻微的性能损失,所以没有太多的动机来弄乱平台的肠子。

1

看了看源代码,JNI库在2009年明确提到code added(所以Android 2.1,API级别7)。 Before that,它看起来好像没有压缩垃圾收集器,所以固定不会成为问题,但是库仍然维护着一个“全局引用”列表。

所以看起来你很安全!

相关问题