深入理解Java虚拟机
文章平均质量分 91
GeneralAndroid
这个作者很懒,什么都没留下…
展开
-
《深入理解Java虚拟机》——Java内存区域与内存溢出异常学习总结
序言:在Android开发方面,可以说所有的Android开发人员都知道程序计数器,堆,栈,方法区,常量池,GC回收等这些东西,作为一名老菜鸟,有一天我突然问自己,自己真的懂这些吗?真的懂吗?于是就有了《深入理解Java虚拟机》的阅读,这个系列会记录总结这本书的知识。先抛出几个问题,通过该篇文章你可以知道以下问题的答案:java虚拟机执行程序时内存是如何划分的?哪些数据区是线程私有的?原创 2017-09-21 15:47:04 · 605 阅读 · 2 评论 -
《深入理解Java虚拟机》——垃圾收集器与内存分配策略问题
通过这篇文章你能知道的问题:1.如何判断对象是活着还是死去?2.在Java语言中,可作为GCRoots的对象有哪些?3.Java中引用的分类4.对象的自救姿势是什么?5.类在什么情况下是无用的?6.垃圾收集算法有哪些?7.年轻代,老年代,永久代?8HotSpot虚拟机是如何发生内存回收的?9.垃圾收集器有哪些以及组合方式有哪些原创 2017-09-28 16:38:57 · 677 阅读 · 1 评论 -
《深入理解Java虚拟机》——类文件结构之魔数常量池
相对于Java虚拟机的其他部分,这部分的内容我们只需要搞清楚下面两个方面的内容:1.无关性2.Class文件的结构与组成我们都知道Java有个特性是:一次编写,到处运行。这里体现的是平台无关性,但是对于Java虚拟机来说,不仅仅是具有平台无关性的特点,还具有语言无关性的特性。各种不同平台的虚拟机与所有平台都统一使用的程序存储格式——字节码(ByteCode)是构原创 2017-10-11 15:41:43 · 702 阅读 · 0 评论 -
《深入理解Java虚拟机》——类文件结构
上篇文章主要讲述了类文件结构的魔数与常量池的内容,这篇文章继续阐述类文件结构的剩余内容,主要涉及:访问标志、类索引与父类索引以及接口索引集合、字段表集合、方法表集合、属性表集合。访问标志在类文件结构中常量池之后,紧接着的两个字节代表访问标志(access_flags),这个标志用于识别一些类或者接口层次的访问信息,包括:这个Class是类还是接口;是否定义为public类型;是否定原创 2017-10-29 19:57:33 · 395 阅读 · 0 评论 -
《深入理解Java虚拟机》——字节码指令简介
Java虚拟机的指令由一个字节长度的、代表着某种特定操作含义的数字(称为操作码,Opcode)以及跟随其后的零至多个代表此操作所需参数(称为操作数,Operands)而构成。由于Java虚拟机采用面向操作数栈而不是寄存器的架构,所以大多数的指令都不包含操作数,只有一个操作码。字节码指令集是一种具有鲜明特点、优劣势都很突出的指令集架构,由于限制了Java虚拟机操作码的长度为一个字节(即0原创 2017-10-29 20:37:09 · 689 阅读 · 0 评论 -
《深入理解Java虚拟机》——类加载的时机与过程
在介绍完类的文件结构与字节码指令之后,我们就需要思考一下类文件是怎么被虚拟机加载与解析的?本篇文章将围绕这两点来进行总结。虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。在Java语言里面,类型的加载、连接和初始化过程都是在程序运行期间完成的,这种策略虽然会令类加载时稍微增加一些性能开原创 2017-10-29 20:50:24 · 958 阅读 · 2 评论 -
《深入理解Java虚拟机》——栈帧结构
这部分的内容是虚拟机字节码执行引擎方面的,大致分为3块:栈帧结构、方法调用、字节码的执行,而本篇主要是针对栈帧结构的总结。在开始栈帧结构之前我们还是先了解一下执行引擎相关的内容:物理机的执行引擎是直接建立在处理器、硬件、指令集和操作系统层面上的。虚拟机的执行引擎则是由自己实现的,因此可以自行指定指令集与执行引擎的结构体系并且能够执行那些不被硬件直接支持的指令集格式。原创 2017-11-03 16:28:25 · 1161 阅读 · 0 评论 -
《深入理解Java虚拟机》——方法调用与基于栈的字节码解释执行引擎
方法调用:方法调用并不等同于方法执行,方法调用阶段唯一的任务就是确定被调用方法的版本(即调用哪一个方法),暂时还不涉及方法内部的具体运行过程。其实关于方法的执行,接口(父类)与实现类(子类)这些方法如何调用从Java代码层面上大家都是比较清楚的,这里我们探讨一下更深一层的运行原理。Class文件的编译过程中不包含传统编译中的连接步骤,一切方法调用在Class文件里面存储的都只是符号引用原创 2017-11-04 20:48:18 · 551 阅读 · 0 评论