转载请注明原创出处,谢谢!

问题

这个Xmn设置为1G,,我用jmap -heap 看,这个Eden From To怎么不是一个整8:1:1的关系呢?
我看内存分配还是没变,我Xmn1g,感觉From、To应该都是102.4M才对,现在是102.375M。

执行命令

jstat -gc pid 1s 1

结果:


发现很奇怪,的确和我们相信的不一样,我觉得只有源码可以告诉我们他做了啥。查看源码:

执行上面的例子代码

    public static void main(String[] args) {System.out.println(107374183&~((1<<16)-1));}

输出结果为:
107347968

104832*K* * 1024刚刚好等于107347968*B*


R大以前的回复:

从该信息中可以得到:Oracle/Sun JDK及OpenJDK里的HotSpot VM的话默认GC堆里的对象用8字节对齐。

java内存参数对齐问题

上面问题其实就是java内存参数对齐问题。那么为什么需要java内存参数对齐问题?

内存对齐(Data Structure Alignment)是什么?

内存对齐,或者说字节对齐,是一个数据类型所能存放的内存地址的属性(Alignment is a property of a memory address)。这个属性是一个无符号整数,并且这个整数必须是2的N次方(1、2、4、8、……、1024、……)。当我们说,一个数据类型的内存对齐为8时,意思就是指这个数据类型所定义出来的所有变量,其内存地址都是8的倍数。当一个基本数据类型(fundamental types)的对齐属性,和这个数据类型的大小相等时,这种对齐方式称作自然对齐(naturally aligned)。比如,一个4字节大小的int型数据,默认情况下它的字节对齐也是4。

为什么我们需要内存对齐?

这是因为,并不是每一个硬件平台都能够随便访问任意位置的内存的。

微软的MSDN里有这样一段话:

Many CPUs, such as those based on Alpha, IA-64, MIPS, and SuperH architectures, refuse to read misaligned data. When a program requests that one of these CPUs access data that is not aligned, the CPU enters an exception state and notifies the software that it cannot continue. On ARM, MIPS, and SH device platforms, for example, the operating system default is to give the application an exception notification when a misaligned access is requested.

大意是说,有不少平台的CPU,比如Alpha、IA-64、MIPS还有SuperH架构,若读取的数据是未对齐的(比如一个4字节的int在一个奇数内存地址上),将拒绝访问,或抛出硬件异常。

另外,在维基百科里也记载着如下内容:

Data alignment means putting the data at a memory offset equal to some multiple of the word size, which increases the system’s performance due to the way the CPU handles memory.

意思是,考虑到CPU处理内存的方式(32位的x86 CPU,一个时钟周期可以读取4个连续的内存单元,即4字节),使用字节对齐将会提高系统的性能(也就是CPU读取内存数据的效率。比如你一个int放在奇数内存位置上,想把这4个字节读出来,32位CPU就需要两次。但对齐之后一次就可以了)。


  • 需要字节对齐的根本原因在于CPU访问数据的效率问题。假设上面整型变量的地址不是自然对齐,比如为0x00000002,则CPU如果取它的值的话需要访问两次内存,第一次取从0x00000002-0x00000003的一个short,第二次取从0x00000004-0x00000005的一个short然后组合得到所要的数据,如果变量在0x00000003地址上的话则要访问三次内存,第一次为char,第二次为short,第三次为char,然后组合得到整型数据。
  • 而如果变量在自然对齐位置上,则只要一次就可以取出数据。一些系统对对齐要求非常严格,比如sparc系统,如果取未对齐的数据会发生错误,而在x86上就不会出现错误,只是效率下降。
  • 各个硬件平台对存储空间的处理上有很大的不同。一些平台对某些特定类型的数据只能从某些特定地址开始存取。
  • 比如有些架构的CPU在访问一个没有进行对齐的变量的时候会发生错误,那么在这种架构下编程必须保证字节对齐,但其他平台可能没有这种情况,但是最常见的是如果不按照适合其平台要求对数据存放进行对齐,会在存取效率上带来损失。
  • 比如有些平台每次读都是从偶地址开始,如果一个int型(假设为32位系统)如果存放在偶地址开始的地方,那么一个读周期就可以读出这32bit,而如果存放在奇地址开始的地方,就需要2个读周期,并对两次读出的结果的高低字节进行拼凑才能得到该32bit数据。显然在读取效率上下降很多。
  • 另外字节对齐的作用不仅是==便于cpu快速访问==,同时合理的利用字节对齐可以==有效地节省存储空间==。
  • 也即CPU一次访问时,要么读0x01~0x04,要么读0x05~0x08…硬件不支持一次访问就读到0x02~0x05
  • 例:如果0x02~0x05存了一个int,读取这个int就需要先读0x01~0x04,留下0x02~0x04的内容,再读0x05~0x08,留下0x05的内容,两部分拼接起来才能得到那个int的值,这样读一个int就要两次内存访问,效率就低了


个人公众号

参考:
https://www.2cto.com/kf/201407/319682.html
http://blog.csdn.net/qq_25077833/article/details/53454958

