《深入理解 Java 虚拟机》
wiljm
任何改正,都是进步
展开
-
学习笔记一:HotSpot中的一些概念
在 HotSpot 虚拟机中,对象在内存中存储的布局可以分为 3 块区域:对象头(Header)、实例数据(Instance Data)和对齐填充(Padding)。 实例数据部分是对象真正存储的有效信息,也是在程序代码中所定义的各种类型的字段内容。无论是从父类继承下来的,还是在子类中定义的,都需要记录下来。这部分的存储顺序会受到虚拟机分配策略参数(FieldsAllocationStyle)和原创 2016-05-11 15:45:06 · 3251 阅读 · 0 评论 -
早期(编译期)优化
摘自《深入理解 Java 虚拟机:JVM 高级特性与最佳实践》(第二版) 在本文,我们从编译器源码实现的层次上了解了 Java 源代码编译为字节码的过程,分析了 Java 语言中泛型、主动装箱/拆箱、条件编译等多种语法糖的前因后果,并实战练习了如何使用插入式注解处理器来完成一个检查程序命名规范的编译器插件。如本文概述中所说的那样,在前端编译器中,“优化” 手段主要用于提升程序的编码效率,之所以把 Javac 之类将 Java 代码转变为字节码的编译器称为 “前端编译器”,是因为它只完成了从程序到抽转载 2016-07-26 09:44:18 · 1804 阅读 · 0 评论 -
晚期(运行期)优化
摘自《深入理解 Java 虚拟机:JVM 高级特性与最佳实践》(第二版) Javac 字节码编译器与虚拟机内的 JIT 编译器的执行过程合并起来其实就等同于一个传统编译器所执行的编译过程。 本文中,我们着重了解了虚拟机的热点探测方法、HotSpot的即时编译器、编译触发条件,以及如何从虚拟机外部观察和分析 JIT 编译的数据和结果,还选择了几种常见的编译期优化技术进行讲解。对 Java 编译器的深入了解,有助于在工作中分辨哪些代码是编译器可以帮我们处理的,哪些代码需要自己调节以转载 2016-07-27 10:20:05 · 2135 阅读 · 1 评论 -
Java 内存模型与线程
摘自《深入理解 Java 虚拟机:JVM 高级特性与最佳实践》(第二版) 我们首先了解虚拟机 Java 内存模型的结构及操作,然后讲解了原子性、可见性、有序性在 Java 内存模型中的体现,最后介绍了先行发生原则的规则及使用。另外,我们还了解了线程在 Java 语言之中是如何实现的。转载 2016-08-09 12:46:28 · 825 阅读 · 0 评论 -
垃圾收集器与内存分配策略
说起垃圾收集(Garbage Collection,GC),大部分人都把这项技术当做 Java 语言的伴生产物。事实上,GC 的历史比 Java 久远,1960 年诞生于 MIT 的 Lisp 是第一门真正使用内存动态分配和垃圾收集技术的语言。当 Lisp 还在胚胎时期时,人们就在思考 GC 需要完成的 3 件事:哪些内存需要回收?什么时候回收?如何回收? 经过半个多世纪转载 2016-05-13 09:28:47 · 943 阅读 · 0 评论 -
虚拟机类加载机制
摘自《深入理解 Java 虚拟机:JVM 高级特性与最佳实践》(第二版) 虚拟机把描述类的数据从 Class 文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的 Java 类型,这就是虚拟机的类加载机制。 与那些在编译时需要进行连接工作的语言不通,在 Java 语言里面,类型的加载、连接和初始化过程都是在程序运行期间完成的,这种策转载 2016-07-20 11:43:44 · 1735 阅读 · 0 评论 -
字节码指令简介
摘自《深入理解 Java 虚拟机:JVM 高级特性与最佳实践》(第二版) Java 虚拟机的指令由一个字节长度的、代表着某种特定操作含义的数字(称为操作码,Opcode)以及跟随其后的零至多个代表此操作所需参数(称为操作数,Operands)而构成。由于 Java 虚拟机采用面向操作数栈而不是寄存器的架构,所以大多数的指令都不包含操作数,只有一个操作码。 字节码转载 2016-07-18 16:54:27 · 8664 阅读 · 1 评论 -
Class类文件的结构
摘自《深入理解 Java 虚拟机:JVM 高级特性与最佳实践》(第二版) 代码编译的结果从本地机器码转变为字节码,是存储格式发展的一小步,却是编程语言发展的一大步。Class 类文件的结构 Class 文件是一组以 8 位字节为基础单位的二进制流,各个数据项目严格按照顺序紧凑地排列在 Class 文件之中,中间没有添加任何分隔符,这使得整个 Class 文件转载 2016-07-14 17:47:39 · 751 阅读 · 0 评论 -
Java虚拟机字节码指令
原文地址:http://blog.csdn.net/wangxf_8341/article/details/50402525Java字节码指令Java 字节码指令及javap 使用说明### java字节码指令列表 字节码助记符指令含义0x00nop什么都不做0x01aconst_null将null推送至栈顶转载 2016-07-26 17:36:57 · 464 阅读 · 0 评论 -
类加载及执行子系统的案例与实战
摘自《深入理解 Java 虚拟机:JVM 高级特性与最佳实践》(第二版)转载 2016-07-22 15:19:30 · 1479 阅读 · 0 评论 -
虚拟机字节码执行引擎
摘自《深入理解 Java 虚拟机:JVM 高级特性与最佳实践》(第二版) 代码编译的结果是从本地机器码转变为字节码,是存储格式发展的一小步,却是编程语言发展的一大步。概述 执行引擎是 Java 虚拟机最核心的组成部分之一。“虚拟机” 是一个相对于 “物理机” 的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、硬件、指令集和操作系转载 2016-07-21 11:52:01 · 4510 阅读 · 2 评论 -
虚拟机性能监控与故障处理工具
摘自《深入理解 Java 虚拟机:JVM 高级特性与最佳实践》(第二版)概述 经过前面对于虚拟机内存分配与回收技术各方面的介绍,相信读者已经建立了一套比较完整的理论基础。理论总是作为指导实践的工具,能把这些知识应用到实际工作中才是我们的最终目的。 给一个系统定位问题的时候,知识、经验是关键基础,数据是依据,工具是运用知识处理数据的手段。这里说的数据包括:转载 2016-05-17 14:59:40 · 723 阅读 · 0 评论 -
实战:OutOfMemoryError 异常
摘自《深入理解 Java 虚拟机:JVM 高级特性与最佳实践》(第二版)Java 堆溢出 Java 堆用于存储对象实例,只要不断地创建对象,并且保证 GC Roots 到对象之间有可达路径来避免垃圾回收机制清除这些对象,那么在对象数量到达最大堆的容量限制后就会产生内存溢出异常。 代码清单 2-3 中代码限制 Java 堆的大小为 20MB,不可扩展(将堆的最转载 2016-05-12 12:46:57 · 486 阅读 · 0 评论 -
线程安全与锁优化
摘自《深入理解 Java 虚拟机:JVM 高级特性与最佳实践》(第二版) 本章介绍了线程安全所涉及的概念和分类、同步实现的方式及虚拟机的底层运作原理,并且介绍了虚拟机为了实现高效并发所采取的一系列锁优化措施。 许多资深的程序员都说过,能够写出高伸缩性的并发程序是一门艺术,而了解并发在系统底层是如何实现的,则是掌握这门艺术的前提条件,也是成为高级程序员的必备知识之一。转载 2016-08-12 15:14:41 · 2731 阅读 · 0 评论