JVM概论

 写在前面

首先要说明的就是JVM不是指一个机器,也不是一个软件,而是一种规范。不要傻乎乎的觉得JVM就一种,事实上JVM类型多着呢。我们最常用的是HostSpot(TM),此外还有J9,KVM等一堆的虚拟机,而且HostSpot也不是Sun公司自己开发的,实时上Sun公司自己开发的JVM烂的不行,后来一看有家公司做的JVM好牛逼啊,比自己的牛逼多了,然后本着打不过就加入的原则,把人家买了,这才有了自带的HostSpot。

典型JVM规范模式结构图

 典型的JVM架构

类加载器:用于加载类,其中最有名的机制叫双亲委派机制,一句话概括就是能啃老绝不自己动手

元数据区(线程公有):存放代码+类对象+常量池+其它乱七八糟的东西

堆区(线程公有):年轻代(伊甸园+From+To)+老年代

栈区(线程私有):本地方法栈+普通方法栈

程序计数器:就是个记录方法是谁,从哪来,要到那里去的哲学3问小老哥

执行引擎执行class

 

  1.  编写类
  2. 编译类 javac xxx.java
  3. 运行类 java xxx
  4. 加载类(加载、验证、准备、解析、初始化、使用和卸载7个阶段。其中验证、准备、解析三个阶段称之为连接)
    1. 双亲委派机制
      Bootstrap ClassLoader(加载java lib基本类库)
      Extension ClassLoader(加载lib/ext非java库)
      Application Classloader(加载程序类)
  5. 元数据(类package.xxx.class信息)存入方法区(元数据区)
    1. 类信息
    2. 常量池:常量/静态变量  包括编译时常量池和运行时常量池
    3. 即时编译器编译后的代码
  6. 创建实例(heap)(GC)
    1. eden
    2. to/from(幸存区,任何时候只会用到其中一块)
    3. old
  7. 执行方法
    1. java方法栈(由栈帧stack-frame组成),每个栈帧由下面构成 
      1. 局部变量
      2. 操作数栈
      3. 动态连接
      4. 返回地址
    2. native方法栈(非java语言的方法,用native修饰)
  8. 程序计数器
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值