
深入理解java虚拟机
文章平均质量分 87
eeelan
从失败中找经验,厚积薄发;从成功中找方法,步步为营。
展开
-
Java虚拟机运行时内存区域
Java虚拟机运行时内存区域如下图所示。 其中程序计数器、虚拟机栈、本地方法栈是线程私有的;方法区和堆是线程间共享的。程序计数器 当前线程所执行的字节码指示器(每个线程都有一个程序计数器)。字节码解释器工作时就是通过改变程序计数器的值来选取下一条要执行的指令。若线程正在执行的是Java方法,计数器中记录的是正在执行的虚拟机字节码指令的地址;若线程执行的是Native方法,则程计数器为空。程序原创 2017-06-12 15:56:29 · 323 阅读 · 0 评论 -
HotSpot中的对象
Java对象的创建过程语言层面上,创建对象就是new关键字;虚拟机中创建对象(不包括数组和Class对象)的过程:虚拟机遇到一条new指令,首先检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并检查这个符号引用代表的类是否已经被加载、解析、初始化。如果没有则执行相应的类加载过程。在类加载检查通过后,虚拟机将为新生的对象分配内存。对象所需的内存大小在类加载完成后即可确定,为原创 2017-06-12 21:48:31 · 312 阅读 · 0 评论 -
对象存活判断与垃圾收集算法
垃圾收集(GarbageCollection,GC)在考虑GC的时候,首先需要考虑三个问题:哪些内存需要被回收?什么时候回收?如何回收?1.哪些内存需要被回收?(java堆上)内存溢出:内存泄漏:判断对象的存活与死亡a.引用计数法给对象添加一个引用计数器,每当有一个地方引用它时,引用计数器加1,当引用失效时就减1;任何时刻计数器为0的对象就是不可能再被使用的原创 2017-06-12 22:52:56 · 365 阅读 · 0 评论 -
HotSpot的垃圾回收算法实现
枚举根节点可作为GC Roots的节点主要在全局性引用(如常量或者类静态属性)与执行上下文(如栈帧中的本地变量表)中,若直接检查其中的引用,必将耗费很多时间。可达性分析对执行时间的敏感还体现在GC停顿上,因为该项分析必须在一个能确保一致性的快照中进行(一致性指整个分析期间不能出现引用关系还在不断变化的情况,这样才能确保分析结果的准确性)。这点事导致GC进行时必须停顿所有Java执行线程的一原创 2017-07-26 22:25:11 · 555 阅读 · 0 评论 -
虚拟机类加载机制
虚拟机如何加载Class文件?Class文件中的信息加载到虚拟机后会发生什么变化?虚拟机的类加载机制:虚拟机把描述类的数据熊Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型。在Java语言中,类型的加载、连接和初始化过程都是在程序运行期间完成的,这样虽然会令类型加载时稍微增加一些性能开销,但是却会为java应用程序提高高度原创 2017-07-26 22:30:56 · 263 阅读 · 0 评论