Arsia Chou
Arsia Chou
书中提到“要真正宣告一个对象的死亡,至少要经历两次标记过程。” **这是第一次标记过程**:“如果对象在进行可达性分析后发现没有与GC Roots相连接的引用链,那它将会被第一次标记” 。 **不进入队列的判断条件**:“假如对象没有覆盖finalize()方法,或者finalize()方法已经被虚拟机调用过,那么虚拟机将这两种情况都视为“没有必要执行”” **两种对象被分离**:“如果这个对象被判定为确有必要执行finalize()方法,那么该对象将会被放置在一个名为F-Queue的队列之中” **这是第二次标记过程**:“finalize()方法是对象逃脱死亡命运的最后一次机会,稍后收集器将对F-Queue中的对象进行第二次小规模的标记”。 根据上面的内容,那么如果一个对象没有覆盖finalize()方法,那它就不会进入F-Queue,为什么还会“至少要经历两次标记过程”呢? (抱歉,我没看到勘误里已经有了)
[Enter steps to reproduce:] 1. ... 2. ... **Atom**: 1.34.0 x64 **Electron**: 2.0.16 **OS**: Debian GNU/Linux **Thrown From**: [atom-simplified-chinese-menu](https://github.com/Reedo0910/atom-simplified-chinese-menu) package 0.6.5 ### Stack Trace Uncaught Error: Cannot find module 'cson'...
- file: src/header/name.rs - line: 1259 ```rust if name_bytes.len() == 0 || name_bytes.len() > super::MAX_HEADER_NAME_LEN || { let mut i = 0; loop { if i >= name_bytes.len() { break...