解析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)

相关推荐

  • 小字加偏旁,“少”字可以加什么偏旁

    技术小字加偏旁,“少”字可以加什么偏旁一小字加偏旁、加禾字旁,秒。miǎo 
    1、谷物种子壳上的芒,引申为细微,微小:~忽(喻细微)。 
    2、时间的计算单位,一分钟的六十分之一:~表。~针。 
    3、弧和角的计算单位

    生活 2021年10月30日
  • 如何把mysqld压测到崩溃重启

    技术如何把mysqld压测到崩溃重启小编给大家分享一下如何把mysqld压测到崩溃重启,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!一、压测环境工具准备:centos7.5
    sysbench2.

    攻略 2021年10月26日
  • 哥伦比亚说什么语言,哥伦比亚是个怎样的国家

    技术哥伦比亚说什么语言,哥伦比亚是个怎样的国家或许很多人都听过哥伦比亚这个国家哥伦比亚说什么语言,但却又相当陌生,毕竟这个南美洲的国度与北京有13个小时时差的国家与我们有万里之遥。哥伦比亚是南美洲第四大国,也是全球著名的

    生活 2021年10月26日
  • JavaScript怎么实现自定义日历效果

    技术JavaScript怎么实现自定义日历效果本篇内容主要讲解“JavaScript怎么实现自定义日历效果”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JavaScript怎

    攻略 2021年11月8日
  • 6组-Alpha冲刺-总结

    技术6组-Alpha冲刺-总结 6组-Alpha冲刺-总结组长博客链接:https://www.cnblogs.com/GuoHail/p/15586232.html
    一、基本情况
    组长博客链接:htt

    礼包 2021年11月22日
  • 如何分析OpenLayers3加载矢量地图源的问题

    技术如何解析OpenLayers 3加载矢量地图源的问题今天就跟大家聊聊有关如何解析OpenLayers 3加载矢量地图源的问题,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可

    攻略 2021年12月23日