jvm
文章平均质量分 86
5ycode
这个作者很懒,什么都没留下…
展开
-
mac big sur openjdk8 源码编译
为了了解下jvm的JIT的热点探测,想了解下到底怎么判定是热点代码的逻辑,想着翻下jdk的代码,于是就有了这篇文章。原创 2022-04-02 18:56:14 · 1083 阅读 · 0 评论 -
深入拆解java虚拟机-笔记
java代码是怎么运行的?jvm具体是怎么运行java字节码的?在HotSpot里,有两种编译形式,一种是解释执行,逐条将字节码翻译成机器码并执行。(无需等待编译)一种是即时编译(Just in Time compilation)JIT ,将一个方法中包含的字节码编译成机器码再执行。(运行速度快)HotSpot 默认采用混合模式,综合了两者的优点。先解释执行字节码,将其中反复执行的热点代码,以方法为单位进行即时编译。即时编译器:C1 又叫Client编译器,面向的是对启动性能有要求的或执行时间较短的,客户端原创 2021-10-25 09:50:44 · 568 阅读 · 0 评论 -
垃圾收集器与内存分配策略
3.2对象已死?3.2.1 引用计数法在对象中加入一个引用计数器;很难解决循环引用;3.2.2 可达性分析算法GC Roots包含以下:虚拟机栈中引用的对象方法区中类的静态属性引用的对象;方法区中常量引用的对象;本地方法栈中JNI引入的对象;虚拟机内部引用,基本数据类型对应的class对象、常驻的异常对象、系统的类加载器;同步锁持有的对象;虚拟机内部的回调、本地代码缓存;3.2.3 再谈引用如果reference 类型的数据中存储的数值代表的是另外一块内存的起始地址;就称改reference数据代表某块内存原创 2021-06-01 16:42:03 · 226 阅读 · 1 评论 -
java内存模型与线程
12.1 概述程序大量的时间花费在磁盘I/O、网络通信或者数据库访问上;衡量一个服务性能的高低好坏,每秒事务处理数(Transactions Per Second TPS)是重要的指标之一。12.2 硬件的效率与一致性由于计算机的存储设备与处理器的运算速度有着几个数量级的差距,所以现代计算机系统都不得不加入一层或多层读写速度尽可能接近处理器运算速度的高速缓存(Cache)来作为内存与处理器之间的缓冲。将运算需要的数据复制到缓存,运算结束后再从缓存同步回内存之中。处理器可能会对输入代码进行乱序执行原创 2021-05-26 21:43:37 · 188 阅读 · 1 评论 -
虚拟机类加载机制
java内存区域与内存溢出垃圾收集器与内存分配策略7.1 概述java虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转化解析和初始化,最终形成可以被虚拟机直接使用的java类型,这个过程被称作虚拟机的类加载机制。java天生可以动态扩展的语言特性依赖于运行期动态加载和动态链接的特点。7.2 类加载的时机一个类从被加载到虚拟机内存中开始,到卸载出内存为止,它的生命周期将会经历:加载(Loading)->验证(Verification)->准备(Preparation)->原创 2021-05-26 21:41:01 · 111 阅读 · 3 评论 -
常用jvm参数查看方式
当我们在生产调优的时候,有时候不确定当前的jvm哪些参数已过期。通过以下两种方式,可以确认当前jdk是否支持,以及对应的参数含义。方法一:通过命令行获取当前jdk的参数 # 打印jvm所有参数的最终值(可能jdk被人调整,有些值变化了) java -XX:+PrintFlagsFinal -version # 注意这个必须加-version # 打印jvm所有的默认参数java -XX:+PrintF原创 2021-05-15 18:20:06 · 1236 阅读 · 1 评论 -
记一次外部agent侵入导致的OOM排查过程
业务系统从公有云在迁移到专有云后,有几台服务器一直有问题,直接导致迁移进度无进展。通过jstat -gcutil pid 5000查看,发现应用程序的老年代已满,fullgc一直在增长,反而ygc很小。猜测:对象生成没有经过年轻代,直接进了老年代,程序里有大对象;年轻代里没有连续的空间,导致无法创建数组直接进入老年代;然后jmap -heap pid 查看到应用的堆有2g,但是新生代只有167MB,新生代太小,不符合1:2的配置Server compiler detected.JVM version原创 2021-04-26 23:22:01 · 1410 阅读 · 4 评论 -
深入理解Instrument
转自:Java高级架构狮 链接:https://www.jianshu.com/p/5c62b71fd882一. 前提很早之前就了解到目前主流的APM开源框架如Pinpoint、SkyWalking等等都是通过java.lang.instrument包提供的字节码增强功能来实现的。趁着对这块的热情还没消退,抽时间分析一下java.lang.instrument包的使用方式,记录下来写成一个系列的文章。本系列博文针对的是JDK11,其他版本的JDK可能不适合。二. instrument简介java.转载 2021-04-22 16:04:35 · 792 阅读 · 0 评论 -
线程池监控-bytebuddy-agent模式
项目地址:https://github.com/yxkong/agent目前已实现对线程池、jvm的监控;主要是在线程池创建时,对线程池进行增强,将线程池强引用到bootstrap-load-client-0.1.jar中的ThreadPoolMonitorData里。 使用此包的前提是线程池是固定资源,启动后不会销毁,如果动态创建线程池并销毁,需要调用shutdown或者shutdowNow,这块已实现对对强引用的解除,否则因为这块强引用导致资源无法释放,没法被gc回收bootstrap-loa原创 2021-04-20 19:32:37 · 2930 阅读 · 0 评论 -
(转)新一代垃圾回收器ZGC的探索与实践
总第405篇2020年 第29篇很多低延迟高可用Java服务的系统可用性经常受GC停顿的困扰,作为新一代的低延迟垃圾回收器,ZGC在大内存低延迟服务的内存管理和回收方面,有着非常不错的表现。本文从GC之痛、ZGC原理、ZGC调优实践、升级ZGC效果等维度展开,详述了ZGC在美团低延时场景中的应用,以及在生产环境中取得的一些成果。希望这些实践对大家有所帮助或者启发。ZGC(The Z Garbage Collector)是JDK 11中推出的一款低延迟垃圾回收器,它的设计目标包括:停顿时间不超过10ms;停顿转载 2021-04-11 16:41:32 · 158 阅读 · 0 评论 -
线程安全与锁优化
13.2 线程安全13.2.1 java语言中的线程安全java语言中各种操作共享的数据分为以下五类:不可变、绝对线程安全、相对线程安全、线程兼容和线程对立。一、不可变不可变的对象一定是线程安全了(废话,线程的不安全主要体现在增删改,只读没有任何不安全的地方)如:java中的字符串实例是一个典型的不可变对象,用户调用内部的substring()、replace()这些方法都是返回一个新构造的字符串对象。二、绝对线程安全一 个类要达到“不管运行时环境如何,调用者都不需要任何额外的同步措施”可能需要付出非常高昂原创 2021-04-08 15:38:37 · 129 阅读 · 0 评论 -
java内存区域与内存溢出
2.2运行时数据区域2.2.1程序计数器(Program Counter Register)定义:是一块较小的内存空间,可以看作是当前线程所执行的字节码的行号指示器。特点:线程私有在虚拟机的概念模型里,字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,它是程序控制流程的指示器,分支、循环、调整、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成。在多核处理器中,为了线程切换后能恢复到正确的执行位置,每条线程都需要有一个独立的程序计数器,各条线程之间计数器互不影响,独立存储原创 2021-04-06 22:34:16 · 112 阅读 · 0 评论 -
深入理解java虚拟机-第二章阅读笔记
目录2.2运行时数据区域2.2.1程序计数器(Program Counter Register)2.2.2 java虚拟机栈(Java Virtual Machine Stack)2.2.3 本地方法栈(Native Method Stacks)2.2.4 java堆2.3对象的创建2.3.1 对象的创建2.3.2 对象的内存布局2.3.3 对象的访问定位2.4 实战:OutOfMemoryError 异常2.4.1 java堆溢出2.4.2 虚拟机栈和本地方原创 2021-03-09 21:39:08 · 217 阅读 · 0 评论 -
jvm第一弹-内存模型
为了给大家培训,整理了下jvm相关的内容原创 2019-07-16 10:14:50 · 141 阅读 · 0 评论