Java虚拟机
本分类下所有文章全是本人当前自学周志明老师的《深入理解Java虚拟机》为做个人总结用的一些知识点,若存在错误或者其他需要修改的地方,欢迎指正!
马达加斯家的鹅
java小白
展开
-
线程安全与锁优化、升级
并发处理的广泛应用是使得 Amdahl 定律代替摩尔定律成为计算机性能发展源动力的根本原因,也是人类 “压榨” 计算机运算能力的最有力武器。Amdahl 定律:通过系统中并行化与串行化的比重来描述多处理器系统能获得的运算加速能力摩尔定律:用于描述处理器晶体管数量与运行效率之间的发展关系 这两个定律的更替代表了近年来硬件发展从追求处理器频率到追求多核心并行处理的发展过程。一、概...原创 2020-02-12 17:05:26 · 161 阅读 · 0 评论 -
Java内存模型与线程
一、概述 计算机的运算速度与它的存储和通信子系统速度的差距太大,大量的时间都花费在磁盘I/O、网络通信或者数据库访问上。如果不希望处理器在大部分时间里都处于等待其他资源的状态,就必须使用一些手段去把处理器的运算能力“压榨”出来——多线程,多进程 衡量一个服务性能的高低好坏,每秒事务处理数(Transactions Per Second,TPS)是最重要的指标之一,它代表着一秒内服务端平均能...原创 2020-02-10 23:25:58 · 158 阅读 · 0 评论 -
晚期(运行期)优化
一、概述部分商用虚拟机中,Java程序最初通过解释器进行解释执行,当虚拟机发现 某个方法或代码块的运行特别频繁 时,就会把这些代码认定为"热点代码"。为了提高热点代码的执行效率,在运行时,虚拟机将会 把这些代码编译成与本地平台相关的机器码,并进行各种层次的优化,完成这个任务的编译器称为 即时编译器二、HotSpot虚拟机内的即时编译器2.1 解释器与编译器 事实上,现在许...原创 2020-02-07 15:13:24 · 450 阅读 · 0 评论 -
早期(编译期)优化
一、概述JVM的编译器分类:前端编译器:把.java转变为.class的过程。如Sun的Javac、Eclipse JDT中的增量式编译器(ECJ)。JIT编译器:把字节码转变为机器码的过程,如HotSpot VM的C1、C2编译器。AOT编译器:静态提前编译器,直接将*.java文件编译本地机器代码的过程。 虚拟机设计团队把对性能的优化集中到了后端的即时编译器中,这样...原创 2020-02-04 15:38:10 · 182 阅读 · 0 评论 -
类加载及执行子系统的案例与实战
在 Class 文件格式与执行引擎这部分中,用户的程序能直接影响的内容并不太多,Class 文件以何种格式存储,类型何时加载、如何连接,以及虚拟机如何执行字节码指令等都是由虚拟机直接控制的行为,用户程序无法对其进行改变。能通过程序进行操作的,主要是 字节码生成 与 类加载器 这两部分的功能。对于类加载器的实际改造的两个例子:传统的类加载器:tomcat的类加载器灵活的类加载器:OSGi...原创 2020-02-02 16:47:46 · 154 阅读 · 0 评论 -
虚拟机字节码执行引擎
一、概述 在不同的虚拟机实现里面,执行引擎在执行Java代码的时候可能会有解释执行(通过解释器执行)和编译执行(通过即时编译器产生本地代码执行)两种选择,也可能两者兼备,甚至还可能会包含几个不同级别的编译器执行引擎。但从外观上看起来,所有的Java虚拟机的执行引擎都是一致的:输入的是字节码文件,处理过程是字节码解析的等效过程,输出的是执行结果。二、运行时的栈帧结构 栈帧(Stack F...原创 2020-01-31 17:03:00 · 142 阅读 · 0 评论 -
虚拟机类加载机制
代码编译的结果:本地机器码 转变为 字节码一、概述1.1 虚拟机的类加载机制 虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型。1.2 Java语言的动态加载和动态连接 java语言中类型的加载连接以及初始化过程都是在程序运行期间完成的,这种策略虽然会使类加载时稍微增加一些性能开销,但是会为java应用程...原创 2020-01-27 19:38:33 · 128 阅读 · 0 评论 -
类文件结构
一、无关性的基石 各种不同平台的虚拟机与所有平台都统一使用的程序存储格式——字节码(ByteCode)是构成平台无关性的基石 实现语言无关性的基础仍然是虚拟机和字节码存储格式。java虚拟机不和包括java在内的任何语言绑定,它只和“Class文件”这种特定的二进制文件格式所关联,Class文件中包含了java虚拟机指令集和符号表以及若干其他辅助信息。二、代码清单-1 为了讲解方便...原创 2020-01-24 16:48:10 · 300 阅读 · 0 评论 -
虚拟机性能监控与故障处理工具
一、 概述 给一个系统定位问题的时候,知识、经验是关键基础,数据是依据,工具是运用知识处理数据的手段。二、JDK命令行工具(JDK安装的bin目录下) 这些命令行工具大多数是 jdk/lib/tools.jar 类库的一层薄包装而已,它们主要的功能代码是在tools类库实现的 图1 Sun JDK 中的工具目录1. Sun JDK监控和故障处理...原创 2019-12-06 13:36:06 · 184 阅读 · 0 评论 -
垃圾回收机制与内存分配策略
一、 概述 说起垃圾收集(Garbage Collection,GC),大部分人都把这项技术当做Java语言的伴生产物。事实上,GC的历史比Java久远,早在1960年诞生于MIT的Lisp这门语言中就使用了内存动态分配和垃圾回收技术。当Lisp还在胚胎时期时,人们就在思考GC需要完成的3件事情哪些内存需要回收?什么时候回收?如何回收?二、 对象是否存活? 猿们都...原创 2019-11-26 13:51:17 · 256 阅读 · 0 评论