data里面的存储的固定数值。当你分配的内存块超过这个阈值的时候,就会触发GC进行垃圾回收。来看看这个阈值动态加载和超过阈值触发GC垃圾回收之后,施工围挡重新计算阈值的算法。 size_t fragmentation_limit; 碎片空间的上限 float fragmentation_burden_limit; 碎片空间百分比的上限 float limit; 限度的下限 float max_limit; 限度的上限 uint64_t time_clock; size_t gc_clock;
{2561024, SSIZE_T_MAX, 200000, 0.25f, 1.2f, 1.8f, (100 * 1000 * 1000), 100}, // loh {310241024, SSIZE_T_MAX, 0, 0.0f, 1.25f, 4.5f, 0, 0}, // poh {31024*1024, SSIZE_T_MAX, 0, 0.0f, 1.25f, 4.5f, 0, 0}, }
你当前电脑处理器最大缓存值 = 施工围挡max(你当前电脑处理器最大缓存值, (2561024)) while(如果0代阈值下限处理器个数>你当前堆分配物理内存总大小/6) { 0代阈值下限 = 0代阈值下限/2 if(0代阈值下限 <=你当前电脑处理器最大缓存值 ) { 0代阈值下限 = 你当前电脑处理器最大缓存值 } } if( 0代阈值下限 > = 小对象堆段(SOH)/2) {
第1代阈值的下限是160kb,那么上限呢?
服务器模式1代阈值的上限=max (6*1024*1024, Align(小对象堆的大小/2));
工作站模式1代阈值的上限=gen1_max_size = Align (服务器模式1代阈值的上限/0)
```(限度的下限 * (限度的上限-1.0f)))) 限度= ((限度的下限 - 限度的上限*cst) / (1.0f - (cst * 限度的下限)));http://www.zgysffm.com/
size_t max_growth_size = (限度的上限 / 限度) if( 当前代的大小 > = max_growth_size) 新分配量= 阈值的上限 else { 新分配量 = (size_t) min (max ( (限度 * 当前代的大小), gc的最小值), 限度的上限); 限度的上限 = max((新分配量 - 当前代的大小),gc的最小值); }http://www.zgysffm.com/