java程序能不能手动gc_java中到底该不该手动调用gc?Objective-c 和 Java

博客探讨了手动调用Java GC在特定情况下的效果,指出虽然不能强制执行,但有时可帮助释放内存。同时,文章对比了Objective-C和Java的性能,提到Objective-C在内存管理和CPU调度上的优势,但Java的GC可能导致性能开销。最后,讨论了Android和iOS系统的资源管理差异,以及它们对应用程序体验的影响。
摘要由CSDN通过智能技术生成

应用中碰到①个问题,用ImageIO的read方法读取图片时,占用很大内存,同事建议手动调用gc,之前了解到的手动调用了也未必立即释放,但是试验了,手动调用后确实可用内存大了许多,谁能解释①下,谢谢......

只说题主的例子 将单个图片加载到内存中 其大小超过-XX:PretenureSizeThreshold指定的值 导致直接进入老年代(或者是处理时间过长几次minor gc后被扔到老年代 -XX:MaxTenuringThreshold) 而题主知道这个图片的生命周期不需要进入老年代 解决这种问题的方式有几种

重用buffer 在能控制请求数的情况下尽量重用缓冲区 不再进行申请

调整上面两个参数调用System.gc()看题主勤劳度了

JVM对GC的控制权是非常强大的,作为用户你只能申请不能强制。但是手动调用会在很大程度上启动GC,所以如果真的非常需要释放内存的场景手动强制①下也是好的

-XX:-DisableExplicitGC

OC效率略高。

oc方法调用的需要经历查缓存,查方法表,查父类方法表,如果都差不多就会进行动态方法决议,如果还是不行,就执行消息转发机制,如果还是无法处理就crash。这个链路虽然很长,但是大部分在方法缓存的时候就命中了,oc的runtime机制会增加①些函数调用开销,但是苹果加入了函数缓存机制,当缓存生效时性能与c相差无几。

Android⑤.⓪ 之前用的 dalvik 虚拟机,默认还是解释执行的 。⑤.⓪ 应该是安装的时候就已经编译成机器码了。解释字节码成机器码,肯定要比直接编译成机器码要慢,而且编译优化应该没有编译语言好。当然对于经常执行的字节码虚拟机也会缓存成机器码。不做Android好多年,如有错

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值