jvm虚拟机工作原理

    今天博客的正文,这一周都在研究这个虚拟机,找了一些相关资料,看了一些视频,大概知道一点点,小弟学时不多,有说的不对的地方,或者不详细的地方欢迎留言补充,交流学习。

1.什么是虚拟机

      联想到的问题,为什么说java一次变异到处运行? 虚拟机是什么?java的虚拟机又是什么?

 带着几个问题 看我怎么解释

            何为一次变异导出运行,只要有java环境的电脑 不管你是什么操作系统,都可以运行java。

那是应为java有个虚拟机  jvm  ,就相当于你电脑装一个虚拟机,在虚拟机上可以装别的系统一样,在这个虚拟机环境的系统,你可以装匹配系统的软件。差不多一个意思。Java虚拟机都封装了与底层交互  可以看源代码 带  Native 的方法  都是于底层交互的。

 对于不同的os(操作系统) 有不同的交互方法,然而上部分的运行程序的都是一样的,所以java称为一次变异到处运行

面试 中常问的  jdk是什么------》java开发工具包,jre是什么--------》java运行时环境,包括了jvm(虚拟机),

在程序运行中 虚拟机是怎么运作的,我们的方法,常量,变量,都在那 ?

jvm虚拟机工作原理

这是虚拟机运行原理(百度百科下载的)

java程序经过编译后形成*.class文件,内含JVM的字节码。通过类加载器将字节码(*.class)加载入JVM的内存中。

这时候jvm中会出现一个虚拟机运行时数据区

这个数据区分为几块:

1.程序计数器:我的理解就是程序运行到哪一行他要记录,他占用很小的没存,也是虚拟中唯一没有内存溢出异常的模块

2. 堆内存: 主要放的对象实例,一个对象被你创造出来的时候,会有一个唯一的地址值,栈中的引用对象应用的时候,其实是指向一个堆内存的地址值,然后 堆这里面还有一个很大的要看的地方

     就是GC (垃圾回收机制),垃圾回收机制有很多算法下次说。

3.虚拟机栈:虚拟机栈里面包含栈帧:栈帧里面主要存放-----局部变量++++操作数栈(我理解里面都是运算,/*-+之类的)++++动态链接(就是动态的链接你要用的方法)+++出口(方法执行完抛出异常走异常,正常执行完,就删除释放内存)。FIOL(进栈出栈    规则 先进后出   怎么解释呢,你想想一下弹夹,先执行A方法,A方法中调用B方法。先执行A方法的时候A方法先进栈,走到要执行B方法的时候,B方法才进栈,然后执行B方法,B方法执行完,B方法释放,这时A方法还在执行,A方法也执行完,释放内存 )

4.本地方法栈:主要跟底层交互

5.方法区:存放一些静态方法,静态变量,常量。

 今日简单的记录点。欢迎交流