JVM内容(简化版)

JVM内容(简化版)(一)

`


前言

新手笔记,写来防止我的偷懒(内容如有出错,还望各位大佬多多指出)


提示:以下是本篇文章正文内容,下面案例可供参考

一、JVM是什么?(6大组件)

JVM(JavaVirtualMachine),简称java虚拟机。
JVM运行=字节码指令(套)+寄存器(组)+栈(个)+堆(个)+存储方法域(个)+GC(Garbage Collection)(个)

ps:词汇拓展

			字节码:在java里,能够被JVM理解的代码叫字节码(扩展名为.class文件)
			
			字节码指令:这里是指包含JVM操作所对应的数据类型信息(ps:Java虚拟机的指令均是一个字节长度的,由操作码+操作数组成)
			
			寄存器:存储二进制代码,由具有存储功能的触发器组合起来构成的。(1个触发器能存放1位二进制代码)
			
			栈(堆栈):
			数据结构中:是一种运算受限制的线性表(一种数据结构,先进后出,后进先出)
			操作系统中:指内存空间,是程序运行时自动拥有的一小块内存,大小在编译期(JVM内存没有任何分配,只会把 java源文件 编译成 .class文件)时由编译器参数决定
			
			堆:
			数据结构中:堆是满足父子结点大小关系的一种完全二叉树
			操作系统中:是指内存空间,为按需申请,动态分配,可以理解为当前可以使用的空闲空间
			
			存储方法域:一个存储方法的区域
			
			GC(垃圾回收):一个机制,让java程序员不再考虑内存管理,且只有对象的引用才有“作用域”,可以有效防止内存泄漏(通常作为一个单独的低级别的线程运行)

二、JVM拿来干什么?

1.进行java代码的执行(3步曲)

编译成.class文件+装载class(用ClassLoader)+执行class(解释执行+编译执行)

ps:
编译成.class文件:Java源文件——编译器(经过)——字节码文件(.class)
装载class过程:加载——链接(验证,准备,解析)——初始化
解释执行:应用解释器把代码一句一句解释成机器能辨认的二进制代码,即解释一句,执行一句
编译执行:源程序——编译器(这里值的是将源程序翻译成指标机器指令)——机器指令(即:将所有源代码一次性转换成二进制指令,生成一个可执行程序)

2.进行内存的管理(3个管理部分)

内存空间+内存分配+内存回收

内存空间

PC寄存器+本地方法栈+方法栈+堆+方法区

内存分配

堆上分配+TLAB(Thread Local Allocation Buffer)分配+栈上分配

内存回收

算法回收+Sun JDK回收

3.进行线程资源的同步和交互机制

线程资源同步机制

Synchronized的实现机制+lock/unlock的实现机制

线程交互机制

正常唤醒:JVM通过wait/notify/notifyAll来支持等待和唤醒的需求
虚假唤醒:在Sun JDK中,object.wait()还有可能被虚假唤醒,即原本只能唤醒一人,现在唤醒了两人,两个人都有锁,但只有一件物品能被拿到(double check)

4.通过JVM可以让java跨平台

Java源文件经历的过程:

Java源文件——编译器(经过)——字节码文件——JVM(经过)——机器码(特定机器上的机器码,一般指机器指令码,也就是计算机能看懂的一组二进制数)

由上述可知:因为当程序开始运行的时候,JVM开始实例化,虽然各个平台解释器不同,但是最终都要经过相同的JVM的才能变成机器码。(同时,多程序启动会存在多个虚拟机实例,但是实例之间数据不互通)

总结

以上就是今天要讲的内容,本文仅仅简单介绍了JVM的简化版内容,后续将会继续对相关模块进行补充

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值