
JVM
鱼腹
这个作者很懒,什么都没留下…
展开
-
HotSpot虚拟机——对象内存创建(文中讨论的限于普通对象,不包括数组和Class对象等)
(1).虚拟机当遇到New 指令时,首先检查指令参数是否能在常量池中定位到一个类的符号引用,并且检查代表引用的类是否已被加载、解析和初始化过。如果没有必须执行相应的加载过程。 (2).在类加载完成后,虚拟机为新生对象分配内存,对象所需的内存大小在类加载完后便完成确定。为对象分配内存的任务等同于把一个固定大小的内存在Java堆中划分出来,在单线程的情况下,一般有两种分配策略: ...转载 2018-04-09 12:00:26 · 177 阅读 · 0 评论 -
了解JVM之JAVA内存区域————运行时数据区域
JVM在执行JAVA程序时,把所管理的内存划分为若干个不同的数据区域,这些区域有着各自的用途,以及创建和销毁时间。有些区域随着虚拟机的启动而存在,有些区域依赖于用户线程的启动和结束而创建销毁。下图为JAVA虚拟机运行时数据区域1.程序计数器 (1)程序计数器是一块较小的内存空间,可以把它看作为当前程序所执行的字节码的行号指令器。在虚拟机的概念模型里,字节码解释器工作时就是通过计数器的值来...转载 2018-04-02 21:33:25 · 187 阅读 · 0 评论 -
JAVA虚拟机——对象的内存布局
在HotSpot虚拟机中,对象在内存中储存的布局中分为三块区域:对象头(Header)、实例数据(Instancs Data)、对齐填充(Padding)。对象头(Header) 运行时数据(如:哈希码(HashCode)、GC分代年龄、锁状态标准、线程持有锁、偏向线程ID、偏向时间戳等)类型指针(指向类元素的指针,如果是数组对象,对象头还必须有一块用于记录数组长度的数据) 2.实例数据(...原创 2018-04-11 11:34:48 · 167 阅读 · 0 评论 -
Java虚拟机——垃圾收集器与内存分配策略
对象死亡识别引用计数算法给对象中添加一个引用计数器,每当一个地方引用它,计数器值加一;当引用失效时计数器值减一,任何时候计数器值为0的对象就不可能再使用。引用计数算法实现简单,效率高,但很难解决对象之间循环引用问题。可达性分析算法这个算法的基本思路是通过一系列的称为“GC Roots”的对象作为起始点,从这些点开始向下搜索,搜索通过的路径叫“引用链”,当一个对象到GC Roots没有任何引用链时相...转载 2018-04-18 11:21:45 · 145 阅读 · 0 评论 -
Java虚拟机——OutOfmmoryError异常
除程序计数器外,虚拟机的其他几个运行时内存区域都有可能发生OutOfmmoryError异常。Java堆溢出解决这区域异常,一般手段是通过内存映像分析工具(如:Eclipse Memory Analyze)对Dump处理的堆转储快照分析。虚拟机栈和本地方法栈溢出如果线程请求深度大于虚拟机所允许的最大深度,将抛出StackOverflowError异常。如果虚拟机在扩展栈是无法申请足够的内存空间,则...原创 2018-04-14 11:46:01 · 187 阅读 · 0 评论 -
Java虚拟机——垃圾收集器与内存分配策略 (二)
我们知道,在分析一个对象是否是存活的时候有两种方法,一个是引用计数法,引用计数法虽然实现简单并且效率较高,但是很难解决循环引用。所以目前主流的虚拟机都是使用的是:可达性分析法。在可达性分析法中对象能被回收的条件是没有引用来引用它,要做到这点就需要得到所有的GC Roots节点,来从GC Root来遍历。可作为GC Root的主要是全局性引用(例如常量和静态变量),与执行上下文(栈帧中的本地变量表)...转载 2018-04-23 09:18:10 · 179 阅读 · 0 评论 -
JAVA虚拟机笔记 ——内存分配与回收策略
对象优先在Eden分配大对象直接进入老年代长期存活的对象进入老年代动态对象年龄判断 1.如果Survivor空间中相同年龄大小的对象内存总和大于Survivor空间的一半,年龄大于或等于年龄的对象就可以直接进入老年代,无须等到MaxTenuringThershold指定的年龄。空间担保 在发生Minor GC之前,会进行如下图操作: 注: 风...原创 2018-05-18 11:44:19 · 134 阅读 · 0 评论