jvm学习笔记

本文详细介绍了JVM的架构,包括类加载子系统和运行时数据区。类加载子系统负责将编译后的字节码加载到方法区,而运行时数据区包括堆、虚拟机栈、本地方法栈、程序计数器和方法区(或元空间)。虚拟机栈执行方法,堆存储对象,程序计数器记录执行位置,本地方法栈处理C方法调用,方法区存储类元信息和常量池。
摘要由CSDN通过智能技术生成

## 本文主要记录学习jvm中的要点笔记供以后参考

1.jvm整体设计架构
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210514225218457.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0Fubm90YXRpb25aWg==,size_16,color_FFFFFF,t_70在这里插入图片描述
以上图秒速了jvm的整体架构,取自于网络,因为存在方法区,可以判断是java8之前,因为java8之后jvm取消了方法区,取而代之的是元空间(源空间也是方法区的实现)

下面根据jvm架构图一次讲解jvm的各部分相关知识

  1. 类加载子系统
    类加载子系统是为了把我们程序员编写的java代码加载到jvm内存中,因为只有把代码加载进来了我们的jvm才能运行、管理。
    首先,我们编写了java代码之后(不管是多垃圾的代码),我们首先是通过javac编译我们的java代码,或者通过我们的编辑器(eclipse,idea)在这里不加啰嗦。直接通过我们的类加载器,把我们编译后的字节码,通过jvm自带的加载、解释、验证等功能(本人也不带记得清了),把我们的类信息加载到我们的方法区(无论是方法区还是源空间,都是方法区的实现),然后等待我们的程序运行使用(相当于我们做饭之前把我们需要的食材,比如肉类买回家)。

  2. 运行时数据区
    这个jvm部分使我们的jvm最为重要的部分(也是我们面试的考点,嘿嘿嘿),根据图,我们知道他分为堆空间,虚拟机栈,本地方法栈,方法区(再次强调源空间也是方法区的实现),程序计数器(略过寄存器)。首先我们需要知道这几个部分在我们jvm中起到什么作用,以及最为重要的这几个部分和我们写的java代码(垃圾代码,嘿嘿嘿)有什么关系。
    首先虚拟机栈,这个地方就是执行我们写的方法的,比如我们提供一个查询接口,然后我们调用sercice方法,其中包含了我们需要调用的一些参数验证等方法,这些方法的执行地点就在我们的虚拟机占中(哈哈哈)
    第二个,堆区,这个地方有何我们的代码有什么关系呢?(嘿嘿嘿),我们的java是面向对象(不是嘿嘿嘿的对象额)编程的,我们new出来的对象就放在这个地方,除了这个在java7之后我们的静态变量和字符串敞亮池也在这个地方(后文会有解释,不慌),因为我们是面向对象编程,所以这个地方很重要,后文会有详细描述
    第三个,程序计数器,这个东西顾名思义,就是一个记录数字的(嘿嘿嘿,不对)。这个东西确实是用来记录的,但是他是用来记录我们程序执行到哪里的。因为我们不记录一下你知道你的代码(垃圾代码)执行到哪里了吗?因为我们的cpu一次只能执行一个线程,但是你偏偏要写那么多个接口,就会有很多个线程来访问,导致我们有很多个线程来访问我们的服务器,然而cpu这个不专一的东西,他一会执行这个代码一会执行那个接口,导致他切来切去的,回过头来执行我们的查询接口的时候,你不记录下上次执行到哪里,他这个鬼东西哪里知道该从哪里执行吗
    第四个,本地方法栈,这个东西是个大哥,不好说,也不敢说(java是c编写的这个地方和c相关),因为他是调用我们c的地方。(知道就好,这是大哥)
    最后一个方法区,这个地方也很重要,因为他存储了我么的类元信息(说的高端,就是类信息,包括有哪些属性,哪些方法啥的),以及我们的常量池,以及其他信息,他是方法区的实现,因为后来源空间代替了他。

码子好累额,下一篇继续!

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值