2 jvm内存模型

jvm虚拟机=运行时数据区+类装载子系统+字节码执行引擎

运行时数据区=堆+栈+本地方法栈+方法区+程序计数区

线程的内存空间栈,这里的栈与数据栈是一样的设计结构

这里和程序的运行顺序是一样的,程序在执行时是从最里面先执行然后到最开始的逻辑

main方法先运行,先压栈道底部,后面的接着往上压,执行的时候,先从上面开始执行到底部

栈:线程独有,每个线程一个

栈帧:方法独有, 每个方法对于一个栈帧

栈帧:局部变量表,操作数栈,动态链接,方法出口

操作数栈是方法里面执行数据操作的内存

程序计算器:线程独有,记录当前线程执行的行号

动态链接:方法对应的内存地址

方法出口:方法执行完返回到主方法的出口位置

main:有对象的时候,对象会在生成在堆里,在局部变量变里有一分指向堆的内存地址

方法区:共享,运行时常量池+静态变量+类信息+堆对象的内存地址,元空间(永久代或持久代)

元空间(直接物理内存),默认21m,默认无效扩展,默认会使用全部内存,达到阀值会触发full gc,项目启动会很慢,会触发gc和扩容,导致启动很慢

本地方法栈:线程独有,native c++的语言实现的(Java字节码执行引擎调用c++)

堆:共享,年轻代1/3(eden区8/10,so 1/10,s2 1/10),老年代2/3

eden满了触发垃圾回收,由字节码执行引擎执行minor gc  

引用计数达到15次就放到老年代

gcRoot :局部变量,静态变量,从根节点出发都有引用的

静态对象,缓冲对象都会到老年代

stw:stop 用户线程暂停,用户体验不好,

minor gc时间很短,full gc很长,优化对象 

stw:目的就是当前查找垃圾对象的时候是暂停用户程序,是为了确保查找垃圾对象的过程是有效的,避免查找到一半的时候,线程结束,这次查找浪费了

堆:xms xmx

新生代:xmn

方法区:metaspacesize,metaspacesize

线程/栈:xss 默认1m

元空间:256M,默认21m

栈空间越小,相同情况下,线程数越多

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值