4

01_JVM初识

 3 years ago
source link: http://sunliangliang.com/?p=3
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

01_JVM初识

发表于 2020-10-08 | 分类于 图说JVM | 0 | 阅读次数 58

该系列内容用来记录自己在JVM学习中的一些知识,梳理学习内容同时记录分享,进行交流。

通过本课程可以了解如下内容,希望大家能够掌握和了解如下内容。

  • jvm处理的简单流程
  • jvm内存模型初识
  • JVM内存模型

1.1.java简单的处理流程

我们大家应该都是经历过代码上线的流程,通过maven进行打包mvn package打出一个java包,然后通过java -jar xx.jar命令就启动了一个java程序,但是大家有没有思考过在这个过程中,我们究竟做了什么,或者说程序到底做了什么?

这是我们一个系统运行的一个简单流程图,从我们代码的编写到整个的运行。那么class文件是如何到JVM中并且运行起来的呢?这里就需要引入一个新的概念了类加载器,相信对于JVM有过了解的同学应该是很熟悉这个东西了。

1.2.JVM中的处理流程

这里类加载器会将class文件加载到jvm中去,然后供后续代码执行,这里还有一个执行引擎的概念。

2.JVM内存模型

类加载器加载到JVM的过程中肯定不是简单的把class类加载进内存,然后就去执行代码了,那么它的内部的内存模型究竟是怎样的呢?

JVM的内存模型在不同的虚拟机实现上略有不同,如HotspotJRockit是不一样的,而在JDK1.8中两者进行了合并,这也是为什么JDK1.7和1.8的内存区域有比较大的区别的原因。

2.1.内存模型规范

所有线程共享:该区域是需要我们重点关注的区域,所有的对象实例及数组都在此处进行分配。是垃圾回收器重点处理的区域

所有线程共享:该区域主要用于存储类的一些信息,常量、静态变量等信息。

线程私有:为虚拟机使用到的java方法提供服务。

本地方法栈

线程私有:为虚拟机使用到的本地native方法服务,如多线程CAS中的Unsafe

程序计数器

线程私有:可以把它当做时程序的字节码执行的行号记录器。每个线程私有,它会记录该线程执行到代码中的哪一行

3.大图总结

坚持有质量的创作,您的支持将支持我继续创作!

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK