JVM笔记

1 篇文章 0 订阅

jvm 的生命周期 

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

jvm实例消亡

所有的非守护线程都终止时

System.exit();

Jvm运行流程

Java代码编译是由Java源码编译器来完成的,流程如下

Java字节码的执行是由JVM执行引擎来完成的。流程如下

JVM的组成

 

Class Loader

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

1. Bootstrap ClassLoader  : 位于rt.jar, 根加载器

2.extensions class loader : 扩展类加载器

3.system class loader : 系统类加载器

4.自定义类加载器

 

Class Loader加载过程

1.加载: 负责找到class文件,并加载到jvm中

2.连接: 

         校验: 确保类的格式正确;

         准备: 为类中的变量分配内存空间,并初始化默认值;

         解析: 符号引用转换为直接引用

3.初始化: 执行静态代码块,构造器,静态属性

         在调用new(), 反射调用类中的方法,子类调用初始化函数

 

  操作数栈

      java没有寄存区,所有参数传递都是使用操作数栈

 

  栈上分配

  逃逸分析

        -XX:+DoEscapeAnalysis

        进行逃逸分析之后,产生的后果是所有的对象都将由栈上分配,而非从JVM内存模型中的堆来分配。

 

 

指令重排

 

JVM常见参数配置

Trace跟踪参数

1. 打印GC日志信息:  -verbose:gc  -XX:+PrintGCDetails

2.GC日志文件目录: -Xloggc:D:/gc.log

3.打印堆信息: (每一次gc后) -XX:+PrintHeapAtGC

4. 打印类加载信息: -XX:+TraceClassLoading

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值