java性能调优之进阶篇

1.从java虚拟机栈说起

在主线程被调用时,会创建一个java虚拟机栈,当方法被调用时,会创建一个栈帧;栈帧粗略的讲,是由四部分组成,有局部变量表,操作数栈,动态链接,方法返回地址;

2.java对象的内存分布

由对象头+实例数据+对其填充组成的;

  1. 对象头
    MarkWord 标识一系列的标记位(哈希码,分代年龄,锁状态标志位),class pointer 指向对象对应类的类元数据的内存地址,Length ,如果是数组对象,则会有数组长度;
  2. 实例数据
    包括对象的所有成员变量,大小由各个变量所表示;
  3. 对齐填充
    为了保证对象的大小是8字节的整数倍;

3.JVM的内存模型(自己定义)

3.1 堆

堆划分为有old区和young区;Young又分为Eden,S0,S1;所有对象的创建都会被分配到Eden区,当Eden区满了时进行垃圾回收,进行垃圾回收,把存活的对象放到S0或者S1中,分代年龄+1,接下来进行新的对象创建,如果Eden区满了,会进行垃圾回收,把存活的对象放到S0或者S1的空的区域,然后再把S0中存活的对象放到S1中;这样避免空间的碎片话,保证物理空间的连续性;如果在存放中s1或者s0的空间不足,则向old借空间过来,是担保机制;如果s区的年龄大于15,则直接放到old区中;
注意:在每次分配时,s1,s0总有一块空间是空的,s0和s1可以相互复制;
Old区存放什么样的对象? 当年龄大于15的对象,或者是某个对象太大了;
Eden和s0和s1的比例是8:1:1;

GC

YoungGC:Minor Gc;
OldGc:MaiorGc;通常都会伴随着MinorGc;
Young+old:FullGc;
尽量减少FullGc;每一次Gc对象的分代年龄都会加1;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值