什么是JVM

JVM是可以运行java代码的一台虚拟的计算机,包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收、堆和存储方法区。JVM运行在操作系统之上,它与硬件设备不直接进行交互。

JVM可分为三部分来说:

一、java代码的执行

a、通过javac命令将java代码编译为class文件

b、通过类加载器classLoader将代码装载class文件

c、执行class文件:包括解释执行与编译执行

1、解释执行:我们编写的代码,经过javac编译器编译为字节码,经过JVM内嵌的解译 器将字节码转换为机器码,这就是解释执行。这种转换过程效率较低。

2、编译执行:某些JVM的实现(比如Hotspot)提供了JIT编译器,即我们常说的动态编 译器,JIT能够在运行时将热点代码编译成机器码,这就是编译执行。这种方式效率更高。

二、内存管理

a、内存空间

1、方法区

2、堆

3、方法栈

4、本地方法栈

5、程序计数器(内存中唯一不会OOM的区域)

b、内存分配

1、堆上分配

2、TLAB分配

3、栈上分配

c、回收回收

1、回收算法

copy、Mark-Sweep、Mark-Compact

2、Sun-JDK

A、 分代回收:

a、 新生代可用的GC:

串行copy

并行回收copy

并行copy

b、 minor GC触发机制与日志格式

虚拟机在进行minorGC之前,首先会判断老年代最大的可用连续空间是否大于新生代所有对象的总空间。如果大于就立即执行minorGC; 如果小于,判断是否开启HandlerPromitionFailure,如果未开启直接FullGC;如果开启了HandlerPromitionFailure,JVM会判断老年代的最大连续空间内存是否大于历次晋升平均值的大小,如果小于直接FullGC,如果大于执行minorGC

c、 旧生代可用的GC:

串行Mark-Sweep-Compact

并行Compact

并发Mark-Sweep

d、fullGC触发机制与日志格式

老年代空间不足:如果创建一个大对象,eden区放不下该对象,会直接保存到老年代,但如果老年代的空间也放不下,就会触发FullGC,因此,我们创建对象时尽量避免创建大对象。

持久代空间不足:如果有持久代空间,系统中需要加载的类,调用的方法很多,同时持久代也没有足够的空间,就触发FullGC

B、GC参数

C、G1

3、内存状态分析工具:

jconsole、jmap、jstack、jstat、visualvm、MAT

三、线程资源同步和交互机制

a、线程资源同步

线程资源执行机制

线程资源同步机制

Synchronized的实现机制

lock/unlock的实现机制

b、线程交互机制:

Object的wait/notify./notifyall

开发包提供的交互机制:countdownlatch、semaphore

c、线程状态及分析方法:jstack、TDA

TDA的下载地址在http://java.net/projects/tda/downloads/directory/webstart

相关推荐
金銀銅鐵6 小时前
[Java] 借助GUI展示class文件的内容(v1.0版本)
jvm·后端·ai编程
kunicoding8 小时前
多线程编程核心概念详解:从线程基础到并发安全
java·jvm·安全
云老大-阿里云国际站代理商14 小时前
华为云国际站渠道代理商:CSS查询很慢但CPU不高?磁盘I/O、JVM与分片问题怎么排查
css·jvm·华为云
呆呆虫1215 小时前
SerpBase 省 credit 实战:缓存 + 去重,把重复请求砍掉一半
jvm·缓存
戴西软件18 小时前
企业如何搭建自己的AI智能体?戴西智能体管理与戴西SKILL管理实战解析
运维·jvm·人工智能·自动化·rpa
小张成长计划..2 天前
【Linux】25:线程概念和控制
java·linux·jvm
用户094248568032 天前
第38章:从零构建JVM稳定性平台最小闭环
java·jvm
Java成神之路-3 天前
深入理解 G1 Mixed GC:触发条件、完整流程与高频误区
jvm·g1垃圾回收算法
认真的小羽❅3 天前
ThreadLocal 在虚拟线程间要小心
java·开发语言·jvm
今天的砖头有点烫手啊3 天前
Java 8 Stream 原理拆解:惰性求值与并行流陷阱
java·jvm