文章分类 -  JVM

摘要:理解Java内存区域与Java内存模型 Java内存区域 Java虚拟机在运行程序时会把其自动管理的内存划分为以上几个区域,每个区域都有的用途以及创建销毁的时机,其中蓝色部分代表的是所有线程共享的数据区域,而绿色部分代表的是每个线程的私有数据区域。 方法区(Method Area): 方法区属于线程 阅读全文
posted @ 2018-05-23 14:23 Mr.years 阅读(162) 评论(0) 推荐(0)
摘要:JVM字节码执行引擎 虚拟机是相对于“物理机”而言的,这两种机器都有代码执行能力,其区别主要是物理机的执行引擎是直接建立在处理器、硬件、指令集和操作系统层面上的,而虚拟机的执行引擎是自己实现的。因此程序员可以自行制定指令集和执行引擎的结构体系,并且能够执行那些不被硬件直接支持的指令集格式。 在Jav 阅读全文
posted @ 2018-05-10 14:29 Mr.years 阅读(110) 评论(0) 推荐(0)
摘要:类加载器 JVM设计者把类加载阶段中的“通过'类全名'来获取定义此类的二进制字节流”这个动作放到Java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需要的类。实现这个动作的代码模块称为“类加载器”。 类和类加载器 对于任何一个类,都需要由加载它的类加载器和这个类来确立其在JVM中的唯一性,每 阅读全文
posted @ 2018-05-09 18:07 Mr.years 阅读(138) 评论(0) 推荐(0)
摘要:虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是Java虚拟机的类加载机制。 在Java中,类型的加载、连接和初始化过程都在程序运行期间完成的,这种策略虽然会使类加载时增加一些性能开销,但是提供了高度的灵活性,Ja 阅读全文
posted @ 2018-05-09 17:42 Mr.years 阅读(102) 评论(0) 推荐(0)
摘要:字节码指令简介 Java虚拟机的指令由一个字节长度的,代表着某种特定操作含义的数字(操作码)以及跟随其后的零至多个代表此操作所需参数(操作数)而构成。由于Java虚拟机采用面向操作数栈而不是寄存器的架构,所以大多数的指令都不包含操作数,只有一个操作码。 字节码与数据类型 Class文件中对于Java 阅读全文
posted @ 2018-05-08 14:07 Mr.years 阅读(146) 评论(0) 推荐(0)
摘要:类文件结构 字节码的意义 为什么存在字节码? 字节码是构成Java平台无关性的基石。实现语言无关性的基础是虚拟机和字节码存储格式。 Java语言中的各种变量、关键字和运算符的语义最终是由多条字节码命令组成,因此字节码命令所能提供的语义描述能力肯定会比Java语言本身更强大。 Class类文件的结构 阅读全文
posted @ 2018-05-08 10:14 Mr.years 阅读(129) 评论(0) 推荐(0)
摘要:内存分配策略 Java技术体系中所提倡的自动内存管理可以归结于两个部分:给对象分配内存以及回收分配给对象的内存。 我们都知道,Java对象分配,都是在Java堆上进行分配的,虽然存在JIT编译后被拆分为标量类型并间接地在栈上进行分配。如果采用分代算法,那么新生的对象是分配在新生代的Eden区上的。如 阅读全文
posted @ 2018-05-07 10:07 Mr.years 阅读(98) 评论(0) 推荐(0)
摘要:回收器 判断对象引用是否失效 对象生存判断算法 引用计数法 给对象中添加一个引用计数器,每当一个地方引用到这个对象的时候,计数器值就加1,当引用失效时,计数器的值就减1,当计数器值变为0时,便说明该对象不可能再被使用了。 优点:实现简单,判定效率较高。 缺点:当出现对象之间的相互循环引用时,即两个类 阅读全文
posted @ 2018-05-04 11:08 Mr.years 阅读(119) 评论(0) 推荐(0)
摘要:JVM对象探秘 对象的建立 对象的建立过程 图一:对象建立过程 1、类加载检查。 当JVM检测到有一条new指令时,首先先检查该指令的参数是否在常量池中定位到一个类的符号引用,并检查这个符号引用所代表的类是否已被加载、解析和初始化过。如果存在的话,JVM将直接使用已有的信息对该类进行操作。 如果没有 阅读全文
posted @ 2018-05-04 09:39 Mr.years 阅读(100) 评论(0) 推荐(0)
摘要:事实上,JVM在执行Java代码时都会把内存分为几个部分,即数据区来使用,这些区域都拥有自己的用途,并随着JVM进程的启动或者用户线程的启动和结束建立和销毁。接下去,通过下面的这幅图,我们一个一个细数一下JVM运行时的数据区结构。 图一:JVM运行时的数据区结构 JVM运行时数据区 线程私有的数据区 阅读全文
posted @ 2018-05-03 10:34 Mr.years 阅读(116) 评论(0) 推荐(0)