决定vheap大小的golden ratio算法(1.61803398875)鉴赏
October 19th, 2013
1 comment
原创文章,转载请注明: 转载自系统技术非业余研究
摘抄自Erlang release note:
The vheap size series will now use the golden ratio instead of doubling and fibonacci sequences.
决定binary heap的大小现在是黄金分割率算法,很有意思,给大家参考下:
/* grow
*
* vheap_sz ======================
*
* vheap 75% + grow
* ———————-
*
* vheap 25 – 75% same
* ———————-
*
* vheap ~ – 25% shrink
*
* ———————-
*/
代码如下:
//erl_gc.c:2155 static Uint64 do_next_vheap_size(Uint64 vheap, Uint64 vheap_sz) { if ((Uint64) vheap/3 > (Uint64) (vheap_sz/4)) { Uint64 new_vheap_sz = vheap_sz; while((Uint64) vheap/3 > (Uint64) (vheap_sz/4)) { /* the golden ratio = 1.618 */ new_vheap_sz = (Uint64) vheap_sz * 1.618; if (new_vheap_sz < vheap_sz ) { return vheap_sz; } vheap_sz = new_vheap_sz; } return vheap_sz; } if (vheap < (Uint64) (vheap_sz/4)) { return (vheap_sz >> 1); } return vheap_sz; }
祝大家玩得开心!
Post Footer automatically generated by wp-posturl plugin for wordpress.
Recent Comments