java 基础之jvm学习

jvm:   java 虚拟机,一个main方法运行就有一个对应的虚拟机;

生命周期就是一个程序的开始到一个程序的结束。

java.exe这个程序其实就是一个java虚拟机

一个java的application对应了一个java.exe/javaw.exe你

直白点说就是你运行了几个main函数就启动了几个java应用,也就对应启动了几个java虚拟机

重点:java虚拟机有两种线程,一种叫守护线程,一种叫非守护线程。

守护线程:GC(可以理解为生活中的智能机器人)垃圾回收机制,这个后续讲解
非守护线程:main()函数主线程,函数中new Thread()匿名线程都是非守护线程


关键点:java虚拟机中,只要有任何非守护线程还没有结束,java虚拟机实例都不会退出。

 

Java虚拟机的体系结构:

       首先 java虚拟机是不能直接读懂Java代码的,是读取编译器运行生成的class文件的

   

    class文件  ---------------------》 类装载器,子系统

                                                           |     |

                                                           |     |

     方法区      堆       java栈             PC寄存器          本地方法栈   (运行数据区)

       |         |                                                  |                                  

       |         |                                                  |

   执行引擎        《  ----------------》本地方法接口  《-------------------本地方法库

 

详细了解可以看这个博客,个人觉得很不错,引用一下https://www.cnblogs.com/xuningchuanblogs/p/7688332.html

总结:

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

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值