有一本“Java2程序设计(王克宏)”讲的挺不错的。
可以使用Java2提供的HotSpot编译器。
从某种方面讲,使用现代的垃圾收集技术,反而会大大提高效率,程序性能会比显示释放有明显提高。
HotSpot使用一次性拷贝回收收集,提高速度,降低可感知的暂停
如果需要,HotSpot可压缩长时间不使用的对象。
HotSpot提供增量收集的方法。把原来需要暂停的时间分成许多非常短的片断(通常少于十万分之一秒)。
HotSpot提供精确的回收技术,所有对象可以重新定位,因而可以实现内存对象压缩。
可以使用Java2提供的HotSpot编译器。
从某种方面讲,使用现代的垃圾收集技术,反而会大大提高效率,程序性能会比显示释放有明显提高。
HotSpot使用一次性拷贝回收收集,提高速度,降低可感知的暂停
如果需要,HotSpot可压缩长时间不使用的对象。
HotSpot提供增量收集的方法。把原来需要暂停的时间分成许多非常短的片断(通常少于十万分之一秒)。
HotSpot提供精确的回收技术,所有对象可以重新定位,因而可以实现内存对象压缩。
HotSpot 不是免费可使用的优化技术,Sun 只是在它自己的 NT 和 Solaris 上的 JVM 中使用了它。如果其它 OS 厂商要使用则需支付专利费用(Sun 也是从其它厂商处并购到这项技术的)。所以 AIX/HPUX 等其它厂商有各自的优化技术。例如 Symantec 有自己的优化技术,IBM 的 JDK 的性能是最好的(也用了独有的技术)。
在 Java 编程中不建议让开发人员负责内存的管理。想想 NT 的虚拟内存交换技术,很类似的架构想法,运行环境更能了解整体的资源使用从而获得更为高效的运行结果。
TO radish
Runtime.gc()与System.gc()一样,只不过用System.gc()比较方便
TO radish
Runtime.gc()与System.gc()一样,只不过用System.gc()比较方便
其实我觉得对你而言如果 JVM 不那么及时的作 gc,更能满足您的要求。这是程序执行效率和所占资源的一个折衷。
To implement the Java virtual machine correctly, you need only be able to read
the class file format and correctly perform the operations specified therein. Implementation details that are not part of the Java virtual machine's specification would unnecessarily constrain the creativity of implementors. For example, the memory layout of run-time data areas, the garbage-collection algorithm used, and any internal optimization of the Java virtual machine instructions (for example, translating them into machine code) are left to the
discretion of the implementor.
不过建议你不要手工控制GC, 使用Java就要付出代价, 如果内存不够大的话
当初就不应该选择Java. 即便是你找到了控制GC的办法, 真的要用好也是不
容易的. 就连C++现在也正在慢慢地淘汰delete的使用.