jvm学习笔记

1、jvm是一种规范,vm指虚拟机,符合规范的就是jvm。2010年oracle收购了sun,将主要使用hotspot这个虚拟机。有些公司有自己的虚拟机,如IBM,用来运行自己内部程序。一个Java应用对应一个Java虚拟机,既有几个main函数就有几个虚拟机。

    

2、jvm基本结构:

1、只要有非守护线程存在,虚拟机就会一直运行,gc是守护线程。守护进程里new出来的进程也是守护进程。

2、jvm运行过程:1、找到main方法所在的类,通过类加载器把该类的信息加载到方法区(permanent区),

类的信息有:

注:字段信息存的是成员变量,如private int i;静态变量储存在5.类变量中。常量池里都是final修饰的变量,main方法也在方法区里。当main方法里调用一个方法时,就会把方法放入帧 并压入Java栈。

本地方法:是指操作系统自带的方法。如window操作系统自带的一些底层方法。

任何本地方法接口都会使用某种本地方法栈。当线程调用Java方法时,虚拟机会创建一个新的栈帧并压入Java栈。然而当它调用的是本地方法时,虚拟机会保持Java栈不变,不再在线程的Java栈中压入新的帧,虚拟机只是简单地动态连接并直接调用指定的本地方法

3、基本类型变量,引用变量都存储在栈中,没有默认值。但是数组是在堆中分配内存的,有默认值。

4、多线程相关:保证数据同步的方式,volatile和synchronize和final。指令重排,jvm提高性能的一种方式。如:a=2;b=3;交换执行顺序是没有关系的。多线程之间jvm不会考虑有序,想要有序只能synchronize修饰方法。

5、jvm对字节码有两种执行方式,1、是解释执行,2、是编译成机器码直接执行。(比第一种快10倍)

6、总结:首先,当一个程序启动之前,它的class会被类装载器装入方法区(不好听,其实这个区我喜欢叫做Permanent区),执行引擎读取方法区的字节码自适应解析,边解析就边运行(其中一种方式),然后pc寄存器指向了main函数所在位置,虚拟机开始为main函数在java栈中预留一个栈帧(每个方法都对应一个栈帧),然后开始跑main函数,main函数里的代码被执行引擎映射成本地操作系统里相应的实现,然后调用本地方法接口,本地方法运行的时候,操纵系统会为本地方法分配本地方法栈,用来储存一些临时变量,然后运行本地方法,调用操作系统APIi等等。









  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值