JVM初探
Posted 后厂反应堆
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JVM初探相关的知识,希望对你有一定的参考价值。
本文作者
目录:
1.为什么学Java
2.为什么学JVM
3.JVM构成
一. 为什么学Java
1. TIOBE排行榜是根据互联网上有经验的程序员、课程和第三方厂商的数量,并使用搜索引擎(如Google、Bing、Yahoo!)以及Wikipedia、Amazon、YouTube统计出排名数据,只是反映某个编程语言的热门程度,并不能说明一门编程语言好不好,或者一门语言所编写的代码数量多少。
最新一期排名,2020年3月,java依然排名第一,已经很多年了。
2. Java生态圈
Java是目前应用最广泛的软件开发平台,早已不只是一门计算机语言,更是一个平台、一种文化、一个社区。
作为一个平台,Java虚拟机扮演着举足轻重的作用。
Groovy、Scala、JRuby、Kotlin等都是Java平台的一部分
作为一种文化,Java几乎成为了"开源"的代名词。
第三方开源软件和框架。如Tomcat、Struts、MyBatis、Spring等。
就连JDK和JVM自身也有不少开源的实现,如OpenJDK、Harmony。
作为一个社区,Java拥有全世界最多的技术拥护者和开源社区支持。
3. Java:跨平台的语言
二、为什么学JVM
1. Java不是最强大的语言,但JVM是最强大的虚拟机,JVM可以执行多种语言经过编译后的字节码文件。
2. JVM的位置
JVM是Java的核心,位于操作系统和字节码之间。
JVM位于JDK的底层,是整个Java的基础,JDK自带的JVM是HotSpot JVM(有很多种JVM的实现)。
3. 更实际的需要
面试的需要
高级程序员必备技能
调优的需要
排查问题的需要
三、JVM构成
1. JVM由三部分组成,类加载子系统、运行时数据区、字节码执行引擎。
.class文件被"类加载子系统"加载到方法区,由“字节码执行引擎”执行,执行过程中,所需数据存储在“运行时数据区”,三大组成部分,分工协作,各司其职。
2. 类加载子系统,在加载类的过程中,包含加载阶段、链接阶段、初始化阶段。
字节码执行引擎包含解释器、分析器、垃圾回收器。
3. 运行时数据区—程序计数器、栈
程序计数器、栈、本地方法栈都是线程私有的。线程会为每个方法分配一个栈桢,栈桢区域保存了这个方法的局部变量、操作数,并在运行的过程中,将符号引用替换为实际引用,即动态链接的过程,栈桢中还保存了方法的返回出口。
栈的数据结构特点是先进后出,如下图,该线程要执行两个方法,main方法和compute方法,main方法调用了compute方法。因此,执行main方法时,main方法先入栈,执行到compute方法时,compute方法入栈,compute方法执行完成后出栈,main方法执行完成后出栈,即main方法先入栈后出栈。
程序计数器,记录了程序执行的位置,保证在线程切换时,可以顺利返回到上次执行的位置点。
4. 运行时数据区—堆
堆分为新生代、老年代,新生代分为伊甸园区、幸存者区,幸存者又分为From区和To区。
这种分区思路,也是一种拆分思想的体现,将一大块内存区域,按照某种规则,拆分开来,分而治之。
现面向所有技术发烧友
征集优秀原创技术文章
后厂反应堆将为你提供展示平台
期待你的分享哦!
(可添加上图微信投稿)
以上是关于JVM初探的主要内容,如果未能解决你的问题,请参考以下文章