但是, 应用程序不能适合这种理想状态, 因为它们有一小部分中长寿命的对象。 最好是保持
这些中长寿命的对象并放在新域中, 因为复制小部分的对象总比压缩旧域廉价。 为控制新域
中对象的复制,可用 -XX: TargetSurvivorRatio 控制救助空间的比例(该值是设置救助空
间的使用比例。如救助空间位 1M,该值 50 表示可用 500K)。该值是一个百分比,默认值是
50. 当较大的堆栈使用较低的 sruvivorratio 时,应增加该值到 80 至 90,以更好利用救助
空间。用 -XX:maxtenuring threshold 可控制上限。
为放置所有的复制全部发生以及希望对象从 eden 扩展到旧域,可以把 MaxTenuring
Threshold 设置成 0. 设置完成后,实际上就不再使用救助空间了,因此应把 SurvivorRatio
设成最大值以最大化 Eden 空间,设置如下:
java , -XX:MaxTenuringThreshold=0 –XX:SurvivorRatio =50000 ,
4.BEA JRockit JVM 的使用
Bea WebLogic 8.1 使用的新的 JVM用于 Intel 平台。在 Bea 安装完毕的目录下可以看
到有一个类似于 jrockit81sp1_141_03 的文件夹。这就是 Bea 新 JVM所在目录。不同于
HotSpot 把 Java 字节码编译成本地码, 它预先编译成类。 JRockit 还提供了更细致的功能用
以观察 JVM的运行状态,主要是独立的 GUI 控制台(只能适用于使用 Jrockit 才能使用
jrockit81sp1_141_03 自带的 console 监控一些 cpu 及 memory参数)或者 WebLogic Server
控制台。
Bea JRockit JVM 支持 4 种垃圾收集器:
4.1.1. 分代复制收集器
它与默认的分代收集器工作策略类似。 对象在新域中分配, 即 JRockit 文档中的 nursery.
这种收集器最适合单 cpu 机上小型堆操作。
4.1.2. 单空间并发收集器
该收集器使用完整堆, 并与背景线程共同工作。 尽管这种收集器可以消除中断, 但是收
集器需花费较长的时间寻找死对象, 而且处理应用程序时收集器经常运行。 如果处理器不能
应付应用程序产生的垃圾,它会中断应用程序并关闭收集。
分代并发收集器 这种收集器在护理域使用排它复制收集器,在旧域中则使用并发收集
器。由于它比单空间共同发生收集器中断频繁, 因此它需要较少的内存, 应用程序的运行效
率也较高, 注意, 过小的护理域可以导致大量的临时对象被扩展到旧域中。 这会造成收集器
超负荷运作,甚至采用排它性工作方式完成收集。
4.1.3. 并行收集器
该收集器也停止其他进程的工作, 但使用多线程以加速收集进程。 尽管它比其他的收集
器易于引起长时间的中断,但一般能更好的利用内存,程序效率也较高。