并发GC需求remark phase.其作用remark phase是在标记过程中标记修改过的对象concurrent mark phase.但我认为如果我们只在期间标记新创建的对象concurrent mark phase,则无需执行remark phase.
remark phase因修改的对象而需要.修改可以是两种类型.一个是新对象创建,另一个是修改指向另一个对象的指针.如果我们标记新创建的对象,则可以轻松解决新对象问题.并且修改指向另一个对象的指针实际上不是问题.因为
死对象无法复活
死对象意味着没有人可以指向该对象.他们怎么能复活?因此修改后的指针应指向已标记的对象.这意味着没有必要执行remark.
有人可以说,"在其创作上标记新对象太昂贵了.所以它们不能被标记concurrent mark phase,这remark phase就是需要的原因".这看起来很合理.但这可能会产生另一个问题.如何在remark不遍历根目录中的每个对象的情况下?如果remark phase应该从根遍历每个对象,那么完成的工作concurrent mark phase是无用的.或者,如果remark phase仅遍历已修改的对象,则应将某个对象的修改信息保存在某处.我认为它可能比标记要昂贵得多.
我错了吗?应该是错的.但我不知道哪一点是错的.
到目前为止我发现的"隔离"的解释.
exp#1:http://izs.me/v8-docs/classv8_1_1Isolate.html
"Isolate代表V8引擎的一个独立实例.V8隔离区具有完全独立的状态.一个隔离区中的对象不能用于其他隔离区.当V8初始化时,隐式创建并输入默认隔离区.嵌入器可以创建额外的隔离区和在多个线程中并行使用它们.在任何给定时间最多可以通过一个线程输入隔离.可以使用Locker/Unlocker API进行同步."
exp#2:https://developers.google.com/v8/get_started
"隔离是一个具有自己堆的VM实例."
好的我明白了."隔离"是一个可以单独操作的隔离线程.以下是我的问题.
它看起来像是我的线程,除了它有自己的堆.有什么不同吗?
我认为"Isolate"可用于实现并发GC.上面的定义说每个"隔离"不能用于其他"隔离".但并发GC应检查(或标记)主(或其他)线程(或隔离)的活动对象.怎么可能?
如何才能保护自己的物品?"隔离"是一个线程而不是一个过程.因此,如果其他线程知道地址,则可以访问该线程的对象.怎么可以保护它?我无法理解自己堆的含义.因为如果其他线程知道地址,它可以被其他线程访问.普通线程可以将它们的堆放在内存空间中.由于堆的地址空间没有完全分离,但如果一个线程malloc一个内存,除非其他人知道地址,否则其他线程如何使用它呢?每个线程只是malloc自己的堆空间和"Isolate"有自己的堆空间有什么区别?
我的问题可以很容易地归纳为"隔离"的作用是什么,以及如何拥有自己的堆空间以及它为什么必须拥有自己的堆.
如果有人分享一些好的"隔离"文件,将会非常有帮助.谢谢阅读.
----让问题清楚----我的问题的关键点是:问:谷歌在V8中实现隔离的原因是什么?隔离的好处是什么?在V8中使用隔离的好例子是什么?它们(隔离物)同时执行的是什么?
我想知道下图中符号的确切含义.这张照片来自job history server网络用户界面.我当然知道Elapsed的意思,但我不确定其他事情.我在哪里可以找到明确的定义?或者有谁知道那些意义?
我想知道的是地图时间,减少时间,随机播放时间和合并时间.并且四个时间的总和应该与经过的时间非常相似(或相等).但"平均"关键字让我感到困惑.

有396个地图,1个减少.