
JVM虚拟机
文章平均质量分 88
本栏内容记录JVM虚拟机学习笔记,参考资料来源:深入理解Java虚拟机第三版—周志明著。
摸鱼小小虫
3GAndroid外卖员
展开
-
JVM—虚拟机类加载器
是一种软件设计模式,它通过将系统中的相关组件(类、函数、变量等)封装到一个独立的容器中,实现组件之间的逻辑隔离。这个容器可以被动态地配置和修改,实现不同的功能需求。原创 2024-08-03 23:43:37 · 1254 阅读 · 0 评论 -
JVM—虚拟机类加载时机与过程
一个类型从被加载到虚拟机内存开始,到卸载出内存为止,它的生命周期会经历加载、验证、准备、解析、初始化、使用、卸载七个阶段,其中验证、准备、解析统称为链接。除了初始化外,其他阶段的顺序是,注意是开始而不是执行,因为这些阶段都是混合交叉的进行。关于什么阶段加载、JVM规范没有强制约束,而是交给虚拟机自由把握,但是JVM规范严格规定了六种情况必须立即对类进行初始化(加载、验证、准备、解析自然在此之前)接口中定义JDK8加入的默认方法(被Default方法修饰的接口方法),这个接口类必须在实现类之前初始化。原创 2024-08-03 23:31:23 · 1066 阅读 · 0 评论 -
JVM—类文件结构
Class文件是一组以字节为基础单位的二进制流,各个数据项目严格按照顺序排列紧凑的在文件中,中间没有任何分隔符。Class文件采用一种类似于C语言结构体的伪结构来存储数据,这种伪结构只有“无符号数”和“表”两种数据类型无符号数:属于基本数据类型,以u1、u2、u4、u8分别表示1个字节,2个字节...这样。可以用来描述索引引用、数字、数量值等。表:是由多个无符号数或者其他表作为数据项构成的有层次关系的复合数据类型,一般以_info结尾,整个Class本质上也可以视作一张表。原创 2024-08-02 17:53:44 · 1005 阅读 · 0 评论 -
JVM—CMS收集器
CMS基于标记-清除算法,会产生大量的内存碎片,内存碎片过多会导致大对象的分配出现问题,严重的话会出现OOM。(Floating Garbage):由于GC线程和用户线程并发,在GC线程运行过程中产生的垃圾就叫浮动垃圾。CMS收集器(Concurrent Mark Sweep)是一种以获取最短回收停顿时间为目标的收集器。重新标记则是为了修正并发标记期间,用户程序继续运作,导致标记变动的那一部分对象的标记记录。清理标记阶段判断已经死亡的对象,由于不需要移动存活对象,所以该过程也是与用户线程并发的。原创 2024-08-02 17:43:22 · 372 阅读 · 0 评论 -
JVM—垃圾收集算法和HotSpot算法实现细节
分代的垃圾回收策略,是基于这样一个事实:不同的对象的生命周期是不一样的。因此,不同生命周期的对象可以采取不同的收集方式,以便提高回收效率。分代垃圾回收采用分治的思想,进行代的划分,把不同生命周期放在不同代上,不同代采用最适合它的垃圾回收方法进行回收。原创 2024-08-01 19:26:15 · 1835 阅读 · 0 评论 -
JVM—对象已死?
在堆里面存放着 Java 世界中几乎所有的对象实例,垃圾收集器在对堆进行回收前,第一件事情就是要确定这些对象之中哪些还“存活”着,哪些已经“死去”。原创 2024-08-01 19:17:49 · 983 阅读 · 0 评论 -
JVM—HotSpot虚拟机对象探秘
对象只是普通对象,不包括数组和Class对象:当虚拟机遇到字节码New指令时,先检查这个指令的参数是否可以在常量池定位到一个类的符号引用,并且加载这个符号引用代表的类是否被加载、解析、验证、初始化过。对象所需内存在类加载完成后就可以完全确定下来,实际上是在Java堆中划分一块定量大小的内存。:假设Java堆中使用过的内存在一边,未使用过的内存在一边,中间有一个指针作为分界点指示器,。Serial、ParNew带压缩整理的的收集器就是采用这种算法。原创 2024-07-29 17:18:18 · 1060 阅读 · 0 评论 -
JVM—运行时数据区域
主要介绍了运行时数据区的几个关键部分。首先,程序计数器、虚拟机栈、本地方法栈均为线程私有区域。其次,Java堆是线程共享的,用于存储对象和数组;常量池也是堆的一部分。方法区同样是线程共享的,包含运行时常量池和类信息。此外,还介绍了直接内存的使用。最后,列举了常见的内存溢出问题,包括Java堆内存溢出、Java方法区内存溢出以及虚拟机栈溢出等问题。这些概念是理解Java内存管理的重要基础。原创 2024-07-29 17:11:57 · 869 阅读 · 0 评论