深入理解java虚拟机之自动内存管理机制

java虚拟机是什么?

  • 抽象规范 仅仅是一种概念
  • 一个具体的实现 可能来自多个提供商或者运行在多个平台上
  • 一个运行中的虚拟机实例  当运行一个java程序的同时,其实就是运行了一个java虚拟机实例

Java虚拟机的生命周期

    java虚拟机有两种线程:守护线程和非守护线程

  •     守护线程:java虚拟机自己使用的,比如垃圾回收器
  •     非守护线程:当运行程序中如果非守护线程执行完毕,那么java虚拟机实例将退出。main方法就是非守护线程

Java虚拟机的体系结构

   

运行时数据区:以某种形式存在于每一个java虚拟机视线中,规范描述很抽象,具体的细节是由实现的设计者决定的。每个虚拟机实例都有一个方法区和一个堆,他们是线程共享的,class的类型信息会解析存放到方法区(持久代,但是只是sun官方的实现是这种情况,其他的虚拟机没有,而且后期规划可能将持久代放入本地方法区),当运行是创建的对象会放入堆中(这个是我们创建的堆内存,-Xmx,-Xms,连续的内存空间)。每个线程访问的时候会创建属于自己的程序计数器(pc寄存器)以及java栈(虚拟机栈),java栈是由多个栈帧组成,每个栈帧都代表一个方法,当一个方法执行完毕,那么一个栈帧也将被抛弃。栈是先进后出的。那么表示如果方法里面调用方法,那么方法里面的方法栈先释放,最后才释放最先调用的方法。

 

类装载器:每个java虚拟机都有一个类装载子系统,他根据给定的全限定名来装入类型(类或接口)      

执行引擎:每个java虚拟机都有一个执行引擎,负责执行那些包含在被包含在 被装载类的方法中的指令

 方法区:

  •      运行常量池
  •     方法信息
  • 除了常量以外的所有类变量
  • 一个到类classLoader的引用
  • 一个到class类的引用

 

堆:

 寄存器:program counter register(程序计数器),每一个新程序创建时,都将得到自己的寄存器以及一个java栈  

java栈:

本地方法栈:

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值