2015-06-11 66 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,它看起來好像沒有壓縮垃圾收集器,所以固定不會成爲問題,但是庫仍然維護着一個「全局引用」列表。

所以看起來你很安全!

相關問題