jvm虚拟机-什么是jvm

最近看了一段时间jdk源码,在看源码的过程中对数据的存储不是很清楚,当时就在想数据到底存在哪里去了?以前只是看博客什么的对jvm有一个大概的了解,但是没有深入研究。经过一段时间的研究<<深入理解java虚拟机后>>,才决定写一些关于jvm的文章,不为别的只为了同为技术的程序员们少走一些弯路,因为这本书第一遍读起来晦涩难懂,我也是查阅了大量的资料才渐渐的理解了什么意思。同时也为了留下自己的脚印,以后几十年后能够看到我在这一年没有荒废时间还在努力的研究技术,估计那时候会欣慰的一笑吧。
1 jvm怎么来的
还记得上的java第一趟课吗?老师怎么说的。。。java是面向对象的语言,而且它是跨平台的。这个跨平台是什么意思?
我们的计算机只认识0 或者 1,我们不管用什么语言写的程序都要经过编译器编译成 0 或者1 组成的2机制文件才能被机器认识,程序才能执行。现在也是这样子,但是我们的程序是运行在机器上,机器是有操作系统的也是有机器指令的,面对不同的厂家不同操作系统我们都需要根据具体的需求 进行编译,这样子做了太多的重复性工作。所以‘与平台无关性’这一理想就出现了,在这种理想下虚拟机也就应运而生。
而且虚拟机跟java一点关系都没有,只不过java是在虚拟机上运行而已。更准确的说任何语言之言编译成.class文件都能在虚拟机上运行。

这里写图片描述

不管什么语言只要编译成class文件,都能做到一次编译处处运行。

1 jvm是什么?
我想大家学java的时候第一课一定是伟大的helloword.java对吧。那么我们怎么执行的这个helloword.java文件让他运行的呢?
1首先我们javac helloword.java
这里写图片描述
编译好了 生成一个.class文件。
2 我们需要按照说明执行java helloword
这里写图片描述
果然按照我们设想的打印出了HelloWord,第一次执行程序的时候有没有兴奋呢?那么我们现在在回顾看一下它是怎么运行的。我们知道执行的命令是java 这是java是一个包装好的命令,这个命令执行了就是启动一个jvm虚拟机。然而启动虚拟机是不够的。因为jvm不知道我该运行什么。所以要有一个系统来吧本地的.class里面的2进制文件加载进虚拟机中。吧文件加载进来我需要开辟一个地方来存放这些东西吧。吧东西存放了呢?jvm需要知道 你到底让我干什么啊。这时候就需要解析文件,既然虚拟机可以使用了,那么按照程序所写的执行完了。东西岂不是还存在‘一个地方‘中,那么长久下来机器还不撑爆了,所以需要定时吧不用的都删除,以保证内存。通俗来讲这就是虚拟机做的事情。
‘加载进虚拟机’- –类加载器子系统
’一个地方‘ --- 运行时数据区域(堆 栈)
’解析文件‘---- 执行引擎子系统
’定时删除‘----垃圾收集子系统
以上就是jvm的基本东西,他们算在一起才叫jvm。
这里有一个比较有意思的比喻。
大家都经常吃饭。下面我描述下吃饭的过程。
吃饭的时候,饭不会自己跑到嘴里,
所以 ‘类加载器子系统’负责吧饭送到你的嘴中,
经过咀嚼 饭到了胃里,也就是‘运行时数据区域(堆 栈)’中存着,
经过肠胃 也就是‘ 执行引擎子系统’的消化,
我们吸收营养来做日常的开销,消化完了产生了废物,
这时候就需要菊花也就是‘垃圾收集子系统’排出体外。
jvm就是不断的重复这些过程来执行程序,从而保证程序的正常运行。
jvm 就是这些东西的组合,这章就到这里,只是根据我自己的想法笼统的概括了jvm是什么。后面几章将会拆分各个系统深入了解jvm

  • 27
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值