JVM
文章平均质量分 86
JVM、类加载、内存模型、执行器
xiaolyuh123
凡是过去,皆为序幕
展开
-
深入理解JVM - 系统性能优化
系统性能优化并不是一上来就是JVM优化,相反JVM优化几乎是最后的手段了。影响一个系统的性能的因素非常多,如图:从服务本身来看,影响服务性能的主要包扣:我们写代码时所选择的数据结构和算法服务开启的线程时是否合理WEB应用,WEB服务JVM方面的影响最后是操作系统的影响从整个服务架构上来看还有:数据持久化服务间的远程调用消息缓存等中间件的选择常用的性能测试指标响应时...原创 2020-03-04 17:39:06 · 657 阅读 · 0 评论 -
深入理解JVM - JVM编译器
编译器类型编译器最终的目的是将我们写的源代码编译成机器能识别的机器码。 在JVM 中有三个非常重要的编译器,它们分别是:前端编译器、JIT 编译器和AOT编译器。前端编译器将源代码转化成字节码,如javac;我们一般称 javac 编译器为前端编译器,因为其发生在整个编译的前期。javac编译过程大致可以分为1个准备过程和3个处理过程,它们分别如下所示。准备过程:初始化插入式注解处理器,...原创 2020-03-04 14:45:50 · 846 阅读 · 0 评论 -
深入理解JVM - 方法调用
方法调用并不等同于方法中的代码被执行,方法调用阶段唯一的任务就是确定被调用方法的版本(即调用哪一个方法),暂时还未涉及方法内部的具体运行过程。一切方法调用在Class文件里面存储的都只是符号引用,而不是方法在实际运行时内存布局中的入口地址(也就是之前说的直接引用)。解析所有方法调用的目标方法在Class文件里面都是一个常量池中的符号引用,在类加载的解析阶段,会将其中的一部分符号引用转化为直接引...原创 2020-02-19 16:50:48 · 412 阅读 · 0 评论 -
深入理解JVM - 类加载机制
类加载过程一个类型从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期将会经历加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using)和卸载(Unloading)七个阶段,其中验证、准备、解析三个部分统称为连接(Linking),如图:加载、验证、准备、初始化和...原创 2020-01-20 17:25:49 · 769 阅读 · 0 评论 -
深入理解JVM - Class类文件的结构
Class文件是Java虚拟机执行引擎的数据入口,也是Java技术体系的基础支柱之一。Class文件本质Class文件本质上是一组以8个字节为基础单位的二进制流,各个数据项目严格按照顺序紧凑地排列在Class文件之中,中间没有添加任何分隔符,这使得整个Class文件中存储的内容几乎全部是程序运行的必要数据,没有空隙存在。Class文件格式Class文件格式采用一种类似于C语言结构体的伪结构...原创 2020-01-18 17:44:43 · 506 阅读 · 0 评论 -
深入理解JVM - 虚拟机字节码指令集
常量入栈指令指令码操作码(助记符)操作数描述(栈指操作数栈)0x01aconst_null将 null推送至栈顶0x02iconst_m1将 -1(int)推送至栈顶0x03iconst_0将 0(int)推送至栈顶0x04iconst_1将 1(int)推送至栈顶0x05iconst_2将 2(int)推送至栈顶...原创 2020-01-18 14:43:12 · 569 阅读 · 0 评论 -
深入理解JVM - JVM常用命令
jps(JVM Process Status Tool):显示指定系统内所有的HotSpot虚拟机进程jstat(JVM Statistics Monitoring Tool):用户收集HotSpot虚拟机各方面的运行数据jinfo(Configuration Info for Java):实时查看和调整虚拟机各项参数,在JDK9中集成到了jhsdbjmap(Memory Map for ...原创 2020-01-15 10:59:58 · 1183 阅读 · 1 评论 -
深入理解JVM - ZGC垃圾收集器
如果下面的一些概念有些不清楚的可以先看深入理解JVM - 垃圾收集器和深入理解JVM - Shenandoah垃圾收集器。ZGC(Z Garbage Collector)是一款由Oracle公司研发的,以低延迟为首要目标的一款垃圾收集器。它是基于动态Region内存布局,(暂时)不设年龄分代,使用了读屏障、染色指针和内存多重映射等技术来实现可并发的标记-整理算法的收集器。在JDK 11新加入,还...原创 2020-01-13 10:19:35 · 6094 阅读 · 3 评论 -
深入理解JVM - Shenandoah垃圾收集器
如果下面的一些概念有些不清楚的可以先看深入理解JVM - 垃圾收集器。Shenandoah是一款只有OpenJDK才会包含的收集器,最开始由RedHat公司独立发展后来贡献给了OpenJDK,相比G1主要改进点在于:支持并发的整理算法,Shenandoah的回收阶段可以和用户线程并发执行;Shenandoah 目前不使用分代收集,也就是没有年轻代老年代的概念在里面了;Shenandoah...原创 2020-01-11 12:45:09 · 2940 阅读 · 3 评论 -
深入理解JVM - 内存分配策略
对象优先在Eden分配对象优先在Eden分配,如果说Eden内存空间不足,就会发生Minor GC大对象直接进入老年代大对象:需要大量连续内存空间的Java对象,比如:很长的字符串和大型数组。大对象带来的副作用:当没有足够的连续空间来存放大对象的时候,就需要提前出发一次Full GC在内存回收过程中,会进行大量的内存复制-XX:PretenureSizeThreshold参数 ,...原创 2020-01-09 18:21:13 · 309 阅读 · 0 评论 -
深入理解JVM - 垃圾收集器
垃圾回收主要是要解决3件事情:那些内存需要回收?如何回收?什么时候回收?那些内存需要回收在强引用的情况下已经“死”了的对象就需要回收,在非强引用的情况下视情况回收。在java里面,几乎所有的对象实例都是在堆上分配,所以垃圾收集器第一件事情就是要判断堆上的这些实例那些是“死去”的,那些还“活着”。判断对象是否存活主要有两种算法,一种是“引用计数算法”,一种是“可达性分析算法”。“死...原创 2020-01-09 17:04:42 · 1189 阅读 · 0 评论 -
深入理解JVM - 内存溢出实战
Java堆溢出Java堆用于存储对象实例,只要不断地创建对象,当对象数量到达最大堆的容量限制后就会产生内存溢出异常。最常见的内存溢出就是存在大的容器,而没法回收,比如:Map,List等。出现下面信息就可以断定出现了堆内存溢出。java.lang.OutOfMemoryError: Java heap space保证GC Roots到对象之间有可达路径来避免垃圾回收机制清除这些对象...原创 2019-12-31 14:27:39 · 1011 阅读 · 4 评论 -
深入理解JVM - JVM内存模型
各版本的比较程序计数器Java虚拟机栈本地方法栈Java堆方法区运行时常量池直接内存原创 2019-12-25 16:29:40 · 576 阅读 · 0 评论 -
StackOverflowError 栈溢出实战
栈溢出的原因在解决栈溢出问题之前,我们首先需要知道一般引起栈溢出的原因,主要有以下几点:是否有递归调用,循环依赖调用是否有大量循环或死循环全局变量是否过多局部变量过大,如:数组、List、Map数据过大问题现象我们一个很老的接口(近一年没有动过)在线上运行一段时间后报了StackOverflowError栈溢出,其他接口又能正常提供服务,错误日志:java.lang.Stack...原创 2019-11-28 11:37:47 · 2215 阅读 · 1 评论