深入理解java虚拟机-第六章】的更多相关文章

第6章 类文件 6.3 Class类文件的结构 Class文件是一组以8位字节为基础单位的二进制流. Class文件格式采用一种类似C语言结构伪结构存储数据,这种伪结构中只有两种数据类型:无符号数和表 无符号数属于基本的数据类型以u1,u2,u4,u8来分别代表一个字节.2个字节,4个字节.8个字节的无符号数,无符号数可以用来描述数字.索引引用.数量值或者按照UTF-8编码构成字条串值. 表是由多个无符号数或者其他表作为数据项构成的复合数据类型,所有表习惯性地以 _info 结尾. 表 Clas…
第十三章 线程安全与锁优化 线程安全 java语言中的线程安全 1 不可变.Immutable 的对象一定是线程安全的 2 绝对线程安全 一个类要达到不管运行时环境如何,调用者都不需要额外的同步措施,通常需要付出很大甚至是不切实际的代价,在java api中标注自己是线程安全的类,大多数都不是绝对的线程安全 3 相对线程安全 4 线程兼容  对象本身不是线程安全的,但是可以通过在调用端正确地使用同步手段来保证对象在并发环境中可以安全使用 5 线程对立 线程安全的实现方法 1 互斥同步 Murua…
第 1 章 走近 Java 前言 Java 的技术体系主要是由支撑 Java 程序运行的虚拟机.为各开发领域提供接口支持的 Java API.Java 编程语言及许许多多的第三方 Java 框架(如 Spring 和 Struts 等)构成. 关于 Java 虚拟机的资料较少只要是由于 Java 开发技术的一个重要有点导致的:在虚拟机层面隐藏了底层技术的复杂性以及机器与操作系统的差异性.运行程序的物理机器情况千差万别,而 Java 虚拟机则在千差万别的物理机上面建立了统一的运行平台,实现了在任意…
第二章 Java内存区域与内存溢出异常 2.2 运行时数据区域  …
1.本章内容目录: 概述 运行时数据区域 程序计数器 java虚拟机栈 本地方法栈 java堆 方法区 运行时常量池 直接内存 HotSpot虚拟机对象探秘 对象的创建 对象的内存布局 对象的访问定位 实战:OutOfMemoryError异常 java堆溢出 虚拟机栈和本地方法栈溢出 方法区和运行时常量池溢出 本机直接内存溢出 2.本章具体内容: 2.1 概述: 对于C/C++而言,内存管理具有最高的权利,既拥有每一个对象的“所有权”,又担负着每一个对象生命开始到结束的维护责任. 对于java…
Java虚拟机指令是由(占用一个字节长度.代表某种特定操作含义的数字)操作码Opcode,以及跟随在其后的零至多个代表此操作所需参数的称为操作数 Operands 构成的.由于Java虚拟机是面向操作数栈而不是寄存器的架构,所以大多数指令都只有操作码,而没有操作数. 字节码指令集是一种具有鲜明特点.优劣势都很突出的指令集架构: 由于限定了Java虚拟机操作码的长度为1个字节,指令集的操作码不能超过256条.Class文件格式放弃了编译后代码中操作数长度对齐,这就意味者虚拟机处理那些超过一个字节数…
1.1   垃圾收集器 垃圾收集器是内存回收的具体实现.以下讨论的收集器是基于JDK1.7Update14之后的HotSpot虚拟机.这个虚拟机包含的所有收集器有: 上图展示了7种作用于不同分代的收集器,如果两个收集器之间存在连线,就说明它们可以搭配使用.虚拟机所处的区域,则表示它是属于新生代收集器还是老年代收集器.接下来笔者将逐一介绍这些收集器的特性.基本原理和使用场景,并重点分析CMS和G1这两款相对复杂的收集器,了解它们的部分运作细节. 直到现在为止还没有最好的收集器出现,更加没有万能的收…
第7章 虚拟机类加载机制 类的加载的时机 加载 Loading, 连接 Linking(验证 Verfiication, 准备Preparation, 解析 Resolution) 初始化 Initialization, 使用Using和卸载 Unloading 类加载的过程: 1,加载: 加载是“类加载" class loading过程珠一个阶段,在加载阶段,虚拟机需要完成以下3个事情. 1 通过一个类的全限定名来获取定义此类的二进制字节流 2 将这个字节流所代表的静态存储结构转化为方法区的运…
第4章 虚拟机性能监按与故障处理工具 jps 虚拟机进程状况工具 jstat 虚拟机统计信息监视工具 JVM Statistics Monitoring Tool jstat [ option vmid [interval[s|ms] [count]] jstat -gc 2764 250 20 其中option的选项: -class  -gc  -gccapacity -gcutil ...... jinfo java配置信息工具 jmap Java内在映射工具 用于生成堆转储快照 也可配置…
2. HotSpot虚拟机对象探秘 2.1 对象的创建 虚拟机遇到一条New指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载.解析和初始化过. 如果没有,就必须先执行相应的类加载过程,类加载检查过程通过后,接下来为新生对象分配内存. 2.1.1 内存分配方式 假设Java堆中内存是绝对规整的,所有用过的对象都放在一边,空闲的内存放在另一边,中间放着一个指针作为分界点的指示器, 那所分配内存就仅仅把那个指针向空闲空间那边挪动一段与对…