JVM 菜鸟进阶高手之路十一(eden survivor分配问题)相关推荐

  1. JVM菜鸟进阶高手之路

    本文转载自公众号  匠心零度 问题现象 代码如下,使用 ParNew + Serial Old 回收器组合与使用 ParNew + CMS 回收器组合时,结果为什么差异如此之大 ? private s ...

  2. JVM 菜鸟进阶高手之路六(JVM每隔一小时执行一次Full GC)

    上次分析详细地址在:http://blog.csdn.net/lirenzuo/article/details/76257526 以为上次问题是rmi的问题就此结束了,但是问题并没有结束,其实本次问题 ...

  3. JVM菜鸟进阶高手之路十二(jdk9、JVM方面变化, 蹭热度)

    转载请注明原创出处,谢谢! 经过 4 次跳票,历经曲折的 Java 9 正式版终于发布了!今天看着到处都是jdk9发布了,新特性说明,心想这么好的蹭热度计划能错过嘛,哈哈,所以就发了这篇文章. 目前j ...

  4. java每隔一小时fullgc_JVM菜鸟进阶高手之路六(JVM每隔一小时执行一次Full GC)

    以为上次问题是rmi的问题就此结束了,但是问题并没有结束,其实本次问题不是rmi问题导致的,但是rmi也的确可能会有sys.gc fullgc问题. 查看GC统计汇总情况: jstat -gcutil ...

  5. 菜鸟进阶高手, 推荐 7 个 Python 上手实战项目

    作为一个语法简洁.有着丰富的第三方库的编程语言,Python 上手极为简单,短时间内就可以让你编写出能够解决实际问题的小程序,甚至去面试初级 Python 工程师的职位. 不过,如果要写出一些更复杂的 ...

  6. 大数据新手的0基础学习路线,从菜鸟到高手的成长之路

    大数据作为一个新兴的热门行业,吸引了很多人,但是对于大数据新手来说,按照什么路线去学习,才能够学习好大数据,实现从大数据菜鸟到高手的转变.这是很多想要学习大数据的朋友们想要了解的. 今天我们就来和大家 ...

  7. E71从菜鸟到高手进阶—软件安装篇 转帖

    E71从菜鸟到高手进阶-软件安装篇 1.软件安装的方法 ①手机用数据线连接电脑后用pc套件安装sisx/jar程序:(注意:JAR文件不用解压可直接安装,保证JAR的文件名为英文,否者会出错) ② 把 ...

  8. Rust语言:元编程,强大的宏系统,菜鸟到高手进阶的必经之路

    Rust语言:元编程,强大的宏系统,菜鸟到高手进阶的必经之路 编程语言的宏操作,在C和C++早期就已经存在.宏可以将重复的代码用更简短的宏函数替换,编译过程中再展开,使得代码编写的更简洁. Rust提 ...

  9. 以“有用”为圆心:重新认识智慧城市的“高手之路”

    最近一段时间,疫情又出现了反复.针对十一旅游造成的防疫压力,不少权威媒体提出需要加强疫情防控的精细化水平,用动态化.细节化的管理方式来提高防疫效率.面对游客量巨大与旅行中游客快速移动等特点,疫情防控的 ...

最新文章

  1. 大龄程序员刚迈过了 35 岁这个“坎儿”,和大家说点儿心里话
  2. Firefox XUL
  3. 2019帝豪gs装软件_短试新帝豪GS:冷门的跨界SUV,为什么吉利能做成爆款?
  4. Qt5.12编译MySQl5.1.37驱动
  5. python爬取淘宝数据魔方_淘宝数据魔方技术架构解析
  6. php 修改图像大小,PHP图像大小调整
  7. 实现一个Golang的reverse函数
  8. ImageIO 合并图片工具
  9. 【炼数成金 RapidMiner 三 】关联分析、关联规则
  10. 粮食增产的重要性顺序,土水肥种
  11. 树中两个节点的最低公共祖先
  12. 高等数学(第七版)同济大学 习题1-7 个人解答
  13. 全息投影是计算机技术吗,全息投影技术在使用过程中要注意哪些问题?
  14. AireOS WLC配置AP Group
  15. 计算机内存清理器,轻量便捷的内存清理工具PC版
  16. 用Java编写2到100之间的素数;判断一个数是不是素数
  17. 18天精读掌握《费曼物理学讲义卷一》 第12天 2019/6/28
  18. Web端算法部署+流媒体服务器算法部署+Flask+AI健身+Python-web实时检测效果显示
  19. zabbix分布式监控被动模式代理
  20. 华为鸿蒙山海,华为,求求你放过《山海经》吧!

热门文章

  1. 2017 年 11 个移动 App 开发趋势
  2. 华三路由交换配置命令_h3c路由器配置命令都有哪些 h3c路由器配置命令大全【详解】...
  3. 史上最大规模世界杯直播 阿里云承包了全网70%的流量
  4. android 寺库trytry_人民日报中秋福利 寺库trytry红包刷爆朋友圈背后的秘密
  5. SwiftUI @State @Published @ObservedObject 深入理解和使用
  6. 安装win10,刻录U盘,还原刻录的U盘
  7. 巴西法律和税收报告以及其他法律要求》》》本质上是一种税务监控手段;
  8. 北京工商大学计算机专业校友评价,北京工商大学英语校友返校聚会
  9. vulnhub之FirstBlood: 1
  10. virtual audio cable 虚拟声卡