Skip to content

P134-3.8.4动态对象年龄判定的解释有误 #13

@MaaaxYang

Description

@MaaaxYang

原文:如果在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

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions