深入理解Java虚拟机
马冬冬
手艺人
展开
-
第2章 Java内存区域与内存溢出异常
运行时数据区域原创 2015-09-20 21:52:13 · 423 阅读 · 0 评论 -
第3章 垃圾收集器与内存分配策略
对象已死吗在堆里面存放着Java世界中几乎所有的对象实例,垃圾收集器在对堆进行回收前,第一件事情就是要确定这些对象之中哪些还“存活”着,哪些已经“死去”(即不可能再被任何途径使用的对象)。引用计数算法可达性分析算法在主流的商用程序语言的主流实现中,都是称通过可达性分析(Reachable Analysis)来判定对象是否存活的。这个算法的基本思路原创 2015-09-21 21:14:54 · 404 阅读 · 0 评论 -
第6章 类文件结构
Class类文件的结构魔数与Class文件的版本每个Class文件的头4个字节称为魔数(Magic Number),它的唯一作用是确定这个文件是否为一个能被虚拟机接受的Class文件。很多文件存储标准中都使用魔数来进行身份识别,譬如图片格式,如gif或者jpeg等在文件头中都存有魔数。使用魔数而不是扩展名来进行识别主要是基于安全方面的考虑,因为文件扩展名可以随意地改原创 2015-09-23 17:02:24 · 309 阅读 · 0 评论 -
第4章 虚拟机性能监控与故障处理工具
JDK的命令行工具jps:虚拟机进程状况工具JDK的很多小工具的名字都参考了UNIX命令的命名方式。jps(JVM Process Status Tool)是其中的典型。除了名字像UNIX的ps命令之外,它的功能也和ps命令类似:可以列出正在运行的虚拟机进程,并显示虚拟机执行主类(Main Class ,main()函数所在的类)名称以及这些进程的本地虚拟机唯一ID(L原创 2015-09-23 10:16:11 · 499 阅读 · 0 评论 -
第7章 虚拟机类加载机制
类加载的时机类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using)和卸载(Unloading)7个阶段。什么情况下需要开始类加载过程的第一个阶段:加载?Java虚拟机规范中并没有原创 2015-09-23 21:57:37 · 336 阅读 · 0 评论 -
第8章 虚拟机字节码执行引擎
概述执行引擎是Java虚拟机最核心的组成部分之一。“虚拟机”是一个相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、硬件、指令集和操作系统层面上的,而虚拟机的执行引擎则是由自己实现的,因此可以自行制定指令集与执行引擎的结构体系,并且能够执行那些不被硬件直接支持的指令集格式。运行时栈帧结构栈帧(Stack Fr原创 2015-09-24 11:09:14 · 320 阅读 · 0 评论 -
第12章 Java内存模型与线程
Java内存模型主内存与工作内存Java内存模型的主要目标是定义程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存中取出变量这样的底层细节。此处的变量(Variables)与Java编程中所说的变量有所区别,它包括了实例字段、静态字段和构成数组对象的元素,但不包括局部变量与方法参数,因为后者是线程私有的,不会被共享,自然就不会存在竞争问题。为了获得较好的原创 2015-09-24 17:35:24 · 332 阅读 · 0 评论 -
第13章 线程安全与锁优化
线程安全 Java语言中的线程安全1.不可变在Java语言中,不可变(Immutable)的对象一定是线程安全的,无论是对象的方法实现还是方法的调用者,都不需要再采取任何的线程安全保障措施,在第12章我们谈到final关键字带来的可见性时曾经提到过这一点,只要一个不可变的对象被正确地构建出来(没有发生this引用逃逸的情况),那其外部的可见状态永远也不会改变原创 2015-09-24 20:47:06 · 433 阅读 · 0 评论