JVM初探

Posted 后厂反应堆

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JVM初探相关的知识,希望对你有一定的参考价值。

本文作者




目录:

1.为什么学Java

2.为什么学JVM

3.JVM构成


一. 为什么学Java


1. TIOBE排行榜是根据互联网上有经验的程序员、课程和第三方厂商的数量,并使用搜索引擎(如Google、Bing、Yahoo!)以及Wikipedia、Amazon、YouTube统计出排名数据,只是反映某个编程语言的热门程度,并不能说明一门编程语言好不好,或者一门语言所编写的代码数量多少。


最新一期排名,2020年3月,java依然排名第一,已经很多年了。

JVM初探


2. Java生态圈


Java是目前应用最广泛的软件开发平台,早已不只是一门计算机语言,更是一个平台、一种文化、一个社区。

  • 作为一个平台,Java虚拟机扮演着举足轻重的作用。

  • Groovy、Scala、JRuby、Kotlin等都是Java平台的一部分

  • 作为一种文化,Java几乎成为了"开源"的代名词。

  • 第三方开源软件和框架。如Tomcat、Struts、MyBatis、Spring等。

  • 就连JDK和JVM自身也有不少开源的实现,如OpenJDK、Harmony。

  • 作为一个社区,Java拥有全世界最多的技术拥护者和开源社区支持。


3. Java:跨平台的语言

JVM初探


二、为什么学JVM


1. Java不是最强大的语言,但JVM是最强大的虚拟机,JVM可以执行多种语言经过编译后的字节码文件。

JVM初探


2. JVM的位置


JVM是Java的核心,位于操作系统和字节码之间。

JVM初探


JVM位于JDK的底层,是整个Java的基础,JDK自带的JVM是HotSpot JVM(有很多种JVM的实现)。

JVM初探


3. 更实际的需要

  • 面试的需要

  • 高级程序员必备技能

  • 调优的需要

  • 排查问题的需要


三、JVM构成


1. JVM由三部分组成,类加载子系统、运行时数据区、字节码执行引擎。


.class文件被"类加载子系统"加载到方法区,由“字节码执行引擎”执行,执行过程中,所需数据存储在“运行时数据区”,三大组成部分,分工协作,各司其职。

JVM初探


2. 类加载子系统,在加载类的过程中,包含加载阶段、链接阶段、初始化阶段。

JVM初探


字节码执行引擎包含解释器、分析器、垃圾回收器。

JVM初探


3. 运行时数据区—程序计数器、栈


程序计数器、栈、本地方法栈都是线程私有的。线程会为每个方法分配一个栈桢,栈桢区域保存了这个方法的局部变量、操作数,并在运行的过程中,将符号引用替换为实际引用,即动态链接的过程,栈桢中还保存了方法的返回出口。


栈的数据结构特点是先进后出,如下图,该线程要执行两个方法,main方法和compute方法,main方法调用了compute方法。因此,执行main方法时,main方法先入栈,执行到compute方法时,compute方法入栈,compute方法执行完成后出栈,main方法执行完成后出栈,即main方法先入栈后出栈。


程序计数器,记录了程序执行的位置,保证在线程切换时,可以顺利返回到上次执行的位置点。

JVM初探


4. 运行时数据区—堆


堆分为新生代、老年代,新生代分为伊甸园区、幸存者区,幸存者又分为From区和To区。


这种分区思路,也是一种拆分思想的体现,将一大块内存区域,按照某种规则,拆分开来,分而治之。




现面向所有技术发烧友

征集优秀原创技术文章

后厂反应堆将为你提供展示平台

期待你的分享哦!

(可添加上图微信投稿)


以上是关于JVM初探的主要内容,如果未能解决你的问题,请参考以下文章

JVM初探- 使用堆外内存减少Full GC

初探JVM

JVM初探

JVM快速初探

JVM初探- 内存分配GC原理与垃圾收集器

JVM初探之类文件结构