Java虚拟机 java虚拟机(java virtual machine,JVM),一种能够运行java字节码的虚拟机。作为一种编程语言的虚拟机,实际上不只是专用于Java语言,只要生成的编译文件匹配JVM对加载编译文件格式要求,任何语言都可以由JVM编译运行。 JVM的基本结构 JVM由三个主要的子系统构成类加载子系统 运行时数据区(内存结构 ......
12
0
0
2023-09-29
目录开篇语Synchronized 使用synchronized 实现原理对象头字节序Java 中的字节序如何阅读对象头偏向锁获取偏向锁释放偏向锁偏向撤销批量重偏向批量撤销偏向Hashcode 去哪了Lock Record场景 1场景2轻量级锁获取轻量级锁加锁过程释放轻量级锁重量级锁获取重量级锁膨胀过程竞争锁过程释放重量级锁释放锁过程wait(),notif ......
20
0
0
2023-09-11
JVM中对象的创建流程对象的内存分配当虚拟机遇到一条new指令的时候,首先会检查是否被类加载过了。如果没有先必须执行相应的类加载。类加载就是把class文件加载到JVM运行时数据区的过程。 检查加载 首先检查这指令的参数是否能在常量池中定位到一个类的符号引用(符号引用:符号引用以一组符号来描述所引用的目标),并且检查类是否已经被加载、解析和初始化过。 ......
18
0
0
2023-09-09
作者 | 楚昭来源 | 阿里巴巴中间件(ID:Aliware_2018)在计算机行业有一个定律叫”摩尔定律”,在此定律下,计算机的性能突飞猛进,而且价格也随之越来越便宜, CPU 从单核到了多核,缓存性能也得到了很大提升,尤其是多核 CPU 技术的到来,计算机同一时刻可以处理多个任务。在硬件层面的发展带来的效率极大提升中,软件层面的多 线程 编程已经成为必 ......
21
0
0
2023-08-30
JVM 作为一个通用的 虚拟机 ,我们可以通过启动 java 命令时指定不同的 JVM 参数,让 JVM 调整自己的运行状态和行为,内存管理和垃圾回收的 GC 算法,添加和处理调试和诊断信息等等。本节概括地讲讲 JVM 参数,对于 GC 相关的详细参数将在后续的 GC 章节说明和分析。直接通过命令行启动 Java 程序的格式为: java [option ......
31
0
0
2023-08-28
JVM 基础 程序计数器(Program Counter Register)CPU中的寄存器 作用: 记住下一条JVM指令 特点: 线程 私有唯一一个不会出现内存溢出的区域虚拟机 栈(Java virtual mechine Stack)线程私有 每个线程运行时所需要的内存每个栈由多个栈帧Frame组成,对应着每次方法调用时占的内存每个线程只能有 ......
24
0
0
2023-08-28
目录前言桥接方法什么时候会出现桥接方法?为什么需要桥接方法?总结前言之所以写这么一篇文章是因为在Spring中,经常会出现下面这种代码// 判断是否是桥接方法,如果是的话就返回这个方法 BridgeMethodResolver.findBridgedMethod(specificMethod); 这些代码对我之前也造成了不小疑惑,在彻底弄懂后通过本文分享 ......
64
0
0
2023-07-14
前言 作为 JAVA 的从业者,在找工作的时候,一定会被问及关于 JVM 相关的知识。 JVM 知识的掌握程度,在很多面试官眼里是候选人技术深度的一个重要评判标准。 而大多数人可能没有对 JVM 的实际开发和使用经验, 接下来这一系列文章将带你深入了解 JVM 需要掌握的各个知识点。这也将帮助你完成从初级程序员到高级程序员的转变。目录 线程 (详解) ......
57
0
0
2023-06-23
(文章最后有彩蛋)1. Java 内存区域与内存溢出异常1.1 运行时数据区域 根据《Java 虚拟机规范(Java SE 7 版)》规定,Java 虚拟机所管理的内存如下图所示。 1.1.1 程序计数器 内存空间小,线程私有。字节码解释器工作是就是通过改变这个计数器的值来选取下一条需要执行指令的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能都需 ......
54
0
0
2023-06-22
前言jvm 系列文章如无特殊说明,一些特性均是基于Hot Spot 虚拟机 和JDK1.8版本讲述。下面这张图我想对于每个学习 java 的人来说再熟悉不过了,这就是整个JDK的关系图: 从上图我们可以看到,Java Virtual Machine位于最底层,所有的Java应用都是基于JVM来运行的,所以学习JVM对任何一个想要深入了解Java的人是必不可少 ......
52
0
0
2023-06-17
JVM-内存溢出/泄露及相关工具what什么是内存溢出和 内存泄漏 呢? 内存溢出:内存空间不足导致; 内存泄漏:应该释放的对象没有释放。 拿一个生活中的事情来举例: 张三最近交了一个女朋友小红,女孩是他的初恋。张三全心全意地爱惜这个女孩,此时张三心里装不下其他人,这个有另外一个女孩想进入张三内心进不去,这个时候就是内存溢出(张三的心里装满了小红没有空间装下 ......
65
0
0
2023-06-15
JDK8内存区域Java 虚拟机 在执行 java 程序的过程中会把它管理的内存划分成若干个不同的数据区域。如下图所示: Java 对象分配内存主要与堆有关,所以此处只介绍一下堆内存。堆是 JVM 内存管理的最大的一块区域,此内存区域的唯一目的就是存放对象的实例,所有对象实例与数组都要在堆上分配内存。它也是垃圾收集器的主要管理区域。java 堆可以处于 ......
62
0
0
2023-06-13
方法区(Method Area) 与 Java 堆一样,是各个 线程 共享的内存区域,它用于存储已被虚拟机加载的类型信息、常量、静态变量、即时编译器编译后的代码缓存等数据。虽然《 java 虚拟机规范》中把方法区描述为堆的一个逻辑部分,但是它却有一个别名叫作“非堆”(Non-Heap),目的是与Java堆区分开来。目录栈、堆、方法区的交互关系方法区的理解设置 ......
81
0
0
2023-06-13
nginx nginx.conf:Nginx核心配置文件,linux下默认安装在/etc/nginx/# Nginx所用用户和组,window下不指定 user www-data; # 工作的子进程数量(通常等于CPU数量或者倍于CPU) worker_processes auto; # pid存放文件 pid /run/nginx.pi ......
48
0
0
2023-06-12
目录1.Java 堆溢出1.1 设置JVM参数1.2 测试代码1.3 运行OOM日志2.Java栈、本地方法栈溢出2.1 设置JVM参数2.2 测试代码2.3 运行OOM日志2.4 Java虚拟机OOM异常3.Java 运行常量池溢出3.1 设置JVM参数-注意区分jdk版本3.2 测试代码3.3 运行OOM日志4.Java 方法区溢出-jdk84.1 设置 ......
66
0
0
2023-06-11