news 2026/5/4 3:01:28

java初阶——JVM

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
java初阶——JVM

JVM指的是Java虚拟机,虚拟机是指通过软件模拟具有完整硬件功能的,运行在一个完全隔离环境的完整计算机系统。

JVM内存区域划分:

1.程序计数器,记录指令执行到哪个地址

2.元数据区(方法区):存储被虚拟机加载类的信息、常量、静态变量、即时编译器编译后的代码等数据。(java进程共用一份)

3.栈:保存方法调用关系

4.堆(JVM最大空间区域,对象不使用则进行回收):保存new的对象(java进程共用一份)

Test t=new Test();

1.t如果是局部变量,保存到栈上
2.是成员变量,保存到堆上

3.是静态成员变量,保存到元数据区

JVM类加载:

(.class文件->内存中的类对象)

流程

1.加载找到.class文件

2.验证:解析校验class文件是否合法

3.准备:给类变量(static 修饰的变量)申请内存空间,并且设置默认0值

4.解析:针对字符串常量,进行初始化,将常量池的符号引用替换为直接引用的过程。

5.初始化:类变量进行初始化,也会触发父类的类加载(没有static的其他变量,不属于类加载的流程,只会在创建对像(new)的时候,跟着对象一起初始化)。

类加载时机:1.构造示例2.调用静态属性方法3,使用某个类,且它的父类未进行加载,加载他的父类。

双亲委派模型

描述类加载中,根据全限定类名,找到.class文件的流程

类加载器:JVM中专负责类加载的模块

JVM默认提供三种类加载器

1.BootstrapClassLoader->java标准库的目录

2.ExtensionClassLoader->java扩展库的目录

3.ApplicationClassLoader->java的第三方库/当前的项目

双亲委派过程

进行类加载通过全限定类名,找.class的时候,把ApplicationClassLoader作为入口,然后把加载类的任务,委托给其父亲进行

ExtensionClassLoader也不会立即查找而是委托给父亲,

BootrapClassLoader没有父加载器,只能自己进行类加载,根据类名找到标准库,是否存在匹配的.class文件,BootrapClassLoader没有找到,再将任务还给孩子,ExtensionClassLoader根据类名再扩展库进行查找,找到进行类加载,没找到将任务还给孩子,

ApplicationClassLoader根据类名在第三方目录/项目目录中查找找到进行类加载,没找到抛出异常。

JVM的垃圾回收(GC)

GC回收JVM的区域

内存区域内存释放方式是否参与GC
程序计数器线程销毁,自动释放不参与
方法结束,栈帧就结束,随之释放不参与
元数据区类对象一般不会释放不参与
创建新对象,也有旧对象消亡,垃圾回收器主动回收不再被引用的对象参与

GC工作流程

1.找到垃圾(不再被引用的对象)

1)引用计数

每个对象在new的时候都带有一个小的内存空间,保存一个数字,用来记录,有多少个引用指向他,当这个数字为0就成为了垃圾。

问题:

  • 消耗内存可能更加多,尤其是当对象本身较小的情况下,使得引用计数的空间比例更加大
  • 出现"循环引用的问题"

虽然a和b对象赋值为null,但Test类的引用不为0,而且都无法使用

2)可达性分析

1.以代码的某些特定对象,作为遍历的起点。

2.尽可能遍历,判断对象是否能够访问到

3.每次访问一个对象,就把对象标记成为可达,当完成所有遍历后,就知道哪些是可达以及不可达,不可达就是垃圾

1.如何释放垃圾

1)标记清除把垃圾对象直接进行释放

缺点:内存空间直接进行释放后,空闲的空间不会进行连续,会导致即使有足够的空闲空间但是无法使用

2)复制算法

只使用一边空间,把不是垃圾的对象拷贝到另一边,可以确保空闲空间连续

缺点:1.空间利用率低2.一旦不是垃圾的对象多,复制成本高

3)标记整理

优点:解决内存碎片,保证内存利用率

缺点:搬运数据开销仍然大复制成本高

4)分代回收(java使用)

代(对象GC的轮次)

新时代对象易挂->GC的频次要提高

老年代对象可能继续存在->GC的频次降低

第一轮GC过后,幸存的对象移入幸存区,其他进行回收,新一轮的GC再将幸存的对象移入新幸存区,到一定次数就晋升到老年区。

新生代对象大部分会快速消亡,复制开销小,老年代大部分对象生命周期长,整理的开销也小

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/4 2:57:51

计算机网络应用层

之前学习的知识点,都是很零碎的,所以我这里边复习、边整理,会一直持续更新。 计算机网络HTTP是什么常见的状态码有哪些?常见的字段有哪些?HTTP(1.1)的优点有哪些?HTTP(1.1)的缺点有哪些?HTTP/1.…

作者头像 李华
网站建设 2026/5/4 2:49:26

MoBind框架:IMU与视频数据的跨模态精准对齐技术

1. 项目背景与核心价值在动作捕捉与行为分析领域,如何实现惯性测量单元(IMU)数据与视频画面的精准对齐一直是个技术难点。传统方案通常面临两个主要痛点:一是IMU数据与视频帧的时间戳同步存在硬件误差,二是不同传感器数…

作者头像 李华
网站建设 2026/5/4 2:46:27

引力波数据分析中的自动微分与GPU加速技术

1. 引力波数据分析中的计算挑战与解决方案 引力波天文学作为新兴的研究领域,对计算资源提出了前所未有的需求。以LISA、Taiji和Tianqin为代表的空间引力波探测器项目,预计将产生海量的观测数据,这对传统的数据分析方法构成了严峻挑战。 1.1…

作者头像 李华