
深入理解jvm
文章平均质量分 86
橙序员小站
记录架构、算法与代码的一线实践,最新文章请访问:https://shiker.tech/
展开
-
jvm运行时数据区与内存管理机制
提纲运行时内存区域 1.程序计数器 1. 当前线程所执行的字节码的行号指示器。 2. 如果线程郑在执行的是一个Java方法,这个计数器记录的是正在执行的虚拟机字节码指令的地址;如果正在执行的是native方法,这个计数器的值则为空。 3. 此内存区域是唯一一个在Java虚拟机规范中没有定义任何out of memory情况的区域 2. Java虚拟机栈 1. 每个方法在执行时都会创...原创 2022-01-23 23:50:48 · 240 阅读 · 2 评论 -
jvm垃圾收集器与内存分配策略
提纲判断对象的存活状态垃圾收集主要区域:Java堆和方法区。因为只有在程序运行时才能知道创建哪些对象,所以这部分的内存分配和回收都是动态的。1.引用计数算法:定义:给对象添加一个引用计数器,每当有一个地方引用它时,计数器就加1;当引用失效时,计数器值就减1;任何时候计数器为0的对象是不可能在被使用的。 优点:实现简单,判定效率高。 缺点:很难解决对象之间相互循环引用的问...原创 2022-01-23 23:50:19 · 298 阅读 · 1 评论 -
JVM调优分析与实战
提纲案例分析1. 高性能硬件上的部署策略 在高性能硬件上部署程序,目前主要有两种方式: 通过使用64位JDK来使用大内存 使用若干个32位虚拟机建立逻辑集群来利用硬件资源。使用64位JDK来使用大内存的缺点:1. 内存回收导致的长时间停顿2. 现阶段,64位JDK的性能测试效果普遍低于32位JDK3. 需要保证程序足...原创 2021-12-18 21:28:42 · 260 阅读 · 0 评论 -
虚拟机性能监控与故障处理
提纲JDK的命令行工具1.进程状况查看工具jps -l输出主类的全名 Jps -q省略主类的名称 Jps -m输出进程启动时传递给主类main()函数的参数 Jps -v输出进程启动时jvm的参数2.虚拟机统计信息监视工具jstat [ option vmid [interval(查询间隔)[s|ms] [count(次数)]] ]例:C:\U...原创 2021-12-18 21:29:13 · 458 阅读 · 0 评论 -
jvm类文件结构
提纲无关性的基石字节码构成了平台无关性的基石虚拟机和字节码存储形式是语言无关性的基础Class文件的结构无符号数:属于基本的数据类型,以u1、u2、u4、u8来分别代表一个字节、2个字节、4个字节和8个字节的无符号数,无符号数可以用描述数字、索引应用、数量值或者按照UTF-8编码构成字符串值。表:是由多个无符号数或者其他表作为数据项构成的复合数据类型,所有表都习惯性地以...原创 2021-12-18 21:27:36 · 121 阅读 · 0 评论 -
jvm类加载机制
提纲类加载的时机类的整个生命周期包括:加载、验证、准备、解析、初始化、使用和卸载7个阶段。加载、验证、准备、初始化和卸载顺序确定。虚拟机规范严格规定了有且只有5种情况必须立即对类进行初始化:1. 遇到new、getstatic、putstatic或invokestataic这4条字节码指令时,如果类没有进行过初始化,则需要先触发其初始化。生成这四条指令最常见的代码场景是:使...原创 2021-12-18 21:27:24 · 119 阅读 · 0 评论 -
jvm类加载与执行子系统
提纲案例tomcat:正统的类加载器结构web服务器要解决的问题:部署在同一个服务器上的两个web应用程序所使用的java类库可以实现相互隔离。部署在同一个服务器上的两个web应用程序所使用的java类库可以实现共享。服务器需要尽可能的保证自身的安全不受部署的web应用程序影响。支持jsp应用的web服务器,大多数需要支持hotspot功能。java类库放置在t...原创 2021-12-15 23:09:59 · 199 阅读 · 0 评论 -
jvm类的早期优化
提纲概述java编译器分类:前端编译器:把*.java文件转变成*.class文件的过程后端运行期编译器(JIT编译器):把字节码转变成机器码的过程静态提前编译器(AOT编译器):把*.java文件编译成本地机器码的过程javac编译器编译过程:解析与填充符号表词法分析:将原代码的字符流转变为标记(Token)集合。程序编写的最小元素是单个字符,编译过程的最小元素是标记。关键字、变量名...原创 2021-12-15 23:09:47 · 121 阅读 · 0 评论 -
jvm晚期优化
提纲即时编译器解释器与编译器解释器优点:解释执行节约时间编译器优点:编译执行提高效率即时编译器:将热点(运行频繁的)代码编译成与本地平台相关的机器码,并进行各层次的优化。完成这个任务的编译器成为即时编译器。hotspot虚拟机内置两个即时编译器,client compiler和server compiler,简称为C1编译器和C2编译器。hotspot会根据自身版本与宿主机的性能自行选择运行模式。...原创 2021-12-15 23:09:33 · 144 阅读 · 0 评论 -
java内存模型
提纲Java内存模型设计规则:这个模型必须定义的足够严谨,才能让java 的并发访问操作不会产生歧义,也必须定义的足够宽松,使虚拟机有足够的自由空间去利用硬件的各种特性来获取更好的执行速度。主内存与工作内存Java内存模型的主要目标时定义程序中各个变量的访问规则,即在虚拟机中将变量(不包括局部变量和方法参数)存储到内存和从内存中取出变量这样的底层细节。Java内存模型规定了...原创 2021-12-15 23:09:15 · 142 阅读 · 0 评论 -
jvm字节码执行引擎
提纲运行时栈帧结构栈帧是用于支持虚拟机进行方法调用个方法执行的数据结构,是虚拟机运行时数据区中的虚拟机栈的栈元素。栈帧存储了方法的局部变量表、操作数栈、动态连接和方法返回地址等信息。每一个方法从调用开始到执行完成的过程,都对应着一个栈帧在虚拟机栈里面从入栈到出栈的过程。对于执行引擎来说,在活动线程中,只有位于栈顶的栈帧才是有效的,成为当前栈帧,与这个栈帧相关联的方法称为当前方法。执...原创 2021-12-18 21:26:49 · 335 阅读 · 0 评论 -
线程安全与锁优化
提纲、1. 锁的基本概念和实现线程安全面向过程的编程思想:把数据和过程分别作为独立的部分来考虑,数据代表问题空间中的客体,程序代码则用于处理数据。面向对象的编程思想:站在现实世界的角度去抽象和解决问题,把数据和行为都看做是对象的一部分。当多个线程访问一个对象时,如果不用考虑这些线程在运行环境下的调度和交替运行,也不需要进行额外的同步,或者在调用方进行任何其它的协调操作,调用...原创 2021-12-15 23:09:01 · 276 阅读 · 0 评论