2020-11-21:java中,什么是跨代引用?

福哥答案2020-11-21:

答案来自此链接:

跨代引用常出现与 CMS 分代收集时需要使用可达性分析判断对象是否存活,JVM将堆内存分为 年轻代、老年代、永久代||元空间,跨代引用就是年轻代对象可能会引用老年代或者永久代的实例对象,判断是否可达实现的话,是依据卡表记录对应的应用信息而 卡表和卡页存在对应关系,相当于一个记录标记这样再需要清除垃圾对象时,只需要扫描老年代的卡页记录即可,而不用扫描整个老年代。
PS:在没有分代的ZGC中,不存在跨代引用哦。


评论

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
可以使用以下代码实现: ``` import java.util.*; public class Main { public static void main(String[] args) { List<Map<String, String>> A = new ArrayList<Map<String, String>>(); A.add(new HashMap<String, String>() {{ put("begintime", "2020-01-01 00:04:00"); put("endtime", "2020-01-01 00:06:00"); }}); A.add(new HashMap<String, String>() {{ put("begintime", "2020-01-01 00:01:05"); put("endtime", "2020-01-01 00:03:15"); }}); A.add(new HashMap<String, String>() {{ put("begintime", "2020-01-01 00:09:00"); put("endtime", "2020-01-01 00:10:00"); }}); A.add(new HashMap<String, String>() {{ put("begintime", "2020-01-01 00:07:35"); put("endtime", "2020-01-01 00:08:40"); }}); A.add(new HashMap<String, String>() {{ put("begintime", "2020-01-01 00:12:00"); put("endtime", "2020-01-01 00:17:00"); }}); A.add(new HashMap<String, String>() {{ put("begintime", "2020-01-01 00:12:05"); put("endtime", "2020-01-01 00:13:10"); }}); A.add(new HashMap<String, String>() {{ put("begintime", "2020-01-01 00:19:00"); put("endtime", "2020-01-01 00:21:00"); }}); A.add(new HashMap<String, String>() {{ put("begintime", "2020-01-01 00:15:20"); put("endtime", "2020-01-01 00:20:45"); }}); List<Map<String, String>> result = new ArrayList<Map<String, String>>(); Collections.sort(A, new Comparator<Map<String, String>>() { public int compare(Map<String, String> a, Map<String, String> b) { return a.get("begintime").compareTo(b.get("begintime")); } }); String beginTime = A.get(0).get("begintime"); String endTime = A.get(0).get("endtime"); for (int i = 1; i < A.size(); i++) { String currBeginTime = A.get(i).get("begintime"); String currEndTime = A.get(i).get("endtime"); if (currBeginTime.compareTo(endTime) <= 0) { endTime = currEndTime.compareTo(endTime) > 0 ? currEndTime : endTime; } else { result.add(new HashMap<String, String>() {{ put("begintime", beginTime); put("endtime", endTime); }}); beginTime = currBeginTime; endTime = currEndTime; } } result.add(new HashMap<String, String>() {{ put("begintime", beginTime); put("endtime", endTime); }}); System.out.println(result); } } ``` 该代码的基本思路是:首先对 A 集合按照 `begintime` 进行排序,然后遍历 A 集合,如果当前时间段与前一个时间段有重合,则更新当前时间段的结束时间,否则将前一个时间段添加到结果集,然后将开始时间和结束时间更新为当前时间段的开始时间和结束时间。最后将最后一个时间段添加到结果集即可。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

福大大架构师每日一题

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值