一、基本概念JVM 是可运行 Java 代码的虚拟机 ,包括一套字节码指令集、一组寄存器、一个栈、 一个垃圾回收,堆 和 一个存储方法域。JVM 是运行在操作系统之上的,它与硬件没有直接的交互。二、运行过程我们都知道 Java 源文件,通过编译器,能够生产相应的.Class 文件,也就是字节码文件,而字节码文件又通过 Java 虚拟机中的解释器,编译成特定机器上的机器码 。 也就是如下: Java
转载 2023-09-01 10:37:21
60阅读
目录JVM 垃圾回收通过一. 如何判断对象能够回收1. 引用计数法2. 可达性分析算法3. 四种引用二. 垃圾回收算法1. 标记清除算法2. 标记整理算法3. 复制算法三. 分代回收VM 相关参数四. 垃圾回收器1. 串行垃圾回收器 (Serial GC)(1) 工作原理(2) 优缺点(3) 适用场景2. 并行垃圾回收器 (Parallel GC)(1) 工作原理(2) 优缺点(3) 适用场景3.
<! flowchart 箭头图标 勿删 前言 在遇到实际性能问题时,除了关注系统性能指标。还要结合应用程序的系统的日志、堆栈信息、GClog、threaddump等数据进行问题分析和。关于性能指标分析可以参考前一篇JVM性能调优实践——性能指标分析。 JVM的调优和故障处理可以使用JDK的几个
转载 2018-11-13 14:48:00
259阅读
这里聚集了多个真实的JVM优化案例,每个案例都从背景开始,通过现场故障还原,一步步分析、排查和定位每个问题,包括解决问题的过程中涉及到的底层JVM原理的剖析。同时通过大量真实案例的手动实践和演练,逐步积累起丰富的排查经验。
推荐 原创 2023-02-19 23:07:47
361阅读
3图
前言Java与Docker的结合,虽然更好的解决了application的封装问题。但也存在着不兼容,比如Java并不能自动的发现Docker设置的内存限制,CPU限制。这将导致JVM不能稳定服务业务!容器会杀死你JVM进程,而健康检查又将拉起你的JVM进程,进而导致你监控你的pod一天重启次数甚至能达到几百次。我们希望当Java进程运行在容器中时,java能够自动识别到容器限制,获取到正确的内存
这里实践不是指动手写JVM,而是动手做实验,结合日常工作相关的部分,理论与实践结合从而对这块知识有更深入的认识。 随着Java10的到来,JVM这块也有不少调整改进,网上大部分内容都是过时或大部分开发不需要知道的,因此无论是个人兴趣或是为面试准备都没必要投入大量精力。 由于外面手机打字不便,下面只是
转载 2018-03-22 21:31:00
205阅读
2评论
转载自:https://help.aliyun.com/zh/sae/serverless-app-engine-classic/use-cases/best-practices-for-jvm-heap-size-configuration JVM的堆(Heap)占用内存过大会引发如下问题:如果JVM直接运行在Linux系统,可能会导致Java进程被Linux系统的OOM Killer所终止(K
转载 7月前
372阅读
JVM虚拟机-05、JVM调优详解JVM虚拟机-05、JVM调优详解1 JVM 参数1.1 标准参数-version-help-server-cp1.2 -X参数非标准参数,也就是在JDK各个版本中可能会变动-Xint 解释执行 -Xcomp 第一次使用就编译成本地代码 -Xmixed 混合模式,JVM自己来决定1.3 -XX 参数使用得最多的参数类型非标准化参数,相对不稳定,主要用于JV
程序在上线前的测试或运行中有时会出现一些大大小小的JVM问题
转载 2021-07-08 10:01:41
683阅读
上一次留了个小尾巴:怎么以通过代码模拟对象年龄在15岁之后才进入老年代呢?自己试着实现了一下。然后再结合之前了解的其他GC知识,来模拟更多的触发GC的实例。
原创 精选 2023-04-02 18:31:25
310阅读
3图
上次把JVM的类加载过程粗略地过了一遍,今天再来粗略地看看JVM运行代码时,系统里究竟发生了什么。
原创 精选 2023-02-21 18:43:13
263阅读
3图
JVM 字节码增强技术通常是指在 Java 编译后生成的字节码基础上,对其进行修改或增强的技术。字节码增强可以用于多种用途,如性能优化、代码注入、调试、监控、依赖注入(如 Spring AOP)、动态代理等。实现这些功能的核心技术主要有以下几种:字节码操作库(如 ASM、Javassist、CGLib)Java Agent 和 Instrumentation动态代理(JDK Proxy 和 CGL
原创 精选 6月前
289阅读
JVM 类加载器详解如果要确定两个类是否相同,必须满足以下三点:同路径同名由同一个类加
转载 1月前
354阅读
1、简介通过调用Runtime.getRuntime().addShutdownHook() 可以注册一个虚拟机关闭钩子。虚拟机在两种事件发生ic c.
原创 2022-09-27 12:02:11
127阅读
如果JVM堆空间大小设置过大,可能会导致Linux系统的OOM Killer被激活,进而结束(kill)Java应用进程,在容器环境下可能会表现为频繁异常重启。本文介绍在容器环境下JVM堆参数的配置建议,以及OOM的相关常见问题。通过-XX:MaxRAMPercentage限制堆大小(推荐)在容器环境下,Java只能获取服务器的配置,无法感知容器内存限制。您可以通过设置-Xmx来限制JVM堆大小,
转载 2024-05-27 10:40:32
288阅读
大家好,我是飘渺。本文介绍如何在容器环境下配置JVM堆参数大小。背景信息当您的业务是使用Java开发,且设置的JVM堆空间过小时,程序会出现系统内存不足OOM(Out of Memory)的问题。特别是在容器环境下,不合理的JVM堆参数设置会导致各种异常现象产生,例如应用堆大小还未到达设置阈值或规格限制,就因为OOM导致重启等。通过-XX:MaxRAMPercentage限制堆大小(推荐)在容器环
转载 2023-05-16 22:55:45
336阅读
截止到目前,算上ZGC,Java一共有九种类型的GC,它们分别是……
原创 2023-08-07 20:39:11
161阅读
背景信息当您的业务是使用Java开发,且设置的JVM堆空间过小时,程序会出现系统内存不足OOM(Out of Memory)的问题。特别是在容器环境下以...
转载 2022-09-14 22:07:09
333阅读
文章目录1. 简介1. 调优前的准备2. 优化环境2. 内存溢出 -- OOM1. Java heap space1. 内存泄漏引起堆内存溢出2. 一个 SpringMVC 中的场景3. 解决方案2. GC overhead limit exceeded1. 概述2. 案例3. 解决方案3. Permgen space4. Metaspace1. 概述2. 案例3. 解决方案5. Unable
转载 2023-08-08 17:51:47
575阅读
线上系统的JVM监测要么使用jstat、jmap、jhat等工具查看JVM状态,或者使用监控系统,如Zabbix、Prometheus、Open-FaIcon、Ganglia等。作为一个工具人,怎么能不懂jstat、jmap、jhat呢?
原创 精选 2023-04-09 23:54:27
461阅读
  • 1
  • 2
  • 3
  • 4
  • 5