调优
1. Heap 设定与垃圾回收
分为 个区,, 和 。 保存刚实例化的对象。当该区被
填满时, 会将对象移到 区。 区则负责保存反射对象,本文不讨论该区。
的 分配可以使用 参数设定,
初始 大小
最大值
的 大小;
有 ! 个 线程。第一个线程负责回收 的 区。第二个线程在 不足
时,遍历 ,将 区升级为 区。 区的大小等于 减去,不能将
的值设的过大,因为第二个线程被迫运行会降低 的性能。
为什么一些程序频繁发生 ?有如下原因:
")程序内调用了 #$%&'或 ( $%&'。
!)一些中间件软件调用自己的 方法,此时需要设置参数禁止这些 。
) 的 太小,一般默认的 值都很小。
))频繁实例化对象,( 对象。此时尽量保存并重用对象,例如使用 #*+,&'
和 #*&'。
如果你发现每次 后, 的剩余空间会是总空间的 -./,这表示你的 处于健
康状态。许多 # 端的 程序每次 后最好能有 0-/的剩余空间。
经验之谈:
")# 端 最好将 和 设为相同值。为了优化 ,最好让 值约等于
的 "12!3。
!)一个 45 程序最好是每 ". 到 !. 秒间运行一次 ,每次在半秒之内完成2!3。
注意:
")增加 的大小虽然会降低 的频率,但也增加了每次 的时间。并且 运行
时,所有的用户线程将暂停,也;就是 期间, 应用程序不做任何工作。
!) 大小并不决定进程的内存使用量。进程的内存使用量要大于 定义的值,
因为 为其他任务分配内存,例如每个线程的 #%6 等。
2. Stack 的设定
每个线程都有他自己的 #%6。