• 费城的二鹏
    2021-12-13
    通过信号量通知,然后在编译生成的代码中插入检查点。用于检查信号量,判断是否需要停顿。

    作者回复: 检查点是对的。这种检查点的机制和信号有点像,都是业务线程要主动去处理。

    
    1
  • 王建新
    2021-12-24
    请问,最后的问题,线程的停止时sleep吗

    作者回复: 线程确实是休眠,但我这里问的问题是线程什么时候休眠,怎么样可以使得所有业务线程停下来呢?

    
    
  • 李二木
    2021-12-13
    safepoint?

    作者回复: 是的。但你知道safepoint是怎么发生作用的吗?

    
    
  • 送过快递的码农
    2021-12-13
    老师,关于这个我有两个疑问 1,this是不是就是对象头部最顶端的内存地址 2,我们在复制算法执行完之后,对象地址发生改变。我们业务线程里面的栈里面的引用,啥时候变更的呢?比如Object obj = new Object(); 这个被多个线程栈里面都有这个地址,这个值更新的问题,是标志的时候,通过记一个列表,然后统一更新的么?这个感觉也挺复杂的

    作者回复: 1. this是Java层面的概念。其实我们不应该去管它的地址是什么。但如果你非要使用Unsafe对它进行访问,那么,是的,它指向的是对象头部的地址。 2. 栈上的指针也是在对象拷贝阶段更新的呀。这和普通对象有什么不同呢?都是一个二维指针罢了。并不复杂,它没有什么特别之处。非要说有的话,那就是编译器要操心栈上哪些地方是引用,哪些地方是引用。这就是栈的OopMap,这个由编译器操心。内存管理器是不必操心的。

    
    
  • 约书亚
    2023-09-09 来自天津
    看过中村成洋那本《垃圾回收的算法与实现》,这节课的伪代码还是挺熟悉的。 我比较好奇的是,在栈帧的那部分根,是怎么统计出来的,是要在生成机器码的时候加入一个操作,每在栈上或者是寄存器里保存一个值(就是对象的引用)时,同时还要操作某个数据结构来记录一下么?而且在栈帧销毁之前,还要从这个数据结构中将对应引用的数据删除
    
    
  • 王建新
    2021-12-24
    “使用 scanned 指针将非递归的广度优先遍历所需的队列,巧妙地隐藏在了 To 空间中” ---这个不是特别理解,有人能帮忙解答下吗
    共 3 条评论
    