JVM体系结构
正文
JVM体系结构
组成
计算机的组成分为:数据、指令和控制三部分。同样JVM在大致上也可以如此区分为:
数据:方法区、Heap堆
指令:程序计数器、虚拟机栈、本地方法栈。(可以通过javap -c -v xxx.class > yyy.txt查看指令)
-
程序计数器:指向当前线程正在执行的字节码指令的地址(行号)
-
虚拟机栈:每个方法在执行的时候都会创建一个对应的栈帧用于存储局部变量表、操作栈、动态链接、方法出口等信息。方法是由线程执行的,线程只是一个执行体,所以也会存储在虚拟机栈中。 stackoutflowerror
-
本地方法栈:虚拟机使用native方法的服务
-
方法区:用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。(class文件等)
-
堆(heap):java虚拟机中所管理的内存中最大的一块,所有线程共享的一块内存区域,在虚拟机启动时创建。此内存区域的唯一目的是存放对象实例,几乎所有的对象实例都在这里分配内存。outofmemorryerror
概览
java gc 主要回收的是 方法区 和 堆中的内容
类加载器
- 类加载器是什么(1,Custom ClassLoader 2,App ClassLoader 3,Extension ClassLoader 4,Bootstrap ClassLoader)
- 双亲委派机制(1,自底向上检查类是否已经加载;2,自顶向下尝试加载类)
- Java类加载的沙箱安全机制
常见的垃圾回收算法
- 引用计数
在双端循环,互相引用的时候,容易报错,目前很少使用这种方式了
- 复制
复制算法在年轻代的时候,进行使用,复制时候有交换
优点:没有产生内存碎片
- 标记清除
先标记,后清除,缺点是会产生内存碎片,用于老年代多一些
- 标记整理
标记清除整理
但是需要付出代价,因为移动对象需要成本
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话