jvm虚拟机工作原理
今天博客的正文,这一周都在研究这个虚拟机,找了一些相关资料,看了一些视频,大概知道一点点,小弟学时不多,有说的不对的地方,或者不详细的地方欢迎留言补充,交流学习。
1.什么是虚拟机
联想到的问题,为什么说java一次变异到处运行? 虚拟机是什么?java的虚拟机又是什么?
带着几个问题 看我怎么解释
何为一次变异导出运行,只要有java环境的电脑 不管你是什么操作系统,都可以运行java。
那是应为java有个虚拟机 jvm ,就相当于你电脑装一个虚拟机,在虚拟机上可以装别的系统一样,在这个虚拟机环境的系统,你可以装匹配系统的软件。差不多一个意思。Java虚拟机都封装了与底层交互 可以看源代码 带 Native 的方法 都是于底层交互的。
对于不同的os(操作系统) 有不同的交互方法,然而上部分的运行程序的都是一样的,所以java称为一次变异到处运行
面试 中常问的 jdk是什么------》java开发工具包,jre是什么--------》java运行时环境,包括了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.方法区:存放一些静态方法,静态变量,常量。
今日简单的记录点。欢迎交流