![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
jvm
gaording
这个作者很懒,什么都没留下…
展开
-
小目标之读懂JVM—线程安全与锁优化
上一章讲了java的内存模型以及虚拟机如何实现并发的问题。这一章还是对于并发问题的讲解,也是深入理解java虚拟机的最后一节。疫情管控更为严格了,有时候整天呆在家里呆久了感觉浑身不舒适,所以下一本书打算读解硬派健身-一平米健身的书籍。 这一章讲述的是java中的线程安全的问题。线程安全的问题针对的是涉及多个线程的共享变量,Java语言中操作共享的变量按照线程安全的安全程度可以分为5类:不可变、绝...原创 2020-02-06 20:15:54 · 145 阅读 · 0 评论 -
小目标之读懂JVM—java内存模型与线程
这一章已经到了这本书讲解的最后一部分“高效并发”的知识点了,下一章也是关于并发的知识点,讲解的是线程安全和锁优化。计算机的运算性能很强大,而相较于运算性能来说,它的存储和通信子系统速度则过慢,因此为了能最大程度的发挥计算机的运算能力,而不被其它较慢的处理所拖累,多任务处理几乎是一项必备功能了。Java语言和虚拟机提供了很多工具来简化并发开发,但了解并发内幕仍是帮助定位和解决并发问题必不可少的条件。...原创 2020-02-04 15:15:46 · 114 阅读 · 0 评论 -
小目标之读懂JVM—运行期优化
上一章讲了JVM的编译期优化,是指将java源码编译为字节码的过程,这章的运行期优化指的就是将字节码编译成本地机器码的过程。 JVM将字节码编译成本地机器码的过程可以通过解释器和编译器去完成,解释器和编译器不是必须要共存,但是许多主流的商用虚拟机同时包含解释器和编译器。解释器是字节码执行的时候,执行到哪一句,就将对应的字节码解释成本地机器码。而编译器是指现统一将字节码编译成本地机器码,再去执行编...原创 2020-01-30 22:26:21 · 107 阅读 · 0 评论 -
小目标之读懂JVM—编译期优化
Java语言的编译期其实是一段不确定的操作过程,它可能是指编译器的前端把*.java文件转变成*.class文件的过程,也可能是指虚拟机后端运行期编译器(JIT编译器,Just In Time Compiler)把字节码转变成机器码的过程,还可能是指使用静态提前编译器(AOT编译器,Ahead Of Time Compiler)直接把*.java文件编译成本地机器代码的过程。大家一般的Java编译...原创 2020-01-29 23:00:04 · 96 阅读 · 0 评论 -
小目标之读懂JVM—类加载及执行子系统的案例与实战
这章案例比较多,代码方面不做展示,粗略介绍下几个案例的知识。 在Class文件格式和执行引擎这部分中,用户程序能直接影响的主要是字节码生成与类加载器两部分的功能。 案例一:tomcat下正统的类加载结构。web服务器一般有以上几个问题:1.部署在同一服务器下的Java类库需要可以实现相互隔离、独立使用,因为可能两个不同的应用程序会依赖同一个第三方类库的不同版本。2.部署在同一服务器下的Java...原创 2020-01-28 22:21:23 · 123 阅读 · 0 评论 -
小目标之读懂JVM—虚拟机字节码执行引擎方法调用
方法调用不等同于方法执行,方法调用阶段的唯一任务就是确定被调用方法的版本。方法调用是程序运行时最普遍、最频繁的操作。Class文件中存储的都是方法调用的符号引用,只有在类加载期间或者到运行期间才能确定目标方法的直接引用。 Java虚拟机提供了5条方法调用字节码指令。invokestatic:调用静态方法。invokespecial:调用实例构造器<init>方法、私有方法和父类方法。...原创 2020-01-27 21:08:33 · 109 阅读 · 0 评论 -
小目标之读懂JVM—虚拟机字节码执行引擎运行时栈帧结构
物理机的执行引擎是直接建立在处理器、硬件、指令集和操作系统层面上的,而虚拟机的执行引擎是由自己实现的,可以自行指定指令集与执行引擎的结构体系。 虚拟机字节码执行引擎分为运行时的栈帧结构以及方法调用过程,这节先讲述运行时的栈帧结构。 栈帧是虚拟机方法调用和方法执行的数据结构,是虚拟机运行时数据区中的虚拟机栈的栈元素。存储了方法的局部变量表、操作数栈、动态连接和方法返回地址等信息。编译程序代码时,...原创 2020-01-26 22:50:53 · 97 阅读 · 0 评论 -
小目标之读懂JVM—虚拟机类加载机制
上一章讲述了Class文件信息存储格式,这一章讲述虚拟机如何加载Class文件。虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,就是虚拟机的类加载机制。 Java语言中,类型的加载、连接和初始化过程都是在程序运行期间完成的,这点实现了Java中动态扩展的语言特性。 类加载的生命周期包含加载、验证、准备、解析、初始化...原创 2020-01-25 22:00:04 · 75 阅读 · 0 评论 -
小目标之读懂JVM—类文件结构解析
类文件即Class文件是一串全是字节的文件,其中的数据都是以16进制表示的数字。 Class类文件中包含了类文件的标识、对应版本号、常量池、访问标志、类和父类和接口索引集合、字段表集合、方法表集合等数据,其中字段表、方法表都涉及到了属性表的概念。下面按照顺序讲解。 Class文件开头4个字节叫做魔数,值为0xCAFEBABE,即16进制的CAFEBABE,是被用来确认是否是一个符合虚拟机规范的...原创 2020-01-24 23:13:22 · 113 阅读 · 0 评论 -
小目标之读懂JVM—类文件结构定义
计算机只认识0和1,所有程序需编译成二进制本地机器码才可被计算机识别运行,因为操作系统与机器指令的不一致导致编译代码的不一致。各种虚拟机的出现允许大家将程序编译为与操作系统和机器指令集无关的、平台中立的格式。有力地促进了编程语言的发展。 java提出过一个著名的宣传口号:“一次编写,到处运行”,Sun公司及其他虚拟机提供商发布的不同平台上运行的虚拟机都可以载入同一种平台无关的字节码,从而实现程序...原创 2020-01-23 21:39:21 · 132 阅读 · 0 评论 -
小目标之读懂JVM—调优案例分析与实战
这章主要是讲java虚拟机故障处理和调优的经验。按照职责划分的话更偏向于运维岗位。但开发了解下情况总是有必要的,毕竟线上排查bug总少不了开发的参与,能协助快速定位也总是好的。 文中会例举一些案例进行分析。 高性能硬件上的程序部署: 一个15万PV/天左右的在线文档类型网站更换了硬件系统。虚拟机的运行环境由32位系统、1.5G堆内存改为64位系统、12G堆内存。结果网站经常不定期出现长时间失...原创 2020-01-22 11:35:32 · 157 阅读 · 0 评论 -
小目标之读懂jvm—虚拟机性能监控与故障处理工具
之前讲了虚拟机内存分配与回收技术的理论。实际运行中会出现各种各样的状况,堆栈一处、线程死锁、异常日志等问题。 对于具体问题的分析依靠理论知识,再借助合适的监控分析工具就可以帮助我们快速分析数据,定位问题。 jdk(java development kit)的bin目录下有很多可执行的程序,在linux下直接输入命令运行或在windows下执行.exe文件运行。常用的命令行程序包含jps、js...原创 2020-01-21 22:16:34 · 134 阅读 · 0 评论 -
小目标之读懂jvm—垃圾收集算法和垃圾收集器
继续读jvm第三章,之前讲了jvm中对象的死亡判定以及引用的几个分类,接下来读的是对象判定为死亡后的几种垃圾收集算法以及一些垃圾收集器。 收集算法有标记-清除、复制、标记-整理、分代收集算法。 标记-清除是最基础的收集算法。标记-清除会遍历内存区域,标记所有需要回收的对象,标记完之后统一回收所有被标记的对象。它有两个主要不足:1.标记和清除的效率不高2.标记清除之后会产生大量不连续的内存碎片,...原创 2020-01-20 22:58:30 · 110 阅读 · 0 评论