
重拳出击之《JVM》篇
文章平均质量分 93
目的:总结,方便以后复习《深入理解java虚拟机》一书已经看了两遍了,虽然理解越来越深刻,但是慢慢总是会忘,所以有此专栏,因为有了一定基础,会以书为主,以大神博客为辅,去分析去总结,谢谢!
现阶段所掌握的相关JVM知识已经总结完,要继续开启别的模块,加油!
slow is fast.
总结积累
展开
-
重拳出击之《JVM》面试官版 (初哥勿看)
JVM发展史,虚拟机发展史模块java技术体系包括了几个组成部分?javaME、SE、EE分别是什么?都说JDK7版本是第一个里程碑版本,为什么?什么是动态类型语言?什么是动态语言?什么是强类型语言?Java语言是属于哪家公司所有?虚拟机分为几类执行引擎?(2类)==》即时编译器优化的代码放在哪里?“Java语言很慢”的 原因?(由第一款虚拟机引起)HotSpot虚拟机以及ExactVM有什么先进的技术?为什么使用了准确式内容管理,就可以提高性能了?===》不使用句柄方法的原因是什么HotSpot的即时编.原创 2022-04-02 08:59:34 · 1724 阅读 · 0 评论 -
JVM之提前编译器、方法内联、逃逸分析(栈上替换、标量替换、同步消除)(基于《深入理解Java虚拟机》之第11章后端编译与优化)(下)
aas 提前编译在Java技术体系中并不是新事物。但是提前编译很快又在Java世界里沉寂了下来,因为当时Java的一个核心优势是平台中立性,其宣传口号是“一次编译,到处运行”,这与平台相关的提前编译在理念上就是直接冲突的。 aas 直到在Android的世界里,剑走偏锋使用提前编译的ART(Android Runtime)横空出世。ART一诞生马上就把使用即时编译的Dalvik虚拟机按在地上使劲蹂躏,仅经过Android4.4一个版本的短暂交锋之后,ART就迅速终结了Dalvik的性命[2],把它从An.原创 2021-07-28 16:36:10 · 494 阅读 · 0 评论 -
JVM之即时编译器(JIT) 的相关知识点(基于《深入理解Java虚拟机》之第11章后端编译与优化)(上)
aas 如果我们把字节码看作是程序语言的一种中间表示形式的话,那编译器无论在何时、在何种状态下把Class文件转换成与本地基础设施(硬件指令集、操作系统)相关的二进制机器码,它都可以视为整个编译过程的后端。aas无论是提前编译器抑或即时编译器,都不是Java虚拟机必需的组成部分,《Java虚拟机规范》中从来没有规定过虚拟机内部必须要包含这些编译器,更没有限定或指导这些编译器应该如何去实现。 asdsadasdasdasdsadasdasdasdsadassdasdsasdsadsdasdasdsada.原创 2021-07-27 20:51:55 · 539 阅读 · 0 评论 -
JVM之Java语法糖 (泛型)(基于《深入理解Java虚拟机》之第10章前端编译与优化)(下)
aas 几乎所有的编程语言都或多或少提供过一些语法糖来方便程序员的代码开发,这些语法糖虽然不会提供实质性的功能改进,但是它们或能提高效率,或能提升语法的严谨性,或能减少编码出错的机会。现在也有一种观点认为语法糖并不一定都是有益的,大量添加和使用含糖的语法,容易让程序员产生依赖,无法看清语法糖的糖衣背后,程序代码的真实面目。 asdsadasdasdasdsadasdasdasdsadassdasdsasdsadsdasdasdsadasdasdsadasdsadassadasdas————《Java虚拟.原创 2021-07-26 13:43:13 · 943 阅读 · 3 评论 -
JVM之Javac编译器的相关优化(基于《深入理解Java虚拟机》之第10章前端编译与优化)(上)
aas 从计算机程序出现的第一天起,对效率的追逐就是程序员天生的坚定信仰,这个过程犹如一场没有终点、永不停歇的F1方程式竞赛,程序员是车手,技术平台则是在赛道上飞驰的赛车。 asdsadasdasdasdsadasdasdasdsadassdasdsasdsadsdasdasdsadasdasdsadasdsadassadasdas————《Java虚拟机规范》 "编译期"到底指什么? aa aas[注]: aaasdas①、一般我们说的“前端”指的是由前端编译器完成的编译行为。 aa .原创 2021-07-25 22:51:33 · 569 阅读 · 6 评论 -
JVM之锁优化(基于《深入理解Java虚拟机》之第13章线程安全与锁优化)(下)
aas 高效并发是从JDK 5升级到JDK 6后一项重要的改进项,HotSpot虚拟机开发团队在这个版本上花费了大量的资源去实现各种锁优化技术,如适应性自旋、锁消除、锁膨胀、轻量级锁、偏向锁等,这些技术都是为了在线程之间更高效地共享数据及解决竞争问题,从而提高程序的执行效率。 asdsadasdasdasdsadasdasdasdsadassdasdsasdsadsdasdasdsadasdasdsadasdsadassadasdas————《Java虚拟机规范》自旋锁: aa aas前面提到互.原创 2021-07-25 15:31:55 · 374 阅读 · 6 评论 -
JVM之线程的安全分析(基于《深入理解Java虚拟机》之第13章线程安全与锁优化)(上)
aas 当多个线程同时访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那就称这个对象是线程安全的。 asdsadasdasdasdsadasdasdasdsadassdasdsasdsadsdasdasdsadasdasdsadasdsadassadasdas————《Java虚拟机规范》 按照线程安全的“安全程度”由强至弱来排序,我们可以将Java语言中各种操作共享的数据分为以下.原创 2021-07-25 09:22:54 · 389 阅读 · 2 评论 -
JVM之线程实现的不同方式、以及协程、纤程(基于《深入理解Java虚拟机》之第12章Java内存模型与线程)(下)
aas 线程的引入,可以把一个进程的资源分配和执行调度分开,各个线程既可以共享进程资源(内存地址、文件I/O等),又可以独立调度。目前线程是Java里面进行处理器资源调度的最基本单位,不过如果日后Loom项目能成功为Java引入纤程(Fiber)的话,可能就会改变这一点。 asdsadasdasdasdsadasdasdasdsadassdasdsasdsadsdasdasdsadasdasdsadasdsadassadasdas————《Java虚拟机规范》线程的实现方式有几种呢?sadsas.原创 2021-07-24 19:27:49 · 680 阅读 · 2 评论 -
JVM之Java内存模型(基于《深入理解Java虚拟机》之第12章Java内存模型与线程)(上)
多任务处理为什么在OS中几乎是一项必备的功能?sadsasadsa①、计算机的运算能力强大了,但其运算速度与它的存储和通信子系统的速度差距太大了,不匹配,大量的时间都花费在磁盘I/O、网络通信或者数据库访问上。为了避免处理器大部分时间处于"空闲状态",所以我们要让其动起来,避免造成很大的性能浪费。sadsa②、一个 服务器要对多个客户端提供服务,这是Java语言最擅长的领域之一,我们通过参数:TPS(每秒事务处理数)来衡量服务性能的好坏。sadsa为什么内存和处理器之间要加入"高速缓存"?sad原创 2021-07-24 15:23:01 · 575 阅读 · 4 评论 -
JVM之如何实现动态类型语言支持(基于《深入理解Java虚拟机》之第八章虚拟机字节码执行引擎)(下)
aas Java虚拟机的字节码指令集的数量自从Sun公司的第一款Java虚拟机问世至今,二十余年间只新增过一条指令,它就是随着JDK 7的发布的字节码首位新成员——invokedynamic指令。这条新增加的指令是JDK 7的项目目标:实现动态类型语言支持而进行的改进之一,也是为JDK 8里可以顺利实现Lambda表达式而做的技术储备。 asdsadasdasdasdsadasdasdasdsadassdasdsasdsadsdasdasdsadasdasdsadasdsadassadasdas————.原创 2021-07-23 11:02:14 · 758 阅读 · 4 评论 -
JVM之方法调用(重写、重载的本质)(基于《深入理解Java虚拟机》之第八章虚拟机字节码执行引擎)(中)
aas 方法调用并不等同于方法中的代码被执行,方法调用阶段唯一的任务就是确定被调用方法的版本(即调用哪一个方法),暂时还未涉及方法内部的具体运行过程。 asdsadasdasdasdasdasdsadassdasdsadsasadasdsadsdasdasdsadasdasdsadasdsadassadasdas————《Java虚拟机规范》 方法调用到底指什么呢? aa aas 就如文章开头所言,方法调用阶段的唯一任务就是确定被调用哪个方法。并没有涉及到方法内部的具体运行过程。 aa .原创 2021-07-22 13:46:52 · 620 阅读 · 6 评论 -
JVM之运行时栈帧的结构(基于《深入理解Java虚拟机》之第八章虚拟机字节码执行引擎)(上)
asdas 执行引擎是Java虚拟机核心的组成部分之一。 asdsadasdasdasdasdasdsadasdasdsadassadasdas————《Java虚拟机规范》 物理机和虚拟机的执行引擎有什么区别呢? sadsdasd物理机的执行引擎: 直接建立在处理器、缓存、指令集和操作系统层面上的;sdasd虚拟机的执行引擎: 由软件自行实现的,因此可以不受物理条件制约地定制指令集与执行引擎的结构体系,能够执行那些不被硬件直接支持的指令集格式。 sad 执行引擎的概念模型的作用是什么?.原创 2021-07-21 08:59:17 · 775 阅读 · 2 评论 -
JVM之类加载器(ClassLoader)、模块化系统(基于《深入理解Java虚拟机》之第七章类加载机制)(下)
w原创 2021-07-18 19:31:28 · 1011 阅读 · 0 评论 -
JVM之类加载机制(基于《深入理解Java虚拟机》之第七章类加载机制)(上)
asd在前两篇文章中,我们总结了Class文件结构以及相应的字节码指令,它让我们明白了Class文件存储格式的具体细节,接下来我们就要学习JVM如何加载Class文件。dsadClass文件应当是一串二进制字节流,无论其以何种形式存在,包括但不限于磁盘文件、网络、数据库、内存或者动态产生等。dsasadsdasdassadasdsadsdsadadsaddsasdasdaasdasdassadasdasdasdsadasdasdsdadsadsadasdad——《深入理解Java虚拟机》⒈类加载机制原创 2021-07-17 18:37:36 · 842 阅读 · 6 评论 -
JVM之常用的字节码指令(基于《深入理解Java虚拟机》之第六章类文件结构)(下)
dsadJava虚拟机的指令由一个字节长度的、代表着某种特定操作含义的数字(称为操作码,Opcode)以及跟随其后的零至多个代表此操作所需的参数(称为操作数,Operand)构成。dsad由于Java虚拟机采用面向操作数栈而不是面向寄存器的架构,所以大多数指令都不包含操作数,只有一个操作码,指令参数都存放在操作数栈中。dsasadsdasdassadasdsadsdaasdasdassadasdasdasdsadasdasdsdadsadsadasdad——《深入理解Java虚拟机》dsad 因此我们原创 2021-07-16 22:53:12 · 3375 阅读 · 4 评论 -
JVM之类文件结构(基于《深入理解Java虚拟机》之第六章类文件结构)(上)
dsad最近十年内虚拟机以及大量建立在虚拟机之上的程序语言如雨后春笋般出现并蓬勃发展,把我们编写的程序编译成二进制本地机器码(Native Code)已不再是唯一的选择,越来越多的程序语言选择了与操作系统和机器指令集无关的、平台中立的格式作为程序编译后的存储格式。dsasadsdasdassadasdsadsdaasdasdassadasdasdasdsadasdasdsdadsadsadasdad——《深入理解Java虚拟机》dsad在正式了解JAVA的类文件结构之前,我们应该先了解一下JAVA的发原创 2021-07-15 22:13:31 · 1080 阅读 · 0 评论 -
JVM之(Shenandoah、ZGC收集器)(基于《深入理解Java虚拟机》之第三章垃圾收集器与内存分配策略)(下)
上一篇丹丹学妹已经给我讲了七种经典的GC器,那到底怎么样的GC器才能称的上"完美"?asda这就涉及到了衡量GC器性能的三项最重要的指标:①、内存占用②、吞吐量 ③、低时延 ,有人会说那我们做出一个同时满足这三个指标的GC器不就好了嘛,可世间怎么可能事事都十全十美,能满足其中的两项,就算不错的GC器了。asda而随着计算机硬件的发展,其内存大了,性能好了,我们对内存的要求也放宽了限制(可以容忍GC器多占用一点内存),自然吞吐量也上去了(因为性能好了)。可是,内存大了那么时延必定相应增大了。assad原创 2021-07-08 15:02:41 · 907 阅读 · 0 评论 -
JVM之经典的垃圾收集器(基于《深入理解Java虚拟机》之第三章垃圾收集器与内存分配策略)(中)
sad 基于上一篇的GC回收机制分析,丹丹学妹非要给我说一下她所了解的经典GC器,让我们拭目以待吧~sadwqewqeqweqwe若说GC算法是内存回收的方法论,那GC器就是内存回收的实践者 经典垃圾收集器组合Serial收集器ParNew收集器Parallel Scavenge收集器Serial Old收集器Parallel Old收集器经典垃圾收集器组合JDK7~JDK9期间,OracleJDK中的HotSpot虚拟机所包含的全部可用的垃圾收集器之间的关系如图所示:JDK9以后,HotS原创 2021-07-05 23:00:15 · 939 阅读 · 0 评论 -
JVM之垃圾回收机制以及垃圾回收器(基于《深入理解Java虚拟机》之第三章垃圾收集器与内存分配策略?(上)
sad 考试终于落下帷幕,总有人说不出去放松放松嘛,但是我觉得考完就是最大的放松呢,接下来就要准备组会文献的讲解还有更新博客,总结虚拟机的相关内容了呢,而我的丹丹学妹会陪着我的~sad而我们本篇文章主要是给丹丹学妹讲解垃圾回收机制以及垃圾回收器,而垃圾回收机制我们要想一下到底要如何做(就像我们做一件事情,要确定是具体做什么事,哪里做,什么时候做,如何做)?sasadasdsddss①、哪些垃圾(内存)需要回收呢?ssadasdasadss②、什么时候回收呢?saasdasdsadss③、以什么方式回原创 2021-07-04 22:42:48 · 1640 阅读 · 4 评论 -
JVM之Java内存区域到底包括什么?对象怎么创建的?内存溢出怎么判断(基于《深入理解Java虚拟机》之第二章Java内存区域与异常处理)?
sas 考试降至,复习也接近尾声,我轻轻放下手中的笔,看着在旁边等我的丹丹师妹,急躁的心情也慢慢平复下来,她秀美的娥眉淡淡的蹙着,细致的脸蛋上扫出浅浅的忧虑,让她原本美得出奇的容貌更添了一份我见犹怜的心动。她看我忙完手中的事,急忙拉住我的手,问:师兄,Java内存区域到底包括什么呀?对象怎么创建的呀?内存溢出怎么判断呀?看到师妹急切地样子,我喝了口水,心想可真是夺命三连问,不过还是慢慢讲吧~Java与C++之间的内存区域有什么区别呀?(师妹)其实在虚拟机方面,主要不同的就是内存动态分配和垃圾回收技术原创 2021-07-01 22:41:57 · 563 阅读 · 4 评论 -
JVM之Java发展史,虚拟机发展史,java编译方式
【番外】: 学妹和我打赌,我回答出她的一个问题,她就让我问她一个私人问题~,那让我开始!!!!!!学妹:java技术体系包括了几个组成部分呀?我:可以看成5个部分呢,给你一个图自己看吧,太简单了呢~学妹:javaME、SE、EE分别是什么呀?我清了清嗓子,准备给学妹解惑:①、ME是支持Java程序在移动终端上的平台,JDK6之前叫J2ME,注意:Android可不属于JavaME;②、SE是面向桌面级应用的Java平台,提供了完整的Java核心API,JDK6之前被称为J2SE;③、EE支原创 2021-06-29 09:02:46 · 1880 阅读 · 6 评论