JVM虚拟机内存模型简单认识

JVM内存模型

  Young(年轻代)
  Tenured(老年代)
  Perm(永久代)
Young(年轻代)可以分为Eden和两个Survivor(from,to)。新的实例先放到Eden区,Survivor作为Young和Tenured的缓冲,可以向Tenured转移活动的对象实例.

Tenured老年代存储的是生命周期比较久的实例对象,对象照样会被回收
堆是Young和Tenured共同组成的(默认新生代和老年代内存倒下是1:2)
Perm属于非堆内存,属于方法区用于存放加载的class信息,不会触发回收机制

JVM结构

JVM内部分为堆、方法区、虚拟机栈、本地方法栈、程序计数器PC。
在这里插入图片描述

1.方法区(静态区):
方法区(Method Area)包类信息(方法、字段、接口、修饰符、类名)和静态变量,方法区是线程共享。当你创建或者访问class时使用的是同一个class类信息。方法区里面还存储了运行时常量池,保存了程序编译器生成的各种字面量和符号引用。

2.堆:
堆(Heap)包含了实例对象和数组对象,堆由垃圾回收器自动回收,堆是线程共享的,堆的内存空间既可以固定大小也可以动态地调整。
堆分为两大块新生代和老年代,对象chu产生之初在新生代,随后经过计数器到达阈值,进入老年代,并且老年代还存储新生代比较打的内存

3.虚拟机栈
虚拟机栈(VM Stack)生命周期和线程一样,线程可以共享,线程A访问线程B代入参数可以达到共享,存放方法内的变量和实例当线程执行完之后清空,不使用垃圾回收机制进行回收。

4.本地方法栈
本地方法栈(Native Method Stack)和虚拟机栈(VM Stack)是一样的,不同之处在于,调用本地方法栈不归虚拟机管理,在运行当中可能会用到本地方法栈的操作,比如需要C函数,那么会使用本地方法栈去调用,之后也会通过C函数回调java方法。

5.程序计数器
程序计数器(Program Counter Register)是一块较小的内存空间,可以把他看作当前线程执行的字节码行号指示器,就是说程序计数器里面记录的是正在执行那一条字节码指令的地址。
在多线程的情况下,程序计数器用于记录当前线程执行的位置,当线程切换回来时知道上次运行到哪里了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值