什么是 JVM ?定义Java Virtual Machine – java 程序的运行环境(java 二进制 字节码的运行环境) 好处一次编写,到处运行 自动内存管理,垃圾回收功能 数组下标越界检查 多态 jvm jre jdk 常见的 JVM 整体结构 内存结构程序计数器 定义Program Counter Register 程序计数器(寄存器 ......
211
0
0
2023-11-19
引言本篇则重点会对于分代收集器的实现进行全面详解,其中会涵盖串行收集器、并行收集器、三色标记、SATB算法、GC执行过程、并发标记、CMS收集器等知识,本篇则偏重于分析GC机制的落地实现,也就是垃圾收集器(Garbage Collector)。一、堆空间回顾与GC收集器概述GC覆盖的范围有堆空间与元空间,而主要的作用范围则是堆空间,所以先简单回顾堆空间后,再 ......
248
0
0
2023-11-07
作者海星 以下文章来源于JavaKeeper 直击面试反正我是带着这些问题往下读的说一下 JVM 运行时数据区吧,都有哪些区?分别是干什么的?Java 8 的内存分代改进举例栈溢出的情况?调整栈大小,就能保存不出现溢出吗?分配的栈内存越大越好吗?垃圾回收是否会涉及到 虚拟机 栈?方法中定义的 局部变量 是否线程安全?运行时数据区内存是非常重要的系统资源,是硬 ......
178
0
0
2023-11-05
Java 的性能优化,JVM GC(垃圾回收机制)在学习Java GC 之前,我们需要记住一个单词:stop-the-world 。它会在任何一种GC算法中发生。stop-the-world 意味着JVM因为需要执行GC而停止了应用程序的执行。当stop-the-world 发生时,除GC所需的 线程 外,所有的线程都进入等待状态,直到GC任务完成。GC优化 ......
214
0
0
2023-11-05
案例介绍本案例主要介绍通过java代码从class文件中解析;class文件、常量池、属性表;环境准备jdk 1.8.0IntelliJ IDEA Community Edition 2018.3.1 x64配置信息调试配置配置位置:Run/Debug Configurations -> program arguments配置内容:-X jre “C ......
226
0
0
2023-11-04
Class类文件结构字节码解析 java 的 Class 文件是以8字节为基础的二进制流存储,数据项之间没有分割符,当遇到超过8字节的数据项时,按高位在前的顺序切分成多个8字节进行存储,每个位置代表的含义都有明确的规定,8字节对齐市为了提高内存寻址效率 从《虚拟机规范》中规定class文件中使用无符号数和表两种数据类型存储数据, jvm 解析字节码都是以 ......
191
0
0
2023-11-04
记录一次线上JVM堆外内存泄漏问题的排查过程与思路,其中夹带一些 「JVM内存分配的原理分析」 以及 「常用的JVM问题排查手段和工具分享」 ,希望对大家有所帮助。在整个排查过程中,我也走了不少弯路,但是在文章中我仍然会把完整的思路和想法写出来,当做一次经验教训,给后人参考,文章最后也总结了下内存泄漏问题快速排查的几个原则。「本文的主要内容:」 故障描述和排 ......
331
0
0
2023-10-25
前言 什么是 CAS Java 中的 CAS JVM 中的 CAS 在上一篇文章中,我们完成了 源码 的编译和调试环境的搭建。 鉴于 CAS 的实现原理比较简单, 然而很多人对它不够了解,所以本篇将从 CAS 入手,首先介绍它的使用,然后分析它在 Hotsport 虚拟机 中的具体实现。 什么是 CAS CAS(Compare And Swap ......
239
0
0
2023-10-20
02 JVM 垃圾回收算法2.1 什么是垃圾回收? 程序的运行必然需要申请内存资源,无效的对象资源如果不及时处理就会一直占有内存资源,最终将导致内存溢出,所以对内存资源的管理是非常重要了。 2.2 什么样的对象需要回收?引用计数法 引用计数是历史最悠久的一种算法,最早George E. Collins在1960的时候首次提出,50年后的今天,该算法依 ......
233
0
0
2023-10-12
java虚拟机 在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域有各自的用途,以及创建和销毁的时间,有的区域随着 虚拟机 进程的启动而一直存在,有些区域则是依赖用户 线程 的启动和结束而建立和销毁。 如下图所示,其中灰色部分为单个线程私有的,红色部分是多个线程所共享的。 每个线程:包括 程序计数器 、栈、本地方法栈 线程间共 ......
259
0
0
2023-10-11
1. java 内存区域与内存溢出异常1.1 运行时数据区域 根据《Java 虚拟机 规范(Java SE 7 版)》规定,Java 虚拟机所管理的内存如下图所示。 1.1.1 程序计数器 内存空间小, 线程 私有。字节码解释器工作是就是通过改变这个计数器的值来选取下一条需要执行指令的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖计数 ......
235
0
0
2023-10-05
Java虚拟机 java虚拟机(java virtual machine,JVM),一种能够运行java字节码的虚拟机。作为一种编程语言的虚拟机,实际上不只是专用于Java语言,只要生成的编译文件匹配JVM对加载编译文件格式要求,任何语言都可以由JVM编译运行。 JVM的基本结构 JVM由三个主要的子系统构成类加载子系统 运行时数据区(内存结构 ......
244
0
0
2023-09-29
目录开篇语Synchronized 使用synchronized 实现原理对象头字节序Java 中的字节序如何阅读对象头偏向锁获取偏向锁释放偏向锁偏向撤销批量重偏向批量撤销偏向Hashcode 去哪了Lock Record场景 1场景2轻量级锁获取轻量级锁加锁过程释放轻量级锁重量级锁获取重量级锁膨胀过程竞争锁过程释放重量级锁释放锁过程wait(),notif ......
253
0
0
2023-09-11
JVM中对象的创建流程对象的内存分配当虚拟机遇到一条new指令的时候,首先会检查是否被类加载过了。如果没有先必须执行相应的类加载。类加载就是把class文件加载到JVM运行时数据区的过程。 检查加载 首先检查这指令的参数是否能在常量池中定位到一个类的符号引用(符号引用:符号引用以一组符号来描述所引用的目标),并且检查类是否已经被加载、解析和初始化过。 ......
225
0
0
2023-09-09
作者 | 楚昭来源 | 阿里巴巴中间件(ID:Aliware_2018)在计算机行业有一个定律叫”摩尔定律”,在此定律下,计算机的性能突飞猛进,而且价格也随之越来越便宜, CPU 从单核到了多核,缓存性能也得到了很大提升,尤其是多核 CPU 技术的到来,计算机同一时刻可以处理多个任务。在硬件层面的发展带来的效率极大提升中,软件层面的多 线程 编程已经成为必 ......
225
0
0
2023-08-30