深入理解Java虚拟机阅读笔记
残念怪蜀黍
跨界码农
展开
-
第2章 Java内存区域与内存溢出异常
2.2 运行时数据区 方法区、堆、执行引擎、本地库接口 虚拟机栈、本地方法栈、程序计数器 加粗是所有线程共享的数据区,其他是线程隔离的数据区 2.2.1 程序计数器 是较小的内存空间,是当前线程执行的字节码的行号指示器。字节码指示器就是通过改变这个计数器的值来选下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等都需要这个计算器来完成。 多个线程来回切换于处理器上,为...原创 2018-03-16 14:02:10 · 249 阅读 · 2 评论 -
第3章 垃圾收集器和内存分配策略
3.2 对象是否死亡 堆里存放几乎所有的对象实例,垃圾收集器对堆回收前,要判断对象中哪些是活着的,哪些不可能再被任何途径使用的对象。 3.2.1 引用计数算法 给对象添加一个引用计数器,每当有一个地方引用它,计数器值就加1;当引用失效时,计数器值就减1;任何时刻计数器为0的对象就是不能再被使用的。 但如果对象A和对象B都有instance,让A.instance=B和B.ins...原创 2018-03-16 14:06:21 · 173 阅读 · 0 评论 -
第4章 虚拟机性能监控和故障处理工具
4.2 JDK命令行工具 用工具进行处理数据,数据包括:运行日志、异常堆栈、GC日志、线程快照、堆转储快照等。 工具位置一般在bin目录下 JDK监控和故障处理工具 名称 主要作用 jps 显示指定系统内所有Hotspot进程 jstat 收集Hotspot虚拟机各方面运行数据 jinfo 显示虚拟机配置信息 jmap 生成...原创 2018-03-16 14:12:43 · 249 阅读 · 0 评论 -
第6章 类文件结构
6.3 Class类文件的结构 Class文件是一组8位字节为基础单位的二进制流,各个数据项目严格按顺序紧凑排列在Class文件中,中间没有任何分隔符。当遇到8位字节以上空间的,就按高位在前的方式分割成若干个8位字节进行存储。 Class中只有两种数据类型:无符号数和表 无符号数属于基本数据类型,u1、u2、u4、u8代表1个字节、2个字节、4个字节和8个字节的无符号数,它可以用来描述数...原创 2018-03-19 10:02:00 · 123 阅读 · 0 评论 -
第7章 虚拟机类加载机制
7.2 类加载时机 类生命周期 类从加载到虚拟机内存开始,卸载出内存为止,整个生命周期包括:加载、验证、准备、解析、初始化、使用和卸载。 加载、验证、准备、初始化和卸载这5个阶段顺序是确定的,但解析不一定,某些情况可在初始化阶段之后开始,这是为了支持Java的运行时绑定。 什么时候开始类的加载? 虚拟机没有强制约束,但是对于初始化阶段有严格规定,有五种情况必须立即初始化,因此...原创 2018-03-20 09:31:04 · 132 阅读 · 0 评论 -
第8章 虚拟机字节码执行引擎
8.1 概述 执行引擎是Java虚拟机核心组成部分之一。 在不同虚拟机实现里,执行引擎在执行Java代码的时候可能会有解释执行(通过解释器执行)和编译执行(通过即时编译器产生本地代码执行)两种选择,也可能兼备,可能还会包含几个不同级别的编译器执行引擎。 8.2 运行时栈帧结构 栈帧: 用于支持虚拟机进行方法调用和方法执行的数据结构。是虚拟机运行时数据区中的虚拟机栈的栈元素。 ...原创 2018-03-20 09:36:32 · 177 阅读 · 0 评论