-
Notifications
You must be signed in to change notification settings - Fork 224
Open
Description
原文:如果在Survivor空间中相同年龄所有对象大小的总和大于Survivor空间的一半,年龄大于或等于该年龄的对象就可以直接进入老年代,无须等到-XX:MaxTenuringThreshold中要求的年龄
这段话不知道是基于哪个版本的JVM得出的结论,
实际代码:
uint ageTable::compute_tenuring_threshold(size_t survivor_capacity) {
//survivor_capacity是survivor空间的大小
size_t desired_survivor_size = (size_t)((((double) survivor_capacity)*TargetSurvivorRatio)/100);
size_t total = 0;
uint age = 1;
while (age < table_size) {
total += sizes[age];//sizes数组是每个年龄段对象大小
if (total > desired_survivor_size) break;
age++;
}
uint result = age < MaxTenuringThreshold ? age : MaxTenuringThreshold;
...
}
得出的结论是:
从最小的年龄对象大小开始累加,当达到n大小时如果总和大于TargetSurvivorRatio设定的阀值那么大于等于n年龄的对象就会晋升到老年代。
而不是:
相同的某一个年龄的累加大小
Metadata
Metadata
Assignees
Labels
No labels
