JVM内存模型

 堆(Heap):是Java虚拟机所管理的内存中最大的一块内存区域,用来存放实例对象及数组,但也不是所有的实例对象都存放在堆中。

  • 堆的最小内存由-Xms指定,默认为物理内存1/64,当空余堆内存小于40%时,就会增大,直到-Xmx设置的堆内存,可以通过XX:MinHeapFreeRation指定堆最小内存。
  • 堆的最大内存由-Xmx指定,默认为物理内存的1/4,当空余堆内存大于70%时,就会减小,直到-Xms设置的堆内存,可以通过XX:MaxHeapFreeRation指定堆最大内存。

当然为了避免在运行时频繁调整Heap的大小,通常-Xms与-Xmx的值设成一样。

堆内存 = 新生代+老生代+永久代。(持久代在物理层面,是在堆空间的;而在逻辑层面,是在方法区的;因为方法区其实物理上也是在堆中的,但是由于功能和作用的区别,逻辑上方法区是独立于堆的新生代又分为Eden区、From Survivor(S0)区、To Survivor(S1)区。

方法区(Method Area):用于存储已被虚拟机加载的类型信息、常量、静态变量、即时编译器编译后的代码缓存等数据。

从 JDK 1.8 开始,移除永久代,并把方法区移至元空间,它位于本地内存中,而不是虚拟机内存中,实际上方法区已经与Java堆分开了

虚拟机栈(JVM Stacks):每个线程在创建时都会创建一个虚拟机栈,其内部保存一个个的栈帧(Stack Frame),对应着一次次的Java方法调用。

 虚拟机栈主管Java程序的运行,它保存方法的局部变量、部分结果,并参与方法的调用和返回。

本地方法栈(Native Method Stacks):与虚拟机栈的作用类似,虚拟机栈是为虚拟机执行的java方法服务,本地方法栈是为虚拟机执行的native方法服务

程序计数器(Program Counter Register):存储当前线程所执行字节码的行号,用于当前线程中断执行后重新执行时找到原来执行到的位置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值