(本文内容,主要翻译自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与内存管理相关推荐

  1. eai java实现,月光软件站 - 编程文档 - Java - 建立EAI方式与SAI方式之间的通信

    解决JAVA控制VRML场景的一个实际问题 侯光敏 (wearebug@etang.com) 2002 年 1 月 搞过java语言对vrml场景控制的人都知道,目前有两种方式对vrml场景进行控制, ...

  2. autocad java api_月光软件站 - 编程文档 - Java - 在java中实现 AutoCAD api

    因为在项目中需要从autoCAD 的dwg文件中提取标题框中的属性插入到数据库中实现图纸的批量入库. 一开始在网上搜索这方面的资料,其中有一些控件可以脱离autoCAD系统提取的,但都是要收费的.比如 ...

  3. java ubb_月光软件站 - 编程文档 - Java - JAVA写的简单UBB类

    最近做论坛碰到了UBB的问题,这个很大众化的东西,怎么没有JAVA写的解释器呢,实在是该写一个.下面的这个不全,但是可以应付一下. import java.util.*; public class H ...

  4. 个人帐目管理系统java_月光软件站 - 编程文档 - Java - 实战EdaEagle——个人帐目管理系统(一)...

    实战EdaEagle--个人帐目管理系统(一) 作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站 点击此出下载EdaEagle 点击此处下载个人帐目管理源码 EdaEagle,既 ...

  5. java项目连接jboss中数据库_月光软件站 - 编程文档 - Java - JBOSS3.2.5中MYSQL数据库连接池的建立与测试...

    数据库连接池的配置参照 samlei 的文档<切换JBOSS默认数据库到MySQL>  http://dev.csdn.net/develop/article/33/33406.shtm ...

  6. java创建多级xml树_月光软件站 - 编程文档 - Java - 用XSL与XML实现多级树形菜单

    XSL语言功能强大而奇妙.从前面的例子中,我们可以初步了解到,一个xsl文档中使用了很多类似"xsl:xxxxx"这样的标签,这些标签就是xsl语言的部分.一个xsl文档至少是由一 ...

  7. 怎样学java软件编程6_月光软件站 - 编程文档 - Java - 我学习使用java的一点体会(6)...

    现在应该说一说设计模式的学习了.设计模式是一个高度抽象的概念,每一种模式都是被抽象化了的解决某一问题的成功经验,理解设计模式需要洞察力,因而学习设计模式前,最好有一定的经验,不然很难体会设计模式的精髓 ...

  8. java ejb3开发_月光软件站 - 编程文档 - Java - 使用EJB3.O简化EJB开发(三)

    简化持久化容器管理 CMP实体bean将成为EJB3.0使得开发人员强制使用的一个主要的检查方式.持久化框架象如开源的已经成为不像实体bean本质上的复杂和重量级的开发J2EE持久化框架应用的被大家喜 ...

  9. java 2d划线 刷子_月光软件站 - 编程文档 - Java - Java图形设计中,利用Bresenham算法实现直线线型,线宽的控制(NO 2D GRAPHICS)...

    Java 2D Graphics提供了强大的画线功能,可以控制线型,线宽,刷子的形状等,但在JDK1.2以前,没有提供这样一个功能,为了保持与旧版JDK的相容,实现一个可控制线型,线宽的画直线方法还是 ...

最新文章

  1. 10个方法让程序员更加优秀
  2. 若不能连接到sql server的localhost
  3. 手机网络怎么共享给电脑_电脑没网络怎么回事?如何解决电脑没网络问题
  4. windows系统下HMailServer免费邮件服务器简易搭建
  5. 3.初识Verilog HDL
  6. Sharepoint
  7. 简述python的特性_python的一些语言特性(一)
  8. Mysql慢查询深入剖析_《深入精通Mysql(六)》系列之如何通过慢查询日志进行SQL分析和优化...
  9. 控制台程序console输入参数 获取参数
  10. 云原生高可用技术体系的构建
  11. linux环境生成weblogic密钥,Linux环境下创建weblogic服务.doc
  12. 创建一个坚固的备份系统
  13. 容器编排技术 -- Kubernetes kubectl 命令表
  14. SpringBoot项目中遇到的BUG
  15. 如何在eclipse中添加android ADT
  16. 项目管理系统设计方案
  17. 信号处理常用matlab之数字滤波器及滤波函数
  18. (前端发邮件)vue中使用smtp.js发送邮件
  19. 第九届蓝桥杯大赛软件类国赛
  20. HTML css实现翻页效果,一个纯CSS3实现的酷炫翻书效果

热门文章

  1. Could not contact [localhost:8005] (base port [8005] and offset [0]). Tomcat may not be running.
  2. windows phone:WP8中的地图和导航
  3. 强化网络互连设备安全配置脚本
  4. Pro10丨枢轴点反转策略
  5. 商城系统建设:如何搭建自己的网上商城平台
  6. BAT蝙蝠视频聊天室(服务器+客户端+架设相关软件)免费提供
  7. python怎么计算相关系数_Python三种方法计算皮尔逊相关系数
  8. 计算机系统对工业相机影响,如何理解工业相机的校准
  9. excel表格行列显示十字定位_突出显示活动单元格所在行列的设置方法
  10. 抖音搬运被限流评级怎么办,什么是有效申诉和无效申诉丨国仁网络资讯