GawinHong

Results 17 issues of GawinHong

原文: > 指向字段描述符【CONSTANT_NameAndType】的索引项` 勘误: > 指向字段描述符【CONSTANT_NameAndType_info】的索引项 其他还有类似的地方遗漏了“_info” ![2cc0e0825c8c32e8fdbcfd134a66316](https://user-images.githubusercontent.com/38309393/135745978-27fff95d-c495-49a6-9c4b-4fa20e8953fb.png)

周老师你好 > 服务器的硬件为四路【志强】处理器 > 服务器的硬件为四路【至强】处理器

ParallelGCThreads出现了两次,并且说明不一致

周老师,你好 > 我们再来聊一下Shenandoah用以支持【并行】整理的核心概念 调整 > 我们再来聊一下Shenandoah用以支持【并发】整理的核心概念

周老师,你好 P99 > “停顿时间模型”(Pause Prediction Model) 换成 “停顿预测模型”,即和P101一致 > 譬如,怎样建立起可靠的停顿预测模型

周老师,你好 P483原文: > 那么当锁对象第一次被线程获取的时候,虚拟机将会把对象头中的标志位设置为“01”、把偏向模式设置为“1”,表示进入偏向模式。【同时】使用CAS操作把获取到这个锁的线程的ID记录在对象的Mark Word之中。 老师可以试试跑下这个代码,要引入jol依赖观察对象头的布局 ` org.openjdk.jol jol-core 0.8 ` public static void main(String[] args) throws InterruptedException { Thread.sleep(5000); A a = new A(); System.out.println(ClassLayout.parseInstance(a).toPrintable()); } hotspot在启动后,有几秒的初始化时间,这个时间是不会有偏向锁的, 在-XX:BiasedLockingStartupDelay的时间过后再执行 A...

周老师,你好 原文 > HotSpot虚拟机开发团队在这个版本上花费了大量的资源去实现各种锁优化技术,如适应性自旋(Adaptive Spinning)、锁消除(Lock Elimination)、【锁膨胀】(Lock Coarsening)、轻量级锁(Lightweight Locking)、偏向锁(Biased Locking)等 建议 > HotSpot虚拟机开发团队在这个版本上花费了大量的资源去实现各种锁优化技术,如适应性自旋(Adaptive Spinning)、锁消除(Lock Elimination)、【锁粗化】(Lock Coarsening)、轻量级锁(Lightweight Locking)、偏向锁(Biased Locking)等 理由: 整本书中就出现过一次【锁膨胀】三个字,我是按照章节排版和上面原文那句话来确认【锁膨胀】其实是【锁粗化】的,我觉得对于我这种菜鸟来说不友好 按章节来看 > 13.3.1 自旋锁与自适应自旋 对应原文 适应性自旋(Adaptive Spinning) > 13.3.2 锁消除 对应原文...

周老师,你好 P449书中原文(**规则1**) > 只有当线程T对变量V执行的前一个动作是load的时候,线程T才能对变量V执行use动作;并且,只有当线程T对变量V执行的后一个动作是use的时候,线程T才能对变量V执行load动作。线程T对变量V的use动作【可以认为】是和线程T对变量V的load、read动作相关联的,必须【连续】且一起出现 我觉得这段话最后一句表达方式容易歧义,建议去掉【可以认为】 按这段话,依据最后【一句话】的信息,我可以这样理解:volatile变量的read->load->use三个操作必须【连续】一起出现,即read->load中间也是不可插入其他指令。(记为**结论1**) 但是P443中原文提到过 > Java内存模型只要求上述两个操作必须按顺序执行,但不要求是连续执行。也就是说read与load之间、store与write之间是可插入其他指令的 P443这些信息得知,正常情况下read->load中间是可以插入其他指令的(记为**结论2**) 但是书中P449这段话的第一句,只能得出【load->use】是必须连续的,第二句话说【可以认为】,感觉是第一句话推导出来的,而不是Java内存模型里面直接规定的,但其实是推导不出来的,因为**结论2**,所以我认为【可以认为】这四个字是不是可以去掉,包括第二条规则的表述(**规则2**) >只有当线程T对变量V执行的前一个动作是assign的时候,线程T才能对变量V执行store动作;并且,只有当线程T对变量V执行的后一个动作是store的时候,线程T才能对变量V执行assign动作。线程T对变量V的assign动作【可以认为】是和线程T对变量V的store、write动作相关联的,必须连续且一起出现。 我最终的看法是 规则1说明的是:read->load->use三个操作必须【连续】 规则2说明的是:assign->store->write三个操作必须【连续】 原因: 规则2必须满足否则规则3无法满足(我列举过规则3的AB对应的所有情况,规则2必须是成立的) 举例: 如果 A动作是 assign assign V-> store V-> write V B动作也是是 asssign assign...

周老师,你好 书中原文 > 这种操作相当于对缓存中的变量做了一次前面介绍Java内存模式中所说的“store和write”操作 建议 > 这种操作相当于对缓存中的变量做了一次前面介绍Java内存模【型】中所说的“store和write”操作

周老师,你好 P431原文: > 与图11-11和图11-12所示相比,虽然没有了**箭头**,但是节点上列明了代表执行顺序的序号 建议调整 > 与图11-【13】和图11-【14】所示相比,虽然没有了**箭头**,但是节点上列明了代表执行顺序的序号 原因: 书中讲的是数据流和控制流的箭头 图11-11和图11-12和这个无关 图11-13和图11-14 有带箭头的控制流和数据流,应该是拿这两图来对比连线的**箭头**