这篇文章主要讲解了“java缓存行与volatile有什么用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“java缓存行与volatile有什么用”吧!
CPU 为了更快的执行代码。于是当从内存中读取数据时,并不是只读自己想要的部分。而是读取足够的字节来填入高速缓存行。根据不同的 CPU ,高速缓存行大小不同。如 X86 是 32BYTES ,而 ALPHA 是 64BYTES 。并且始终在第 32 个字节或第 64 个字节处对齐。这样,当 CPU 访问相邻的数据时,就不必每次都从内存中读取,提高了速度。 因为访问内存要比访问高速缓存用的时间多得多。
可以看出来,CPU都是很机智的,每次读取不止把本次需要的数据读取进缓存,还会把相邻的数据也读进来,但是这样就有一个问题了,现在的CPU都是多核的,如果有一个数据同时被多个核心缓存,其中一个核心修改了这个数据的值,其他核心的缓存值就失效了,这时程序就出错了。
那么,如何应对这种情况呢?java中,可以给字段加上volatile关键字,使用volatile关键字的字段在值被改变后会强制令其他CPU的缓存失效,也就是说一个CPU在另外一个CPU改变了volatile修饰的数据后这个CPU会重新从内存读取而不会从缓存读取该数据,保证读取到的是新数据而不是失效数据。
可以看出,volatile解决了一个CPU更改数据后另外一个CPU不知道的问题,但是,如果使用不当,volatile是会降低程序效率的,下节将分析一个volatile导致的性能问题。
感谢各位的阅读,以上就是“java缓存行与volatile有什么用”的内容了,经过本文的学习后,相信大家对java缓存行与volatile有什么用这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。