Java虚拟机
文章平均质量分 93
梳理Java虚拟机相关知识
夜雨风云
求实求真
展开
-
JVM调参实践总结
本文重点记录下JVM参数使用的最佳实践,注意,这里重点介绍HotSpot VM的调参,其他JVM的调参可以类比,但不可照搬。原创 2024-05-07 00:52:09 · 1072 阅读 · 1 评论 -
JVM调优--理论篇
在对Java应用进行性能优化时,JVM的调优是一个绕不开的话题。本文重点介绍下如何对JVM进行调优,以期提高Java应用的性能、稳定性、响应时间等性能目标。JVM的调优过程符合Java应用的调优过程,主要分为三步:性能监控、性能分析、性能调优。此外,本文讨论的JVM均是指HotSpot VM,对于其他JVM,可以参考相关原理,并不能拿来就用。原创 2024-05-05 23:16:54 · 937 阅读 · 0 评论 -
HotSpot VM概述
许多技术人员只把JVM当成黑盒,要想改善Java应用的性能和扩展性无疑是一项艰巨的任务。若要提高Java性能调优的能力,就必须对现代JVM有一定的认知。 HotSpot VM是JDK 1.3版本之后默认的虚拟机,目前是使用最广泛的Java虚拟机。本文主要介绍HotSpot VM(即HotSpot Java虚拟机)的架构。HotSpot VM有三个主要组件:VM运行时(Runtime)、JIT编译器(JIT Compiler)以及内存管理器(Memory Manager)。原创 2024-04-30 17:46:38 · 930 阅读 · 0 评论 -
锁优化概述
目录锁优化适应性自旋锁(Adaptive Spinning)锁消除(Lock Elimination)锁粗化(Lock Coarsening)轻量级锁(Lightweight Locking)轻量级锁获取过程轻量级锁释放过程轻量级锁适用场景参考链接偏向锁(Biased Locking)偏向锁获取过程偏向锁释放过程重量级锁、轻量级锁和偏向锁之间转换锁优化高效并发是从JDK 1.5到JDK 1.6的一个重要改进。其中一个特性就是各种锁优化技术。如适应性自旋锁(Adaptive Spinning)、锁消除(L原创 2021-01-27 16:02:20 · 187 阅读 · 0 评论 -
线程安全入门
线程安全的一个比较恰当的定义是:“当多个线程访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那这个对象是线程安全的”。原创 2021-01-27 15:57:55 · 163 阅读 · 0 评论 -
Java线程
目录线程实现使用内核线程的实现使用用户线程的实现使用用户线程 + 轻量级进程混合实现Java使用线程模型线程调度协同式线程调度抢占式线程调度Java的线程调度线程状态转换参考链接线程实现主流操作系统都提供线程实现,Java语言则提供在不同硬件和操作系统平台下对线程操作的统一处理。操作系统实现线程时,主要有三种方式:使用内核线程的实现、使用用户线程的实现和使用用户线程 + 轻量级进程混合实现。使用内核线程的实现内核线程(Kernel-Level Thread, KLT)就是直接由操作系统内核支持的线原创 2021-01-27 15:56:22 · 278 阅读 · 0 评论 -
Java内存模型简介
Java内存模型的目标是屏蔽各种硬件和操作系统的内存访问差异,以实现多平台场景下达到一致的内存访问效果。原创 2021-01-27 15:51:52 · 329 阅读 · 0 评论 -
字节码执行引擎
目录运行时栈帧结构局部变量表(Local Variable Table)操作数栈(Operand Stack)动态连接(Dynamic Linking)方法返回地址附加信息方法调用解析调用(Resolution Invoke)分派调用(Dispatch Invoke)静态分派动态分派单分派和多分派动态分派的实现简介动态类型语言java.lang.invokeinvokedynamic指令方法执行解释执行解释执行实例编译执行JVM实现了可执行代码与操作系统的隔离。开发者在JVM上执行的代码从操作系统的机器码原创 2021-01-27 15:46:41 · 411 阅读 · 0 评论 -
类加载机制
目录类加载时机类和接口在加载阶段的区别类加载过程加载(Loading)验证(Verification)准备(Preparation)解析(Resolution)符号引用和直接引用解析时机解析目标初始化(Initialization)类加载器类和类加载器双亲委派模型(Parents Delegation Model)双亲委派模型简介双亲委派模型优势破坏双亲委派模型向下兼容支持SPI调用支持热部署虚拟机的类加载机制就是将描述类的数据从Class文件加载到内存,并对数据进行校验、解析和初始化,最终形成可直接使用原创 2021-01-27 15:42:56 · 306 阅读 · 0 评论 -
类文件结构和字节码指令
目录为什么引入类文件Class文件结构简介魔数(Magic Number)Class文件版本号常量池类型访问标志类索引(This Class)、父类索引(Super Class)和接口索引集合(Interfaces)字段表集合方法表集合属性表集合字节码指令简介加载和存储指令运算指令类型转换指令对象创建与访问指令操作数栈管理指令控制转移指令方法调用和返回指令异常处理指令同步指令字节码指令表为什么引入类文件Java在诞生之初,就提出过一个宣传口号“ 一次编写,到处运行(Write Once, Run Any原创 2021-01-27 15:40:22 · 186 阅读 · 0 评论 -
Java虚拟机垃圾回收
目录对象存活检测算法引用计数(Reference Counting)算法可达性分析(Reachability Analysis)算法引用级别划分垃圾收集算法标记-清除(Mark-Sweep)算法复制算法Eden 区Survivor 区标记-整理算法分代收集算法HotSpot发起内存回收简介枚举根节点定义安全点(Safepoint)定义安全区域(Safe Region)常用垃圾收集器简介Serial收集器ParNew收集器Parallel Scavenge 收集器Serial Old收集器Parallel O原创 2021-01-27 15:30:34 · 356 阅读 · 2 评论 -
Java虚拟机内存管理
目录一、 概述Java 堆(Java Heap)方法区(Method Area)运行时常量池程序计数器(Pprogram Counter Register)Java 栈(Java Stack)本地方法栈(Native Method Stack)直接内存二、 HotSpot对象内存处理1. 对象创建2. 对象布局对象头实例数据对齐填充3. 对象访问简要介绍JVM中内存管理机制。C、 C++语言依赖开发人员管理内存,提高灵活性,但也带来了内存泄漏(OutOfMemeory,内存泄漏指是指由于疏忽或错误造成程原创 2021-01-27 15:14:53 · 149 阅读 · 0 评论 -
Java 虚拟机简介
JDK(Java Development Kit)是用于支持Java程序开发的最小环境。由Java语言、Java虚拟机、Java API类库三个部分组成。JRE(Java Runtime Environment)是支持Java程序运行的标准环境。由Java SE API和Java虚拟机两部分组成。JDK中包含JRE。Java发展简史1991年4月,Java之父James Gosling领导开发了Oak(橡树)语言(Java语言前身)。1995年5月23日,Oak语言改名Java,并发布Java 1原创 2021-01-27 14:51:49 · 305 阅读 · 0 评论