获取加载的方法计数?

时间:2013-11-14 19:40:39

标签: android dalvik

丹·博恩斯坦说

  

the bytecode instruction set doesn't have a way to refer to method numbers requiring more than 16 bits.

...对于任何放弃二级dex加载的人来说这有点令人担忧,因为他们正在开发一个大型,庞大的应用程序,它可以达到64K方法 / 文件限制。听起来,是的,你可以拥有一个拥有数十万种方法的应用程序,但是这样做你已经构建了一个定时炸弹:迟早,一些持久用户将运用足够的代码路径,Dalvik加载足够的类加载方法计数超过65,536,您的应用程序将崩溃。

我们是facing just this issue,我被问到是否有办法找出实际加载了多少方法。我在JavaDoc中搜索并做了一些谷歌搜索,然后空白。因此我的问题是:

有没有办法在运行时找出实际加载了多少方法? (无需重新编译Dalvik以显示此信息!)

1 个答案:

答案 0 :(得分:2)

64K方法限制不是关于VM在运行时存在多少个方法。它是关于在单个DEX文件中引用了多少个方法。在" dx"转换过程。

(如果查看方法调用指令的bytecode format,您会看到它们包含目标方法的16位索引。该索引是针对每个DEX文件表的,而不是VM全局表。)

唯一相关的运行时限制是存储类,字段和方法的元数据(vtable等)所需的内存量。这是Facebook hacked around使他们的大型应用程序在旧版Android上运行的原因。