auto commit

This commit is contained in:
CyC2018 2018-11-20 17:12:04 +08:00
parent d90eb6fc00
commit 4401fcf1b8
4 changed files with 5 additions and 5 deletions

View File

@ -646,8 +646,8 @@ static int indexFor(int h, int length) {
| 参数 | 含义 | | 参数 | 含义 |
| :--: | :-- | | :--: | :-- |
| capacity | table 的容量大小,默认为 16。需要注意的是 capacity 必须保证为 2 的 n 次方。| | capacity | table 的容量大小,默认为 16。需要注意的是 capacity 必须保证为 2 的 n 次方。|
| size | table 的实际使用量。 | | size | 键值对数量。 |
| threshold | size 的临界值,size 必须小于 threshold如果大于等于就必须进行扩容操作。 | | threshold | size 的临界值,当 size 大于等于 threshold 就必须进行扩容操作。 |
| loadFactor | 装载因子table 能够使用的比例threshold = capacity * loadFactor。| | loadFactor | 装载因子table 能够使用的比例threshold = capacity * loadFactor。|
```java ```java

View File

@ -227,7 +227,7 @@ obj = null;
<div align="center"> <img src="../pics//a4248c4b-6c1d-4fb8-a557-86da92d3a294.jpg" width=""/> </div><br> <div align="center"> <img src="../pics//a4248c4b-6c1d-4fb8-a557-86da92d3a294.jpg" width=""/> </div><br>
将存活的对象进行标记,然后清理掉未被标记的对象 标记要回收的对象,然后清除
不足: 不足:

View File

@ -625,7 +625,7 @@ void take_two(int i) {
down(&s[i]); down(&s[i]);
} }
void put_tow(i) { void put_two(i) {
down(&mutex); down(&mutex);
state[i] = THINKING; state[i] = THINKING;
test(LEFT); test(LEFT);

View File

@ -149,7 +149,7 @@ uniqueInstance 采用 volatile 关键字修饰也是很有必要的, `uniqueIn
2. 初始化 uniqueInstance 2. 初始化 uniqueInstance
3. 将 uniqueInstance 指向分配的内存地址 3. 将 uniqueInstance 指向分配的内存地址
但是由于 JVM 具有指令重排的特性,执行顺序有可能变成 1>3>2。指令重排在单线程环境下不会出问题,但是在多线程环境下会导致一个线程获得还没有初始化的实例。例如,线程 T<sub>1</sub> 执行了 1 和 3此时 T<sub>2</sub> 调用 getUniqueInstance() 后发现 uniqueInstance 不为空,因此返回 uniqueInstance但此时 uniqueInstance 还未被初始化。 但是由于 JVM 具有指令重排的特性,执行顺序有可能变成 1>3>2。指令重排在单线程环境下不会出问题,但是在多线程环境下会导致一个线程获得还没有初始化的实例。例如,线程 T<sub>1</sub> 执行了 1 和 3此时 T<sub>2</sub> 调用 getUniqueInstance() 后发现 uniqueInstance 不为空,因此返回 uniqueInstance但此时 uniqueInstance 还未被初始化。
使用 volatile 可以禁止 JVM 的指令重排,保证在多线程环境下也能正常运行。 使用 volatile 可以禁止 JVM 的指令重排,保证在多线程环境下也能正常运行。