现在的位置: 首页 > 操作系统 > 正文

深入Java虚拟机–判断对象存活状态

2020年02月12日 操作系统 ⁄ 共 907字 ⁄ 字号 评论关闭

程序计数器,虚拟机栈和本地方法栈

  首先我们先来看下垃圾回收中不会管理到的内存区域,在Java虚拟机的运行时数据区我们可以看到,程序计数器,虚拟机栈,本地方法栈这三个地方是比较特别的。这个三个部分的特点就是线程私有的,它们随着线程的创建而诞生,也因线程的结束而灭亡。栈中的栈帧随着方法的进入和退出会有条不絮的执行着进栈和出栈。每一个栈帧中分配多少内存,基本上是在类结构确认下来的时候就已知的,因此这几个区域的内存分配和回收都具备确定性,在这几个区域内就不需要过多考虑回收的问题,因为方法结束或者线程结束,内存自然就跟随着回收了。

Java堆和方法区

  我们讨论的垃圾回收,主要就是关于Java堆中废弃对象的回收。Java堆和方法区中,一个接口中的多个实现类需要的内存可能不一样,一个方法中的多个分支需要的内存也可能不一样,我们会在程序运行的时候动态创建对象,这部分内存的分配和回收也是动态的,垃圾收集器所关注的是这部分内存如何进行回收。

对象状态判断

  在研究对象的回收之前,我们需要先看一下如何进行判断对象是否还有存活价值,即要先判断对象是否还有被引用,这是我们进行垃圾回收的第一步,判断对象存活状态。接下来我会讲一下几种判断的方法。

   1.、引用计数法

       一个比较通俗的方法就是当对象在创建的时候,就给对象创建一个对象计数器,每当有一个地方引用到这个对象的时候,计数器加一;当引用失效的时候,计数器减1;任何时候计数器为0的对象就是不可能被使用的,就是我们所认知的 --死亡对象。 客观地说,引用计数算法的实现比较简单,判定效率也很高,在大部分情况下它都是一个不错的算法,也有一些比较著名的应用案例,例如微软公司的COM(Component Obejct Mode)技术,使用ActionScript3的FlashPlayer等技术都引用了技术算法进行内存管理。 但是,至少主流的Java虚拟机里面没有用到引用计数算法来管理内存,之中最主要的问题就是他很难解决对象之间相互循环引用的问题:

 

以上就上有关深入Java虚拟机--判断对象存活状态的全部内容,学步园全面介绍编程技术、操作系统、数据库、web前端技术等内容。

抱歉!评论已关闭.