Java虚拟机 - JVM是什么?

为什么要有JVM? 
JVM就是JAVA运行虚拟机,那么虚拟机又分为系统虚拟机和程序虚拟机,而JVM是属于程序虚拟机,所以不要看到是虚拟机就误认为JVM是系统虚拟机 。
 
JVM是帮助Java程序开发者在开发过程中无需考虑无用的资源需要进行回收,避免内存溢出等问题且实现在不同平台上运行Java程序 。
 
如: 开餐馆,你每天要把店铺的垃圾拉到垃圾厂去,如果你不拉或忘记拉,越积越多垃圾会堆满你的店铺,甚至还会堆到别的店铺去,不止你自己的店铺无法营业,别人的店铺也无法营业,随着时间的累积,整条街的店铺都给垃圾堆满,都无法营业 。
 
在看到这种情况房东就有意见了,房东说:”你们每个月都给我多交一些钱,我解决垃圾这个问题 。(JVM运行也要资源)”
 
房东会在街道上摆放上大的垃圾桶,定时的检查,如果垃圾桶满了,先拉到一个集中的地方,等这个区域的垃圾慢慢的差不多满了,就把这些垃圾拉到垃圾厂进行处理 。
 
当这个时候我觉得房租太贵了,我搬去别的地方,那么又是一个新的房东,这个房东对垃圾处理这个问题就不一样了,他可能要求你必须要买我的袋子装着的,我才会去处理这个垃圾 。
 
相关的管理者看到这个情况,马上说:“接下来,垃圾的这个问题,由我们安排的人来统一处理,以后不管你搬去哪里,只要你到我们的官网上填一份表格就行了 。(运行环境)”
 
如果没有JVM,可以脑补一下 。
 
JVM是什么? 
在弄清楚JVM是什么之前,先弄清楚JDK、JRE是什么?
 
JDK就是开发的工具包,包括了JRE 。
 
JRE是Java运行环境,包括了JVM和Java核心类库
 
JVM就是Java程序运行平台,拥有自己的指令集,抽象操作系统和CUP结构、内存结构,在运行时操作不同的内存区域 。
 
Java程序编译后的文件是*.class文件,*.class文件是按照Java标准编译的文件,JVM是实现了Java制定的标准,因此JVM是可以运行Java程序的,而JVM是一个虚拟出来的机器,通过自定义的执行引擎、接口等实现方式与实际机器各种交互,使得Java程序在运行过程与实际机器无耦合,从而实现跨平台 。
 
如: 以上的例子,相关管理者只管理各自的区域垃圾问题,各自的管理者都使用不同的颜色,导致每次只要有分店在别的地点开张,那么这个分店就要换垃圾袋颜色,否则管理者不承认这个垃圾是他管的 。
 
生产垃圾袋的厂家觉得这样也不好,回收回来的袋子还要做分类,不利于他回收袋子,于是和各个店家商量都只用一种颜色的袋子,厂家也只生产这个颜色的袋子,不管管理者,厂家愿意这样做,店家也愿意用 。
 
于是生产厂家就只生产一种颜色的袋子,一种袋子到处通用(Compile Once,Run Everywhere.) 。
 
作用 
给Java程序提供一个独立的运行环境
 
特点 
无需依赖于任何系统、平台之上 。
 
优点 
跨平台
 
可扩展性强
 
……
 
按照无需依赖任何系统,独立运行环境大家可以试下这个思路去分析,这里就不写那么多了 。
 
注:每个人的学习方式不一样,以上只是提供一个思路而已 。
 
缺点 
JVM是一个程序虚拟机,但始终还是要运行在操作系统之上的,初始化的时候需要与操作系统建立各种交互,导致启动时间长,与操作系统交互导致资源的消耗……
 
相当于一个苹果放在一个盘子上,盘子放了一些水,而苹果在放进去的时候,盘子的水会高涨,如果超过盘子就会溢出,所以有一个盘子的要求,要么就对放入的苹果大小,质量进行控制,以达到要求,另外苹果的灵活性也无法自由的变化形状,所以放入占用了一定的位置导致能放的东西越来越少,盘子放入更多的东西的时候会越来越挤……
 
至于其他的缺点,大家可以试下这个思路去做分析 。
 
注:每个人的学习方式不一样,以上只是提供一个思路而已 。
 
主流JVM 
名称
研发者
特点
Hotspot
Longview Technologies开发,然后被sun收购
性能出色,复杂度有点高
JRockit


推荐阅读