jvm优化(一)

什么是jvm?

java程序自己独立运行环境,包括堆栈、寄存器和java字节码的指令集。

 

jvm上可以运行的语言

  • Java
  • Scala
  • Groovy

 

jvm、jdk和jre

jvm:jvm是jre的一部分

jre:java运行环境,包含jvm

jdk:包含

  • jre
  • jvm
  • 常用的一些开发工具,javac、java和jconsol等等

 

生命周期

  main方法是jvm实例运行的起点,main作为程序初始线程的起点,任何其他线程都由该线程负责启动,main线程是非守护线程。

  jvm实例消亡的方法:

  • 所有的非守护线程都终止时
  • System.exit()

 

组成

  • 类加载器子系统(class loader)
  • 执行引擎子系统
  • 运行时数据区(runtime data area)
  • Native接口

 

运行流程

  1. 首先将java源代码通过javac指令编译成字节码文件
  2. 字节码文件通过class loader进行加载
  3. 将类的权限修饰类名成员变量修饰成员变量方法修饰方法参数方法返回值等等放入运行时数据区的方法区;将new出来的对象放入中,类的静态变量放入常量池中;将对象索引放入VM栈里;调用本地方法放入本地方法栈PC寄存器根据线程数分配,用于存放代码读取行数
  4. 执行引擎根据运行时数据区调用本地库接口和本地方法库

 

Class loader

负责加载字节码到jvm中,根据类中定义的内容分配到不同的运行时数据区

分类:

  • Bootstrap ClassLoader:classLoader的根,rt.jar
  • Extension ClassLoader
  • Application ClassLoader
  • 用户自定义类加载器

加载过程:

  1. 加载  负责找到class文件,并加载到jvm中
  2. 连接
    • 校验  确保类的格式正确
    • 准备  为类中的变量分配内存空间,并初始化默认值
    • 解析  符号引用转换为直接引用
  3. 初始化  执行静态代码块,构造器,静态属性,在调用new,反射调用类中的方法,子类调用初始化函数
posted @ 2018-04-18 22:10  huanStephen  阅读(531)  评论(0编辑  收藏  举报