- 博客(5)
- 资源 (25)
- 收藏
- 关注
原创 判断对象是否存活
引用计数算法(Reference Counting): 给对象添加一个引用计数器,每当有一个地方引用它时,计数器值加1;当引用失效时,计数器值减1;任何时刻计数器为0的对象就是不可能再被使用的。 优势:高效 缺陷:很难解决对象之间的循环引用问题,例如objA.instance = objB及objB.instance = objA,如果除此之外这两个对象再无任何引用,实际上这两个对象已经不可能再被...
2018-10-24 17:54:15 417
原创 对象的访问定位
Java程序需要通过栈上的reference数据来操作堆上的具体对象,但虚拟机规范并没有定义这个引用应该通过何种方式去定位、访问堆中的对象的具体位置,所以对象访问方式也是取决于虚拟机实现而定的,目前主流的访问方式有使用句柄和直接指针两种。 使用句柄访问时,堆中会划分出一块内存来作为句柄池,虚拟机栈中存储的对象引用实际上是句柄地址,而句柄包含了对象实例数据与类型数据...
2018-10-01 17:53:43 190
原创 对象在内存中的存储布局
对象头中的运行时数据,如哈希码、GC分代年龄、锁状态标志、线程持有的锁、偏向线程ID、偏向时间戳等,这部分数据的长度在32位和64位的虚拟机(未开启压缩指针)中分别为32bit和64bit,官方称它为“Mark Word”。 对象需要存储的运行时数据很多,其实已经超出了32位、64位Bitmap结构所能记录的限度,但是对象头信息是与对象自身定义的数据无关的额外存储成本,考虑到虚拟机的空...
2018-10-01 15:52:28 2603
原创 对象创建过程
(1) 虚拟机接收到一条new指令时,先去虚拟机中检查这个指令的参数是否能在常量池中定位到一个类的符号引用,即类有没有被加载到方法区; (2) 若类未被加载到方法区,则先进行类加载,若类已被加载,则继续; (3) 获取被加载的类的对象长度; (4) 确认是否在TLAB中分配内存,若是,则在TLAB中分配内存,否则在EDEN中分配内存; (5) 将分配到的内存空间设置为零值; (6) 设置对象的...
2018-10-01 15:13:20 1254
原创 运行时数据区
Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域,这些区域都有各自的用途以及创建和销毁的时间,有的区域随着虚拟机进行的启动而存在,有些区域则依赖用户线程的启动和结束而建立和销毁。根据《Java虚拟机规范(Java SE 7版)》的规定,Java虚拟机所管理的内存将会包含以下几个运行时数据区域: 程序计数器(Program C...
2018-10-01 11:24:00 1151
Spring Security集成CAS客户端实例
2015-03-02
CAS服务端(非原生)
2015-03-02
Oframer开发框架
2015-03-02
poi生成Excel及合并单元格示例
2013-12-09
集成Spring、Elasticsearch、paoding,将ES服务嵌入到Web程序
2013-12-02
ElasticSearch应用之Java示例源代码
2013-05-16
Axis2与Was7
2012-12-13
Spring MVC整合Mybatis
2012-08-17
Spring MVC文件上传下载
2012-08-17
ssh的annotation示例
2010-11-04
JAVA EE之Tomcat起步
2009-10-17
struts2.1.6源代码,包括xwork2.1.2和ognl2.6.11的源代码
2009-07-17
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人