gc java ibm_月光软件站 - 编程文档 - Java - IBM JVM 1.4.1 GC与内存管理
(本文内容,主要翻译自http://www-106.ibm.com/developerworks/java/jdk/diagnosis/GCandMemory.pdf
1 概述
本文档介绍了IBM JavaVM 1.4.1中的ST(存储组件)的功能和工作原理。
ST组件负责在Heap中分配内存,这些内存可以用于定义对象、数组和类。在内存分配后,如果在JVM中存在一个有效的对它的引用,那么这个对象就被认为是存活的,也就是说,这个对象是可达的。当一个对象不直接或间接的被引用时,它就成为了垃圾,可以被回收,相应的内存可以重新使用。在回收对象时,垃圾回收器(简称GC)必须终止对象,保证对相关联的所有的monitor回收到pool中(这个池一般称为monitor cache)。在ST中,并不是所有的对象的处理都是相同的,有的对象(如ClassClass和Thread)对象总是在Heap种特殊的区域进行分配(PinnedClusters),所有的Reference对象(包括子对象)在GC中也被特殊的处理。详细的情况在下文中会说明。
1.1 对象分配(Object Allocation)
当调用这些接口方法时,会进行对象的分配:stCacheAlloc, stAllocObject, stAllocArray, stAllocClass。这些方法都从堆中分配给定大小的区域,但有不同的调用参数和语义。stCacheAlloc总是用来分配小的对象,它被优化成为具有良好的性能,对象被直接从线程预先已经创建好的局部堆(Thread Local Allocation Buffer)中分配,一个新的对象总是在这个堆的尾部进行分配,不需要占用全局锁,因此,效率非常高。使用stAllocObject/stAllocArray分配的对象,如果足够小的话(<512字节),也会从从这个局部堆中分配。
1.2 Reachable Objects
一个JVM的活动状态由几部分组成:所有活动线程的运行栈(Stack),Java Classes的static成员,局部或全局的JNI引用。所有调用的方法都会有一个对应的C栈,这些是构成JVM的所有root对象的集合。在root中会引用堆中的对象,对象又会引用别的对象,这种引用关系会重复以确定所有可达的对象。
1.3 Garbage Collection
当JVM因为缺乏内存而不能在当前的堆中分配一个对象时,能做的第一件事是:对堆进行垃圾回收。这个过程在任何线程调用stGC时启动(可能是因为内存分配失败,或者是对System.gc()的调用)。
首先,JVM要获得进行垃圾回收需要的所有的锁资源,以保证在别的线程持有关键锁时,不会被暂停。所有其它的线程将通过XM接口暂停,保证这些线程的状态可以正确的被当前线程使用。这些状态包括线程栈、执行时刻的寄存器,这些状态时用来跟踪对象引用所必须的。
然后,GC就可以开始了,它包含3个阶段:标记(Mark)
清扫(Sweep)
压缩(Compaction) (可选)
gc java ibm_月光软件站 - 编程文档 - Java - IBM JVM 1.4.1 GC与内存管理相关推荐
- eai java实现,月光软件站 - 编程文档 - Java - 建立EAI方式与SAI方式之间的通信
解决JAVA控制VRML场景的一个实际问题 侯光敏 (wearebug@etang.com) 2002 年 1 月 搞过java语言对vrml场景控制的人都知道,目前有两种方式对vrml场景进行控制, ...
- autocad java api_月光软件站 - 编程文档 - Java - 在java中实现 AutoCAD api
因为在项目中需要从autoCAD 的dwg文件中提取标题框中的属性插入到数据库中实现图纸的批量入库. 一开始在网上搜索这方面的资料,其中有一些控件可以脱离autoCAD系统提取的,但都是要收费的.比如 ...
- java ubb_月光软件站 - 编程文档 - Java - JAVA写的简单UBB类
最近做论坛碰到了UBB的问题,这个很大众化的东西,怎么没有JAVA写的解释器呢,实在是该写一个.下面的这个不全,但是可以应付一下. import java.util.*; public class H ...
- 个人帐目管理系统java_月光软件站 - 编程文档 - Java - 实战EdaEagle——个人帐目管理系统(一)...
实战EdaEagle--个人帐目管理系统(一) 作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站 点击此出下载EdaEagle 点击此处下载个人帐目管理源码 EdaEagle,既 ...
- java项目连接jboss中数据库_月光软件站 - 编程文档 - Java - JBOSS3.2.5中MYSQL数据库连接池的建立与测试...
数据库连接池的配置参照 samlei 的文档<切换JBOSS默认数据库到MySQL> http://dev.csdn.net/develop/article/33/33406.shtm ...
- java创建多级xml树_月光软件站 - 编程文档 - Java - 用XSL与XML实现多级树形菜单
XSL语言功能强大而奇妙.从前面的例子中,我们可以初步了解到,一个xsl文档中使用了很多类似"xsl:xxxxx"这样的标签,这些标签就是xsl语言的部分.一个xsl文档至少是由一 ...
- 怎样学java软件编程6_月光软件站 - 编程文档 - Java - 我学习使用java的一点体会(6)...
现在应该说一说设计模式的学习了.设计模式是一个高度抽象的概念,每一种模式都是被抽象化了的解决某一问题的成功经验,理解设计模式需要洞察力,因而学习设计模式前,最好有一定的经验,不然很难体会设计模式的精髓 ...
- java ejb3开发_月光软件站 - 编程文档 - Java - 使用EJB3.O简化EJB开发(三)
简化持久化容器管理 CMP实体bean将成为EJB3.0使得开发人员强制使用的一个主要的检查方式.持久化框架象如开源的已经成为不像实体bean本质上的复杂和重量级的开发J2EE持久化框架应用的被大家喜 ...
- java 2d划线 刷子_月光软件站 - 编程文档 - Java - Java图形设计中,利用Bresenham算法实现直线线型,线宽的控制(NO 2D GRAPHICS)...
Java 2D Graphics提供了强大的画线功能,可以控制线型,线宽,刷子的形状等,但在JDK1.2以前,没有提供这样一个功能,为了保持与旧版JDK的相容,实现一个可控制线型,线宽的画直线方法还是 ...
最新文章
- 10个方法让程序员更加优秀
- 若不能连接到sql server的localhost
- 手机网络怎么共享给电脑_电脑没网络怎么回事?如何解决电脑没网络问题
- windows系统下HMailServer免费邮件服务器简易搭建
- 3.初识Verilog HDL
- Sharepoint
- 简述python的特性_python的一些语言特性(一)
- Mysql慢查询深入剖析_《深入精通Mysql(六)》系列之如何通过慢查询日志进行SQL分析和优化...
- 控制台程序console输入参数 获取参数
- 云原生高可用技术体系的构建
- linux环境生成weblogic密钥,Linux环境下创建weblogic服务.doc
- 创建一个坚固的备份系统
- 容器编排技术 -- Kubernetes kubectl 命令表
- SpringBoot项目中遇到的BUG
- 如何在eclipse中添加android ADT
- 项目管理系统设计方案
- 信号处理常用matlab之数字滤波器及滤波函数
- (前端发邮件)vue中使用smtp.js发送邮件
- 第九届蓝桥杯大赛软件类国赛
- HTML css实现翻页效果,一个纯CSS3实现的酷炫翻书效果
热门文章
- Could not contact [localhost:8005] (base port [8005] and offset [0]). Tomcat may not be running.
- windows phone:WP8中的地图和导航
- 强化网络互连设备安全配置脚本
- Pro10丨枢轴点反转策略
- 商城系统建设:如何搭建自己的网上商城平台
- BAT蝙蝠视频聊天室(服务器+客户端+架设相关软件)免费提供
- python怎么计算相关系数_Python三种方法计算皮尔逊相关系数
- 计算机系统对工业相机影响,如何理解工业相机的校准
- excel表格行列显示十字定位_突出显示活动单元格所在行列的设置方法
- 抖音搬运被限流评级怎么办,什么是有效申诉和无效申诉丨国仁网络资讯