深入jvm

Java虚拟机(jvm)

jvm内存模型

jvm(java虚拟机)的内存模型分为五个:虚拟机栈,本地方法栈,方法区,程序计数器,堆。
虚拟机栈中存放Java方法,本地方法栈中存放native方法(一般为c++写的方法)
java虚拟机内存模型

虚拟机栈

每当开启一个线程执行方法时,会在虚拟机栈中开辟一个栈空间,一个方法会开辟一个方法栈帧,每个栈帧中都会有局部变量表、操作数栈、动态连接、方法出口等等,重点说说这四个。

首先是局部变量表和操作数帧,比如以下代码:

int a = 0,b = 1, c = 2;
a = b + c;

虚拟机栈中的局部变量表中会存 a ,b,c。操作数栈会压栈 0,1,2。然后将操作数栈的值赋值给局部变量表的a,b,c;最后由计算出1+2=3,再把3赋值给a;

动态链接:类加载到方法区中,生成一个klass对象,klass中里面会有一个集合,存放方法对象的内存地址。动态链接中也会有一个方法对象的内存地址,动态链接中的地址指向klass的地址集合,从这个集合中找到所用的方法地址,压栈到动态链接中。

在这里插入图片描述
动态链接有两个实现思路:句柄池实现思路和直接方法实现思路
在这里插入图片描述
方法出口:即执行完一个方法后,记住从哪里继续执行。也叫恢复现场

堆中分为新生代和老年代,新生代占比三分之一,老年代占比三分之二;
新生代中又分为Eden区(8/10)、from区(1/10)、to区(1/10)。
new一个对象的时候,这个对象的引用会先进入到Eden区,随着Eden区增多到满的时候发生minor gc,可用的对象会分配到from区,并标志年龄为1,不可用的直接gc掉。若Eden区又满了,对Eden区和from区gc,可用的分配到to区年龄+1。from区和to区来回切换,直到该对象年龄为15,分配到老年区。老年区满的时候发生full gc。内存较大的数据是直接分配到老年区,因为来回复制是十分消耗资源的。

jvm参数调节: -Xms 堆最小空间
-Xmx 堆最大空间
-Xmn 新生代堆的大小
-XX:maxtenuringThreshold 多少岁为老年

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值