楼上的手动调用System.gc只是说告诉JVM该启动垃圾清理器该清扫垃圾了,如果当时系统内存很丰富的话,垃圾回收器它根本就不会启动,它启动的时间跟虚拟内存的大小,和回收算法有关。你确定?按照JavaDoc中的描述,“When control returns from the method call, the virtual machine has made its best effort to recycle all discarded objects.”,也就是说System.gc是用户强制的垃圾回收,和垃圾回收算法没什么关系,只有JRE自动的垃圾回收机制才和垃圾回收算法有关系。退一步说,即使你说的对,“如果当时系统内存很丰富”,既然如此,牺牲点“丰富”的内存来换取效率,何乐而不为呢?偶不觉的使用JNI调用memalloc和free有什么好,因为他越过了Java的内存管理机制,我觉得JNI的用处还是在于系统整合以及调用一些系统较底层的,但跟内存管理无关的API,例如添加Windows计划任务,添加Windows系统服务,修改Windows注册表等等
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货