那还不如定时调用一次System.gc呢。
再要不行,直接使用C/C++写程序不就得了?
个人见解。

解决方案 »

  1.   

    java有garbage-collect,不用程序员担心c里的内存泄漏问题。
      

  2.   

    兄弟,你觉得什么可靠呢?如果你怀疑的是java来意生存的基础,你还是用c吧。
      

  3.   

    释放资源在protected void finalize() 方法里面。
      

  4.   

    楼主怎么想的嘛?如果垃圾回收的效率那么重要,当初怎么就没有选择C/C++呢?再说,如果不是重要到极点,那么定时地手工调用一次System.gc不也可以吗?
      

  5.   

    楼上的手动调用System.gc只是说告诉JVM该启动垃圾清理器该清扫垃圾了,如果当时系统内存很丰富的话,垃圾回收器它根本就不会启动,它启动的时间跟虚拟内存的大小,和回收算法有关。因此System.gc也不是很有效的。
      

  6.   

    如果需要释放JNI中调用本地方法所申请的资源,最好把这些操作放入finalize()方法中虽然不能确保这些资源会及时得到释放(因为无法确定gc线程什么时候得到执行),但是可以肯定这些资源会得到释放,不会造成内存泄漏
      

  7.   

    楼上的手动调用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注册表等等