解析Java对象引用与JVM自动内存管理

技术解析Java对象引用与JVM自动内存管理 解析Java对象引用与JVM自动内存管理对象引用应用程序设计接口是JDKTM1.2中新定义的。该应用程序设计接口允许应用程序以对象引用的方式与JVM的内存管

解析Java对象引用和JVM自动内存管理。

JDKTM1.2中新定义了引用应用程序编程接口。该API允许应用程序以对象引用的形式与JVM的内存管理器进行交互。当应用程序需要在创建新的Java对象之前管理大量内存对象或删除原始对象时,Java对象引用应用程序编程接口有相当多的用途,例如:

基于Web的应用程序通常需要显示大量图片。当用户离开某个网页时,他们往往不确定是否能顺利返回。在这个程序中,Java对象引用API的应用程序可以创建一个环境,在这个环境中,当堆内存以最小的速度运行时,内存管理器会创建对象。当用户返回时,应用程序将重新加载创建的图片。

对象引用队列的应用程序可以创建一个环境,在该环境中,当通过对象引用获取对象时,应用程序会得到通知。然后,应用程序可以清除相关对象,并在内存管理器中将它们合法化。

内存管理器的工作机制。

下面将首先介绍未嵌入引用对象时内存管理器的工作机制,然后讨论添加引用对象后Java堆的变化。

内存管理器的功能是识别程序中不再使用的对象并回收它们的内存。

一个Java应用程序由一系列线程组成,每个线程执行一系列方法,每个方法通过参数或局部变量引用一个对象。这些引用是引用集合的一部分,直接转到应用程序。此外,引用集合还包括类库中定义的静态引用变量以及通过Java本地接口(JNI)API获得的引用。引用集合中的所有被引用对象都可以由当前应用程序获取,而无需回收。类似地,这些对象可能包含对其他对象的引用,或者它们可能被应用程序获取,等等。Java堆中的其他对象被认为是不可访问的,所有这些不可访问的对象在内存管理中也是合法的。如果一个不可用的对象使用finalize()方法,任务将被移交给该对象调用的终结器。在内存回收过程中,没有关闭器的不可访问对象和已经调用关闭器的对象被简单地回收。

内存回收的算法是不断变化的,共同的方面是从引用集中识别可获取的对象,回收其他对象占用的内存空间。

添加引用对象后的引用与常规引用的区别在于引用对象中的引用是由内存管理器专门处理的。引用封装了其他对象的引用,我们称之为指示性对象。创建参考对象时,定义参考对象的指示器对象。

Java对象引用

图1显示了对象引用应用程序设计界面中定义的类层次结构。其中SoftReference类、WeakReference类和PhantomReference类分别定义了三种引用对象和三种相应的获取对象的能力。因此,按照从强到弱的顺序,对象的可达性可以分为以下五种类型:强可达、软可达、弱可达、幻可达和不可达。

图1对象应用程序的类层次结构。

根据应用需求,对象可以是强引用、软引用、弱引用和幻影引用的任意组合。为了确定对象的可用性,JVM内存管理器从引用集合中搜索堆中对象的所有路径。当一个对象的任何路径都不包含参考对象时,就说这个对象具有很强的获取能力。当路径包含一个或多个参考对象时,根据内存管理器查询的参考对象类型,分为二次获取、弱获取和虚拟获取。

此外,引用对象队列(java.lang.ref.ReferenceQueue)也是在对象引用API中定义的,这是内存管理器管理引用对象的简单数据结构。值得注意的是,在定义引用对象时,必须在引用对象队列中生成幻影引用对象,而软引用和弱引用对象没有此限制,例如:

reference queue queue=new reference queue();

PhantomReference pr=new PhantomReference(对象,队列);

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/61502.html

(0)

相关推荐

  • see过去分词,See这个单词中文是什么意思

    技术see过去分词,See这个单词中文是什么意思你好see过去分词,我是【老师说教】,很高兴为你解答。您的问题很简单。呵呵。知道很高兴帮助您解决您提出的问题。原句:See翻译: [si:] vt. 看见;理解;领会;v

    生活 2021年10月25日
  • 满足解决配置DG Broker时报错Error: ORA-16698问题

    技术满足解决配置DG Broker时报错Error: ORA-16698问题这篇文章主要介绍“满足解决配置DG Broker时报错Error: ORA-16698问题”,在日常操作中,相信很多人在满足解决配置DG Bro

    攻略 2021年11月10日
  • 怎样用原生的urllib2+httplib请求Https

    技术怎样用原生的urllib2+httplib请求Https本篇文章给大家分享的是有关怎样用原生的urllib2+httplib请求Https,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,

    攻略 2021年12月4日
  • 雷锋的故事50个字,冰心的五个真实故事50字

    技术雷锋的故事50个字,冰心的五个真实故事50字1雷锋的故事50个字、童年好学冰心4岁时,就在母亲和舅舅杨子敬的督促下,开始读书认字。母亲教她“字片”,舅舅教她课本,并给她讲《三国》故事。
    她7岁时,开始读《三国演义》,

    生活 2021年10月30日
  • 如何配置Log日志

    技术如何配置Log日志这篇文章主要讲解了“如何配置Log日志”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何配置Log日志”吧!1.Slf4jSlf4j 的全称是 Si

    攻略 2021年10月20日
  • css3中设置文本阴影的属性是(css3球体掉落动画带阴影效果)

    技术css3怎么实现图片阴影效果这篇文章主要讲解了“css3怎么实现图片阴影效果”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“css3怎么实现图片阴影效果”吧!css3实

    攻略 2021年12月16日