享学堂-架构师网课笔记-JVM-L1

Java诞生之初是从C语言之后的,为什么会出现Java,就是因为市场上存在多个操作系统像Linux,Mac,Windows,机器的位数也有可能不同,像32位,64位系统指令不同。而为什么会存在多个操作系统?因为底层存在不同的硬件有AMD和Internet,所导致机器指令有所不同。而JVM就是屏蔽下层的操作系统用的一个虚拟机。在这里插入图片描述
所谓的虚拟机,JVM就是一个操作系统,操作系统要干的事它都要干,操作系统主要作用是什么?是计算机资源的合理分配,包括内存,CPU,I/O,网络这些硬件资源。而现在要入门学习的是内存管理模块,为什么要先学习内存管理模块因为内存管理是其他功能的基础,其他功能都要先经过内存,再到执行引擎,所以先学习内存管理,而内存模块是其他功能的基础,通过学习JVM内存模型以后主要以后可以对虚拟机调优,当出现内存占用过高或者CPU过高时能定位并排查,因为当流量大时会出现各种内存会回收不及时等问题。在这里插入图片描述

JVM整体内存

JVM的内存可以划分为两部分,一部分是线程共享区一部分是线程私有区,一部分是线程共享区,还有的就是直接内存区,就是不归虚拟机管理的在unsafe方法下面需要自己申请和释放内存。下面先学线程私有区部分。
在这里插入图片描述

线程私有区

线程私有区,可以理解为就是一个main方法运行的地方类似于程序的最小单位,它由虚拟机栈,本地方法栈,和程序计数器组成。

虚拟机栈 -Xss 1M

虚拟机栈类似于CPU中的高级缓存,负责存储计算所需的临时数据,整个虚拟机栈默认1M。期中局部变量表存储的是运行中数据的临时数据,一般由方法里面的变量组成,例如int a=1; 在运行过程中就会往地址是0的局部变量表存储值为1。
在这里插入图片描述
例如计算 int a=1 ; int b=2; int c=a+b; 这个计算过程如下:在局部变量表中申请地址为0的表,压入操作数栈,申请地址为1的表,压入操作数栈,执行相加操作,压出结果。整个执行只是负责存储数据,执行由执行引擎进行,而程序计数器则记录行数,当出现时间片用完时或者出现中断,记录代码运行的行数。

在这里插入图片描述

本地方法栈

本地方法栈跟虚拟机栈的功能类似,用于记录程序的执行情况,例如方法中调用了其他方法,就会把运行的当前方法压到栈底,等其他方法执行完了,就会从栈顶取出继续运算。

方法区&元空间

方法去就是虚拟机加载类的时候记录价值的相关信息,包括类信息,静态变量,常量,运行时常量池,字符串等信息。而到了jdk1.8则改为元空间实现,而以前则称“永久代”。而无论是叫什么,它的功能和意义都是一样的,而JDK只是提供一种标准,实现可以有所不同。

垃圾回收的地方,所有对象存放的地方,以后课程展开讲。
总结:这次课程主要接触的是概念内容和方法运行时的内存变化,及JVM的设计角度和原理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值