
JVM
文章平均质量分 88
JVM知识
冲上云霄的Jayden
这个作者很懒,什么都没留下…
展开
-
Ubuntu 22.04同时安装OpenJDK 8和21版本
Ubuntu 22.04上同时安装OpenJDK 8和21版本,切换、设置默认版本原创 2024-08-01 15:04:59 · 897 阅读 · 0 评论 -
Java CPU使用率高排除方法
通过ps指令看到pid=1799程序CPU使用率47.1%,再看看程序的线程使用情况。Options,选项,我们一般使用 -gcutil 查看gc情况。top -p PID:观察该PID对应进程的占用情况。排序列出“29116”cpu使用率高的前10名线程。vmid,VM的进程号,即当前运行的java进程号。” 开启线程显示,观察CPU占用较高的线程。count,打印次数,如果缺省则打印无数次。interval,间隔时间,单位为毫秒。每5秒打印一次GC情况,打印10次。将需要的线程ID转换为16进制格式。原创 2023-12-11 20:02:07 · 234 阅读 · 0 评论 -
JVM-垃圾回收器详解、参数配置
收集器串行、并行或者并发新生代/老年代算法目标适用场景Serial串行新生代复制算法响应速度优先单CPU环境下Client模式Serial Old串行老生代标记-整理响应速度优先单CPU环境下Client模式、CMS的后备预案ParNew并行新生代复制算法响应速度优先多CPU环境时在Server模式与CMS配合并行新生代复制算法吞吐量优先在后台运算而不需要太多交互的任务并行老生代标记-整理吞吐量优先在后台运算而不需要太多交互的任务CMS。原创 2023-09-06 22:33:13 · 1607 阅读 · 0 评论 -
Java 死锁的原理、检测和解决死锁
介绍死锁的原理、死锁产生的条件、死锁的例子和解决死锁原创 2023-04-20 17:40:40 · 1261 阅读 · 0 评论 -
JVM-JMM内存模型(happens-before、volatile)
由于计算机的存储设备与处理器的运算速度有几个数量级的差距所以现代计算机系统都不得不加入一层读写速度尽可能接近处理器运算速度的高速缓存(Cache)来作为内存与处理器之间的缓冲。将运算需要使用到的数据复制到缓存中,让运算能快速进行,当运算结束后再从缓存同步回内存之中,这样处理器就无须等待缓慢的内存读写了。在多处理器系统中,每个处理器都有自己的高速缓存,而它们又共享同一主内存(MainMemory)。原创 2023-02-20 15:38:53 · 570 阅读 · 0 评论 -
JVM-内存区域 堆、方法区,虚拟机栈、程序计数器详解
JVM 把内存分为若干个不同的区域,这些区域有些是线程私有的,有些则是线程共享的,Java 内存区域也叫做运行时数据区,它的具体划分如下:虚拟机栈 Java 虚拟机栈是线程私有的数据区,Java 虚拟机栈的生命周期与线程相同,虚拟机栈也是局部变量的存储位置。方法在执行过程中,会在虚拟机栈中创建一个 栈帧(stack frame)。每个方法执行的过程就对应了一个入栈和出栈的过程。本地方法栈 本地方法栈也是线程私有的数据区,本地方法栈存储的区域主要是 Java 中使用 native 关键字修饰的原创 2023-01-18 16:59:32 · 1244 阅读 · 0 评论 -
Java-性能分析&监控工具
MBean浏览器中查看类属性信息:内存栏目查看GC、各个内存区域使用情况:线程状态、死锁、堆栈信息:可以看到线程列表、线程状态、线程名称、线程堆栈等信息。原创 2023-01-08 21:51:19 · 3870 阅读 · 4 评论 -
JVM-逃逸分析浅析
逃逸分析定义:一种确定指针动态范围的静态分析,它可以分析在程序的哪些地方可以访问到指针。逃逸分析并不是直接的优化手段,而是一个代码分析,通过动态分析对象的作用域,为其它优化手段如栈上分配标量替换和同步消除方法逃逸和线程逃逸。方法逃逸:当一个对象在方法中定义之后,作为参数传递到其它方法中;方法逃逸://User要实现get,set方法,还要实现toString方法 return user . toString();线程逃逸:如类变量或实例变量,可能被其它线程访问到;原创 2023-01-05 21:08:38 · 709 阅读 · 1 评论 -
JVM-JIT
JIT编译,全称 just-in-time compilation,也就是即时编译。通过JIT技术,能够做到Java程序执行速度的加速。那么,是怎么做到的呢?Java是一门解释型语言(或者说是半编译,半解释型语言)。Java通过编译器javac先将源程序编译成与平台无关的Java字节码文件(.class),再由JVM解释执行字节码文件,从而做到平台无关。但是,有利必有弊。对字节码的解释执行过程实质为:JVM先将字节码翻译为对应的机器指令,然后执行机器指令。原创 2023-01-04 20:32:38 · 605 阅读 · 0 评论 -
JVM-类加载过程详解、双亲委派、类加载常见问题
Java 虚拟机负责把描述类的数据从 class 文件加载到系统内存中,并对类的数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的 Java 类型,这个过程被称之为 Java 的类加载机制。类加载过程 类加载机制一共有五个步骤,分别是加载、链接、初始化、使用和卸载阶段,这五个阶段的顺序是确定的。 其中链接阶段会细分成三个阶段,分别是验证、准备、解析阶段,这三个阶段的顺序是不确定的,这三个阶段通常交互进行。解析阶段通常会在初始化之后再开始,这是为了支持 Java 语言的运行时绑定特性原创 2022-02-26 17:43:45 · 469 阅读 · 0 评论 -
JVM-多线程&并发-synchronized底层实现、偏向锁、轻量级锁、重量级锁介绍
介绍synchronized底层实现、锁升级过程,锁的介绍以及相关的问题原创 2022-02-26 17:43:29 · 159 阅读 · 0 评论 -
JVM-对象、对象布局、对象访问定位、对象创建过程、一个Object对象占多少字节?
对象的内存布局 Hotspot 虚拟机中,对象在内存中的布局分为三块区域:对象头(Header)实例数据(Instance Data)对齐填充(Padding)对象头(Header) 对象头 Header 主要包含 MarkWord 和对象指针 Klass Pointer,如果是数组的话,还要包含数组的长度。 在 32 位的虚拟机中 MarkWord ,Klass Pointer 和数组长度分别占用 32 位,也就是 4 字节。 如果是 64 位虚拟机的话,MarkWord ,K原创 2022-02-26 17:42:54 · 623 阅读 · 0 评论 -
JVM-垃圾回收理论、分代算法、垃圾收集器
为了解决跨代引用问题,提出了记忆集这个概念,记忆集是一个在新生代中使用的数据结构,它相当于是记录了一些指针的集合,指向了老年代中哪些对象存在跨代引用。字长精度:每个记录精确到一个字长,机器字长就是处理器的寻址位数,比如常见的 32 位或者 64 位处理器,这个精度决定了机器访问物理内存地址的指针长度,字中包含跨代指针;对象精度:每个记录精确到一个对象,该对象里含有跨代指针;卡精度:每个记录精确到一块内存区域,区域内含有跨代指针。原创 2022-02-26 17:41:59 · 779 阅读 · 1 评论