Java虚拟机
文章平均质量分 86
零下九度
热爱开源,崇尚技术,相信技术能改变世界。
展开
-
《深入理解Java虚拟机》读书笔记4——虚拟机类加载机制
1.类加载过程 虚拟机把描述类的数据从Class类文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。 类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括了:加载、验证、准备、解析、初始化、使用和卸载七个阶段。1.1加载 在加载原创 2014-12-13 14:09:07 · 845 阅读 · 0 评论 -
《深入理解Java虚拟机》读书笔记3——类文件结构
1.Class类文件的结构 根据Java虚拟机规范的规定,Class文件格式采用一种类似于C语言结构体的伪结构来存储,这种伪结构中只有两种数据类型:无符号数和表,后面的解析都要以这两种数据类型为基础。 无符号数属于基本的数据类型,以u1、u2、u4、u8来分别代表1个字节、2个字节、4个字节和8个字节的无符号数,无符号数可以用来描述数字、索引引用、数量值,或者按原创 2014-12-13 14:07:11 · 915 阅读 · 0 评论 -
《深入理解Java虚拟机》读书笔记2——垃圾收集器与内存分配策略
1.对象状态1.1引用技数算法 引用技数算法:给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加1;当引用失效时,计数器值就减1;任何时刻计数器都为0的对象就是不可能再被使用的。此算法有一个缺点就是很难解决对象之间的相互循环引用的问题。1.2根搜索算法 根搜索算法:通过一系列名为“GC Roots”的对象作原创 2014-12-13 14:02:37 · 947 阅读 · 0 评论 -
《深入理解Java虚拟机》读书笔记5——类加载及执行子系统的案例与实战
1.Tomcat:正统的类加载器架构2.OSGi:灵活的类加载器架构 OSGi中的每个模块(成为Bundle)与普通的Java类库区别并不太大,两者一般都以JAR格式进行封装,并且内部存储的都是Java Package和Class。但是一个Bundle可以声明它所依赖的Java Package(通过Import-Package描述),也可以声明它允许导出发布的原创 2014-12-13 14:57:39 · 1408 阅读 · 0 评论 -
《深入理解Java虚拟机》读书笔记7——线程安全与锁优化
Brian Goetz对线程安全的定义:当多个线程访问一个对象时,如果不考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调度方进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那这个对象就是线程安全的。1.Java语言中的线程安全 按照线程安全的“安全程度”由强至弱来排序,java里面各种操作共享的数据分为以下5原创 2014-12-14 20:18:30 · 1444 阅读 · 0 评论 -
《深入理解Java虚拟机》读书笔记6——Java内存模型和线程
1.硬件效率与一致性 由于计算机的存储设备与处理器的运算速度之间有着几个数量级的差距,所以现代计算机系统都不得不加入一层读写速度尽可能接近处理器运算速度的高速缓存来作为内存与处理之间的缓冲:将运算需要使用的数据复制到缓存中,让运算速度快速运行,当运算结束后再从弄个缓存同步回内存之中,这样处理器就无需等待缓慢的内存读写了。 基于高速缓存的存储交互很好地解决原创 2014-12-14 15:17:37 · 1148 阅读 · 0 评论 -
《HotSpot实战》笔记1启动
1.启动1.1.启动器 Launcher(启动器)是用来启动JVM和应用程序的工具。HotSpot中提供了两种Launcher类型,分别是通用启动器和调试版启动器。 通用启动器是指我们非常熟悉的JDK命令程序:java(javaw)。HotSpot提供了一个精简调试Launcher,成为gamma。相对于通用Launcher,gamma就安装在JVM库原创 2014-12-07 18:26:57 · 1594 阅读 · 0 评论 -
《HotSpot实战》笔记2类与对象
1.对象表示机制1.1OOP-Klass二分模型 OOP:ordinary object pointer,或OOPS。即普通对象指针,用来描述对象实例信息。 对于OOPS对象来说,主要职责在于表示对象的实例数据,没有必要持有任何虚函数;而在Java类的Klass对象中含有VTBL,那么,Klass就能够根据Java对象的实际类型进行C++的分发,这样原创 2014-12-07 20:27:44 · 1286 阅读 · 0 评论 -
《HotSpot实战》笔记4垃圾收集
1.堆与GC1.1垃圾收集 负责垃圾收集的程序模块,称为垃圾收集器。实现一款垃圾收集器,首先需要明确他的主要任务:确保仍被引用的对象在内存中保持存在。回收无任何引用的对象所占用的内存空间。 在设计垃圾收集器时,会有一些策略值得商榷:GC工作线程:串行还是并行GC工作线程与应用线程的关系:并发还是暂停应用程序?基本收原创 2014-12-10 22:37:58 · 966 阅读 · 0 评论 -
《HotSpot实战》笔记3运行时数据区
1.堆 在Java中,内存是由虚拟机自动管理的。虚拟机在内存中划出一片区域,作为满足程序的内存分配请求的空间。那些从空间池划出的内存空间,称为堆。堆可分为3部分:新生代、老年代和永久代。其中新生代又被划分为1个Eden区和2个幸存区,其中一个称为from区,另一个则称为to区。2.线程私有区域2.1PC 线程启动时,J原创 2014-12-08 22:05:21 · 809 阅读 · 0 评论 -
《深入理解Java虚拟机》读书笔记1——Java内存区域与内存溢出异常
1.运行时数据区域 Java虚拟机所管理的内存将会包含以下几个运行时数据区域,如下图所示。1.1程序计数器 程序计数器是一块较小的内存空间,它的作用可以看做是当前线程锁执行的字节码的行号指示器。在虚拟机的概念模型里,字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支,循环、跳转、异常处理、线程恢复等基础原创 2014-12-13 14:00:43 · 1099 阅读 · 0 评论