JVM虚拟机基础篇(上)

一.初识JVM

JVM就是加载并运行字节码的一个程序。

1.功能

<1>解释和运行

源代码被javac编译成字节码文件,JVM将字节码文件中的字节码指令实时解释成机器码交给计算机运行。

<2>内存管理

1.会自动的为对象,方法分配内存

2.自动的垃圾回收机制,回收不再使用的对象

<3>即时编译

java之所以能跨平台运行,编译一次,到处运行,是通过java虚拟机实现的。

在不同系统中安装不同的java虚拟机,java虚拟机将字节码转换为机器码交给不同系统的cpu运行。

但是,这种转换牺牲了效率。

c和c++,他们将源代码直接编译成了机器码文件,交给cpu运行,效率大大提高。当然,这也导致了其不具有跨平台的特性。

在java程序中,有的代码反复调用,所以有些字节码指令就会反复的被解释成机器码。所以小笼包较低。

java的即时编译器就优化了这种问题。

如果在运行过程一段代码被虚拟机发现为是热点代码,及时编译器就会将这段代码对应的字节码文件优化并将优化后的机器码存入内存中,当这段代码第二次被调用时直接从内存中取出即可,大大提高了java程序运行的效率。

<4>注意

JVM虚拟机编译的是字节码文件,所以JVM虚拟机不仅仅可以运行JAVA代码

2.JVM虚拟机的组成

JDK=javac编译器+JRE

JRE=java虚拟机+java核心类库

JVM虚拟机有以下组件:类加载器,运行时数据区,执行引擎=解释器+垃圾回收器+即时编译器+本地接口

类加载器负责将字节码文件加载到本地内存中

然后运行时数据区负责管理内存,进行方法和对象的内存分配

然后执行引擎负责通过解释器将字节码指令转换为机器码,通过垃圾回收器负责自动垃圾回收,通过即时编译器进行机器码缓存

最后通过本地接口调用编译好的本地方法。像hotspot等虚拟机都是通过c和c++实现的,而java只能调用JVM暴漏出来的接口,像底层代码没有暴漏出来,并且c和c++是编译性语言,需要编译后才能运行。JVM并不能编译c和c++,所以通过本地接口调用编译好的本地方法

相关推荐
行者-全栈开发16 小时前
美团后端开发面试题全集(2026最新版):HashMap、JVM、MySQL、Redis高频考点深度解析
jvm·hashmap·java面试题·后端开发·redis缓存·mysql索引·面经汇总
豆沙沙包?18 小时前
C++-程序的内存模型(P84-P88)
java·jvm·c++
未秃头的程序猿19 小时前
凌晨3点被叫醒:线上OOM,我用这套流程40分钟定位根因
java·jvm·后端
执笔画流年呀19 小时前
JVM虚拟机
jvm
lisin-lee-cooper20 小时前
JVM知识体系
java·jvm
zzz_23682 天前
TencentDB-Agent-Memory 深度解析:让多个 Agent 共享项目经验的记忆中枢
java·开发语言·jvm·人工智能·agent·memory·tencent db
阿宇的技术日志2 天前
堆溢出解决思路
jvm
番茄炒鸡蛋加糖2 天前
JVM基础1:内存区域、GC垃圾回收算法
大数据·jvm·算法
bbq粉刷匠2 天前
ArrayList 整体认识
java·jvm·数据结构
math_hongfan2 天前
鸿蒙存储碎片高级清理机制:数据库Vacuum/文件碎片整理/缓存过期清理/主动空间回收策略
jvm·数据库·学习·缓存·华为·harmonyos·鸿蒙