摘要: 在Java虚拟机规范描述中,除程序计数器外,其他几个运行时区域都有可能发生OutOfMemoryError异常。接下来将对各区域分别进行分析介绍,内容包括触发各区域OutOfMemoryError异常的代码,以及对其进行排查判定的过程。还会初步涉及几个与内存相关的最基本虚拟机参数。 阅读全文
posted @ 2016-03-11 21:36 木易·月 阅读(606) 评论(0) 推荐(0) 编辑
摘要: 从锁的特性开始讲起,叙述了 Java 保证数据一致性的方式,详细介绍了 volatile 关键字,重点介绍了 volatile与synchronized 的关系,及 volatile 的局限。 阅读全文
posted @ 2016-03-11 18:09 木易·月 阅读(33886) 评论(0) 推荐(6) 编辑
摘要: 建立对象是为了使用对象,Java程序需要通过栈上的reference数据来操作堆上的具体对象。对象的访问方式,取决于虚拟机的具体实现。目前主要有句柄和直接指针两种。 句柄访问: 在Java堆中划分一块内存作为句柄池,reference中存储的就是对象的句柄地址,而句柄中包含了对象实例数据与类型数据各 阅读全文
posted @ 2016-03-11 12:52 木易·月 阅读(241) 评论(0) 推荐(0) 编辑
摘要: 在hotSpot虚拟机中,对象在内存中的布局可以分成对象头、实例数据、对齐填充三部分。 对象头:主要包括: 1、对象自身的运行行元数据,比如哈希码、GC分代年龄、锁状态标志等,这部分长度在32位虚拟机中为32bit(64位中为64bit),为方便存储这部门的数据结构不是固定的。 2、一个类型指针,指 阅读全文
posted @ 2016-03-11 12:49 木易·月 阅读(430) 评论(0) 推荐(0) 编辑
摘要: JVM中对象的创建过程如以下流程图中所示: 对其主要步骤进行详细阐述: 为新生对象分配内存: 内存的分配方式: 指针碰撞:假设Java堆中内存是绝对规整的,所有用过的内存放在一边,空闲的内存在另一边,中间放着一个指针作为分界的指示器,那么当分配内存时仅需移动指针即可。 空闲列表:维护一个列表,记录那 阅读全文
posted @ 2016-03-11 11:03 木易·月 阅读(1570) 评论(0) 推荐(0) 编辑