java 中的 volatile 是否允许删除实例?
Does volatile in java allow for instances to be deleted?
我正在观看有关 Room db 的视频教程。在视频中,导师说:
“易失性只是意味着实例将能够摆脱自身或在需要时自行删除。”
不过,根据我的理解,volatile的意思是变量会存储在主存中,而不是从缓存中取出。
这 post 也证实了这一点:http://tutorials.jenkov.com/java-concurrency/volatile.html
volatile 如何允许实例删除自身?
谢谢!
CPU 缓存总是一致的;它是真理的源泉;所以记忆可能完全不同步..无限期..完全没问题。写入 volatile 变量不会触发将整个缓存刷新到主内存;那将是极其低效的。即使是单个缓存行也不会强制刷新到主内存。
(在 X86 上)'flushing' 到主内存的典型含义是,当易失性存储完成后,CPU 等待存储缓冲区中的存储被提交到在允许执行任何加载之前缓存。这可以防止将具有较新负载的旧商店重新排序到不同的地址。
“自行删除”的说法毫无意义。
这篇文章不正确。
http://tutorials.jenkov.com/java-concurrency/volatile.html
这不是它的工作原理。缓存使用 MESI 等缓存一致性协议进行同步。因此,写入一个 CPU 上的缓存行将始终导致另一个 CPU 中的缓存行副本失效。
警告:在处理 JMM 时,最好保持它完全抽象,而不是像缓存失效等实现问题的原因。这很有趣..但是你很容易搬起石头砸自己的脚。
我正在观看有关 Room db 的视频教程。在视频中,导师说:
“易失性只是意味着实例将能够摆脱自身或在需要时自行删除。”
不过,根据我的理解,volatile的意思是变量会存储在主存中,而不是从缓存中取出。
这 post 也证实了这一点:http://tutorials.jenkov.com/java-concurrency/volatile.html
volatile 如何允许实例删除自身?
谢谢!
CPU 缓存总是一致的;它是真理的源泉;所以记忆可能完全不同步..无限期..完全没问题。写入 volatile 变量不会触发将整个缓存刷新到主内存;那将是极其低效的。即使是单个缓存行也不会强制刷新到主内存。
(在 X86 上)'flushing' 到主内存的典型含义是,当易失性存储完成后,CPU 等待存储缓冲区中的存储被提交到在允许执行任何加载之前缓存。这可以防止将具有较新负载的旧商店重新排序到不同的地址。
“自行删除”的说法毫无意义。
这篇文章不正确。
http://tutorials.jenkov.com/java-concurrency/volatile.html
这不是它的工作原理。缓存使用 MESI 等缓存一致性协议进行同步。因此,写入一个 CPU 上的缓存行将始终导致另一个 CPU 中的缓存行副本失效。
警告:在处理 JMM 时,最好保持它完全抽象,而不是像缓存失效等实现问题的原因。这很有趣..但是你很容易搬起石头砸自己的脚。