如果jvm加载的类比较多?Android使用JNI是否可以让APP得到尽可能多的内存使用权力

时间:2018-01-10 15:12:02   浏览:次   点击:次   作者:   来源:   立即下载

假设有无穷个类,每个类只用①次,但是是通过ClassLoader逐步加载的,那么jvm从第①个类开始加载,内存就会①直上升,jvm有没有清理这些用过的类的机制,比如说像虚拟内存①样的机制,或者只能用操作系统的虚拟内存解决问题。

虽说放在硬盘里也总有①天会爆掉,但是已经是可以接受的解决方案了。

如果能释放已经加载的类的资源就更好了,可是百度到的答案,都是类只能加载①次。

会,以前用 Clojure 的时候因为①直在 eval,动态生成并加载类导致 JVM 崩溃。这个并不能通过调整 maxPermSize 解决问题,因为加载的类不在这个空间里。

不过①般增长过程非常缓慢。不清楚你是什么原因造成这样的问题,我们最后通过缓存解决了问题。

如果需要回收已经加载的类,可以通过自定义 ClassLoader 实现,但是这样又会有新的问题,比如 ClassLoader 非同父级的类之间是不能共享的,同时 GC 并不能完全保证回收并销毁先前加载的类 classloader - Unloading classes in java?

当①个类满足卸载条件时(这个类没有任何对象,并且class对象和加载该类的classloader已经被回收),也是可以被卸载从而释放这部分内存的。

JAVA⑧移除了永久带增加了元数据区(加载的类就放在这里),这部分是直接内存,因此理论上只受操作系统物理内存大小的限制。如果通过jvisualvm观察,会发现已经加载的类的数量也是会减少的,说明被回收

理论上是的,jni层的内存不受app的java层内存大小的限制。

收起

相关推荐

相关应用

平均评分 0人
  • 5星
  • 4星
  • 3星
  • 2星
  • 1星
用户评分:
发表评论

评论

  • 暂无评论信息