内存对齐意味将数据类型写入到内存地址时是按照它们大小切割的,内存对齐会带来性能提升,是Java性能提升的黑技术。内存对齐定义(n是2的乘幂):
boolean nAligned = (address%n) == 0;
如果内存地址是n字节的倍数,那么我们说这n字节是内存对齐的,注意,这里n是2的幂,说白了,内存地址正好放下n字节的倍数,两者相除余数为零,正好整除。
内存对齐类型有:
1.类型对齐:某种CPU需要其特定的对齐方式
2.缓存行对齐:正常是64,也有32/128,缓存行是主内存等内存的基本原子单位,有伪共享,字撕裂,原子性 等,跨缓存行性能差
3.内存页大小对齐:网络或磁盘操作时考虑
Java中使用内存对齐方法:
使用Direct/MappedByteBuffer/Unsafe等JDK工具类,Unsafe类基础核心,是官方或半官方访问内存的关键。
内存对齐方式:
1.类型对齐:某种CPU需要其特定的对齐方式
2.缓存行对齐:正常是64,也有32/128,缓存行是主内存等内存的基本原子单位,有伪共享,字撕裂,原子性 等,跨缓存行性能差,这是我们关注的。
4.内存页大小对齐:网络或磁盘操作时考虑
是否使用内存对齐对于性能是有影响的,下载这个gtihub可以对本机进行对齐与非对齐的性能测试。
基于内存对齐可以实现off heap以外的内存共享,如果将一个队列放入这个共享内存,就能实现Java的IPC通讯,每秒可以发送135M消息,实现无锁高并发。见:
[该贴被banq于2016-08-14 11:02修改过]
内存对齐是提升计算机系统性能的一种技术,它涉及到CPU类型对齐、缓存行对齐和内存页大小对齐。缓存行对齐尤其关键,因为跨缓存行操作可能导致性能下降。Java中,可以使用Direct/MappedByteBuffer/Unsafe等工具实现内存对齐, Unsafe类是访问内存的核心。内存对齐不仅可以优化性能,还能用于实现Java进程间的内存共享,提高并发效率,如构建高吞吐量的消息队列。

1447

被折叠的 条评论
为什么被折叠?



