如果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星
- 暂无评论信息