精华内容
下载资源
问答
  • java中的引用类型是指除了基本数据类型之外的所有类型。java中有四种引用类型,...引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型...

    java中的引用类型是指除了基本数据类型之外的所有类型。java中有四种引用类型,分别是强引用、软引用、弱引用和虚引用。引用类型和原始类型具有不同的特征和用法。

    ef8fe710386ef5a9b1faa54251aa8df7.png

    Java 提供两种不同的类型:引用类型和原始类型(或内置类型)

    引用类型和原始类型的行为完全不同,并且它们具有不同的语义。

    引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型

    用作某个类的实例数据时所指定的缺省值。

    对象引用实例变量的缺省值为 null,而原始类型实例变量的缺省值与它们的类型有关。同时为了面向对象操作的一致性。

    这些基本类型都有相应的封装类型:Integer、Short、Long、Byte、Float、Double、Character等。

    Java的4种引用类型:

    他们分别是强引用(StrongReference),软引用(SoftReference),弱引用(WeakReference)以及PhantomReference(虚引用),他们被

    GC回收的可能性从大到小排列。

    强引用(StrongReference)

    只要强引用存在,垃圾回收器将永远不会回收被引用的对象,哪怕内存不足时,JVM也会直接抛出OutOfMemoryError,不会去回收。如

    果想中断强引用与对象之间的联系,可以显示的将强引用赋值为null,这样一来,JVM就可以适时的回收对象了

    软引用(SoftReference)

    软引用是用来描述一些非必需但仍有用的对象。在内存足够的时候,软引用对象不会被回收,只有在内存不足时,系统则会回收软引用对

    象,如果回收了软引用对象之后仍然没有足够的内存,才会抛出内存溢出异常。这种特性常常被用来实现缓存技术,比如网页缓存,图片

    缓存等。

    在 JDK1.2 之后,用java.lang.ref.SoftReference类来表示软引用。

    弱引用(WeakReference)

    弱引用的引用强度比软引用要更弱一些,无论内存是否足够,只要 JVM 开始进行垃圾回收,那些被弱引用关联的对象都会被回收。

    在 JDK1.2 之后,用 java.lang.ref.WeakReference 来表示弱引用。

    PhantomReference(虚引用)

    虚引用是最弱的一种引用关系,如果一个对象仅持有虚引用,那么它就和没有任何引用一样,它随时可能会被回收,在 JDK1.2 之后,用 PhantomReference 类来表示,通过查看这个类的源码,发现它只有一个构造函数和一个 get() 方法,而且它的 get() 方法仅仅是返回一个null,也就是说将永远无法通过虚引用来获取对象,虚引用必须要和 ReferenceQueue 引用队列一起使用。

    展开全文
  • java中的引用类型是指除了基本数据类型之外的所有类型。java中有四种引用类型,...引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型...

    java中的引用类型是指除了基本数据类型之外的所有类型。java中有四种引用类型,分别是强引用、软引用、弱引用和虚引用。引用类型和原始类型具有不同的特征和用法。

    ef8fe710386ef5a9b1faa54251aa8df7.png

    Java 提供两种不同的类型:引用类型和原始类型(或内置类型)

    引用类型和原始类型的行为完全不同,并且它们具有不同的语义。

    引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型

    用作某个类的实例数据时所指定的缺省值。

    对象引用实例变量的缺省值为 null,而原始类型实例变量的缺省值与它们的类型有关。同时为了面向对象操作的一致性。

    这些基本类型都有相应的封装类型:Integer、Short、Long、Byte、Float、Double、Character等。

    Java的4种引用类型:

    他们分别是强引用(StrongReference),软引用(SoftReference),弱引用(WeakReference)以及PhantomReference(虚引用),他们被

    GC回收的可能性从大到小排列。

    强引用(StrongReference)

    只要强引用存在,垃圾回收器将永远不会回收被引用的对象,哪怕内存不足时,JVM也会直接抛出OutOfMemoryError,不会去回收。如

    果想中断强引用与对象之间的联系,可以显示的将强引用赋值为null,这样一来,JVM就可以适时的回收对象了

    软引用(SoftReference)

    软引用是用来描述一些非必需但仍有用的对象。在内存足够的时候,软引用对象不会被回收,只有在内存不足时,系统则会回收软引用对

    象,如果回收了软引用对象之后仍然没有足够的内存,才会抛出内存溢出异常。这种特性常常被用来实现缓存技术,比如网页缓存,图片

    缓存等。

    在 JDK1.2 之后,用java.lang.ref.SoftReference类来表示软引用。

    弱引用(WeakReference)

    弱引用的引用强度比软引用要更弱一些,无论内存是否足够,只要 JVM 开始进行垃圾回收,那些被弱引用关联的对象都会被回收。

    在 JDK1.2 之后,用 java.lang.ref.WeakReference 来表示弱引用。

    PhantomReference(虚引用)

    虚引用是最弱的一种引用关系,如果一个对象仅持有虚引用,那么它就和没有任何引用一样,它随时可能会被回收,在 JDK1.2 之后,用 PhantomReference 类来表示,通过查看这个类的源码,发现它只有一个构造函数和一个 get() 方法,而且它的 get() 方法仅仅是返回一个null,也就是说将永远无法通过虚引用来获取对象,虚引用必须要和 ReferenceQueue 引用队列一起使用。

    展开全文
  • jvm()

    2021-03-09 00:08:30
    分配方式有指针碰撞与空闲列表,选择哪种由垃圾收集器是否带有压缩整理功能决定。 执行new之后,会执行init方法,将对象初始化。 对象的内存布局 布局分三块区域:对象头、实例数据、对齐填充 对象头包括两部分...

    jvm

    hotspot虚拟机

    对象的创建

    • 虚拟机遇到new时,先去常量池定位符号引用,看这个符号所代表的类是否被加载、解析和初始化。若无,必须先执行类加载过程。
    • 加载完成之后,即为新生对象分配内存。分配方式有指针碰撞与空闲列表,选择哪种由垃圾收集器是否带有压缩整理功能决定。
    • 执行new之后,会执行init方法,将对象初始化。

    对象的内存布局

    • 布局分三块区域:对象头、实例数据、对齐填充
    • 对象头包括两部分信息
      • 第一部分用于存储对象自身的运行时数据
      • 第二部分是类型指正,即对象指向它的类元数据的指针,虚拟机通过这个指针来确定这个对象是哪个类的实例。

    对象的访问定位

    • Java通过栈上的reference数据来操作堆的具体对象。
    • 主流访问方式
      • 句柄,Java堆会划分出一块内存作为句柄池,reference中存储的就是对象的句柄地址,在对象被移动时只会改变句柄的实际数据指针,而reference本身不需要修改。
      • 直接指针访问方式,好处是速度快。

    实战:outofmemoryerror异常

    Java堆溢出

    • Java堆内存的oom异常是实际应用中常见的内存溢出异常情况。
    • 通过参数-XX:+HeapDumpOnOutOfMemoryError可以让虚拟机在出现内存溢出异常时Dump出当前的内存堆转储快照以便事后进行分析。
      在这里插入图片描述
    • 当出现Java堆内存溢出时,异常堆栈信息“java.lang.OutOfMemoryError”会跟着进一步提示“Java heap space”。
    • 要解决这个区域的异常,一般的手段是先通过内存映像分析工具(如Eclipse Memory Analyzer)对dump出来的堆转储快照进行分析,确认内存中对象是否必要,分清楚是内存泄漏还是内存溢出。
    • 如果内存泄露,可进一步通过工具查看泄露对象到GC Roots的引用链。可以比较准确地定位出泄露代码的位置。
    • 如果不存在内存泄露(内存中对象必须都活着),检查虚拟机堆参数与机器物理内存对比看是否还可以调大,检查是否存在某些对象生命周期过长、持有状态时间过长的情况,尝试减少程序运行期的内存消耗。

    虚拟机栈和本地方法栈溢出

    • 对于Hotspot来说,栈容量只由-Xss参数设定。
    • 关于虚拟机栈和本地方法栈,在Java虚拟机规范中描述了两种异常(本质上只是对同一件事的两种描述):
      • 如果线程请求的栈深度大于虚拟机所允许的最大深度,将抛出stackoverflowerror异常。
      • 如果虚拟机在扩展栈时无法申请到足够的内存空间,则抛出outofmemoryerror异常。
    • 在单个线程下,无论是由于栈帧太大还是虚拟机栈容量太小,当内存无法分配的时候,虚拟机抛出的都是stackOverflowError异常。
    • 多线程情况下,每个线程分配的内存越大,越容易产生内存溢出异常。其原因主要在于操作系统分配给每个进程的内存是有限制的。(Windows 32位限制内存为2G)

    方法区和运行时常量池溢出

    • 常量池分配在永久代中,可以通过-XX:PermSize和-XX:MaxPermSize限制方法区大小,从而间接限制其中常量池的容量。
      在这里插入图片描述
    • 运行时常量池溢出,在outofmemoryerror后面跟随的提示信息是“PermGen space”,说明运行时常量池属于方法区(Hotspot虚拟机中的永久代)的一部分。
    • 方法区用于存放class的相关信息,如类名、访问修饰符、常量池、字段描述、方法描述等。
    • jvm上的动态语言通常都会持续创建类来实现语言的动态性。
    • 方法区溢出也是一种常见内存溢出异常,在经常动态生成大量class的应用中,需特别注意类的回收状况。这类场景有:CGLib字节码增强、动态语言、大量jsp、或动态产生jsp文件的应用、基于 osgi的应用。

    本机直接内存溢出

    • directmemory容量可以通过-XX:MaxDirectMemorySize指定,若不指定,则默认与Java堆最大值一样。
      在这里插入图片描述
    • 由directMemory导致的内存溢出,一个明显特征是在heap dump文件中不会看见明显的异常。
    展开全文
  • GC垃圾回收机制

    2020-08-27 10:29:31
    什么是垃圾回收 垃圾回收在进行 GC是如何判断对象是否存活的 ...四种引用类型 强引用 如果一个对象具有强引用,它就不会被垃圾回收器回收。即使当前内存空间不足,JVM也不会回收它,而是抛出OutOfMemoryEr

    什么是垃圾回收

    垃圾回收在哪进行

    GC是如何判断对象是否存活的

    引用技术算法
    可达性分析(Java)

    通过查找完整的调用链,去发现哪些节点是无法到达的,即已经被GC回收。

    在JAVA中,可做为GC Roots的对象包括:

    1. 方法区中类的静态属性引用的对象
    2. 方法区中常量的引用对象
    3. 虚拟机栈(本地变量表)中引用的对象
    4. 本地方法栈JNI(Native)中引用的对象

    四种引用类型

    强引用

    如果一个对象具有强引用,它就不会被垃圾回收器回收。即使当前内存空间不足,JVM也不会回收它,而是抛出OutOfMemoryError错误,使程序异常终止。

    软引用

    在使用软引用时,如果内存的空间足够,软引用就能继续被使用,而不会被垃圾回收器回收;只有在内存空间不足时,软引用才会被垃圾回收器回收。

    弱引用

    在使用弱引用时,只要进行垃圾回收,该引用就被回收。在使用弱引用时,将对象放入弱引用的实现类即可。

    虚引用

    顾名思义,就是形同虚设,如果一个对象仅持有虚引用,那么它相当于没有引用,在任何时候都可能被垃圾回收器回收。

    虚引用必须和引用队列关联使用,当垃圾回收器准备回收一个对象时,如果发现它还有虚引用,就会把这个虚引用加入到与之关联的引用队列中。程序可以通过判断引用队列中是否已经加入了虚引用,来了解被引用的对象是否将要被垃圾回收。如果程序发现某个虚引用已经被加入到引用队列,那么就可以在所引用的对象的内存被回收之前采取必要的行动。

    ReferenceQueue<String> queue = new ReferenceQueue<String>();
    PhantomReference<String> pr = new PhantomReference<String>(new String("hello"), queue);
    

    当我在方法内部写下来

    Object o1 = new Object();
    Object O2 = o1;
    

    我们在堆里面就产生了一个关于Object的实例,在栈里面产生了一个类型为Object的O对象的引用

    垃圾回收算法

    复制算法

    • 优点

    简单高效,不会出现内存碎片问题

    • 缺点

    存活对象较多时,效率会更低。

    标记清除算法

    • 优点

    利用率百分之百

    • 缺点

    标记和清除速率对比复制算法都不高
    会产生大量的不连续的内存碎片

    分代收集

    -XX:NewRadio 2 // 新生代和老年代的比例为 1:2

    -Xmn
    -XX:NewSize/MaxNewSize
    发生在新生代 Minor GC
    老年代 Full GC (同样的也会回收新生代的内存,永久代内存溢出的时候也会发生Full GC)

    在这里插入图片描述

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QzO4Wjdu-1598495216853)(DC08D3A6BAEB4BE1AC552157980FC477)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0WIc9n4m-1598495216855)(5C17EEA69E8B4311B0914BB8B98A2573)]

    参数 如何使用

    垃圾回收中的Stop The World 现象
    当我们发生垃圾回收时,要暂停所有的用户进程,因为在内存中大多数的垃圾都是由用户进程产生的,如果一边进行垃圾回收,线程一边产生垃圾,会降低垃圾回收的效率。

    展开全文
  • 百度Android面试之笔试题

    千次阅读 2018-10-16 13:09:33
    ​​​​​​四种LaunchMode的作用及使用场景? java中的引用类型以及使用场景?描述一下GC机制? 私有构造方法的使用场景? sleep和wait分别的作用和区别? join的作用和实现原理? Android性能优化包括哪几...
  • •值得指出的是:数组也是一数据类型,它本身是一种引用类型。 定义数组 •Java语言支持两语法格式来定义数组: –type[ ] arrayName; –type arrayName[ ]; •对于这两语法格式,一般推荐使用第一...
  • 1.2 应该使用哪种C语言 4 1.3 C编程概述 5 1.4 一致性 6 1.5 语法约定 7 第2章 词法元素 8 2.1 字符集 8 2.1.1 执行字符集 9 2.1.2 空白字符和行终止符 9 2.1.3 字符编码 10 2.1.4 三字符组 10 2.1.5 多...
  • JAVA面试题最全集

    2010-03-13 13:09:10
    四种JDBC方式?目前的版本? 76.EJB有几种?区别是什么? 77.JavaBean与EJB有什么区别? 78.软件开发生命周期有几个阶段? 79.软件开发有哪些因素? 80.软件开发中如何进行版本控制? 81.UML中,类视图如何表示类中...
  • C++程序员面试宝典

    热门讨论 2013-04-01 13:36:19
    面试题37 C++中有基本数据类型 38 面试题38 整型有形式?各种形式有什么区别 39 面试题39 C++中有哪些常量 40 面试题40 常量与变量有哪些区别 42 4.2 操作符 42 面试题41 操作符有哪些分类 43 面试题42 ...
  • JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类? 63 14、字节流与字符流的区别 63 15、怎么判断指定路径是否为目录 65 16、怎么获取指定路径下的全部文件 65 17、Java怎么读取文件和写入文件 ...
  • C#微软培训教材(高清PDF)

    千次下载 热门讨论 2009-07-30 08:51:17
    章 数 据 类 型 .28 4.1 值 类 型 .28 4.2 引 用 类 型 .33 4.3 装箱和拆箱 .39 4.4 小 结 .42 第五章 变量和常量 .44 5.1 变 量 .44 5.2 常 量 .46 5.3 小 结 .47 第六章 类 型 转 换 .48 ...
  • C#微软培训资料

    2014-01-22 14:10:17
    章 数 据 类 型 .28 4.1 值 类 型 .28 4.2 引 用 类 型 .33 4.3 装箱和拆箱 .39 4.4 小 结 .42 第五章 变量和常量 .44 5.1 变 量 .44 5.2 常 量 .46 5.3 小 结 .47 第六章 类 型 转 换 .48 ...
  • asp.net面试题

    2011-05-27 17:56:26
    答:结构是值类型,类是引用类型,所以传结构就是值类型的应用啦,传对象或类就是引用类型的,这个不用多写了吧. 6.ADO.net中常用的对象有哪些?分别描述一下。 答:connection command sqladapter dataset datatable ...
  • 引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。对象引用实例变量的缺省值为 null,而原始...
  • java 面试题 总结

    2009-09-16 08:45:34
    引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。对象引用实例变量的缺省值为 null,而原始...
  • java面试题

    2018-01-01 15:35:15
    57. EJB的几种类型 39 58. 排序都有几种方法?请列举。用JAVA实现一个快速排序。 40 59. 请对以下在J2EE中常用的名词进行解释(或简单描述) 40 59.1. web 容器 40 59.2. EJB容器 40 59.3. JNDI 40 59.4. JMS 41 ...
  • C#数据结构

    2013-12-10 11:49:54
    同算法,选择算法比较合适,以及如何对现有的算法进行改进,从而设计 出更适合于数据结构的算法,这就是算法评价的问题。评价一个算法优劣的主要 标准如下: 1、正确性(Correctness)。算法的执行结果应当满足...
  • powerbuilder

    2013-11-21 17:11:48
    参数printjobnumber:用PrintOpen()函数打开的打印作业号x1:integer类型,指定直线起点的x坐标,以千分之一英寸为单位y1:integer类型,指定直线起点的y坐标,以千分之一英寸为单位x2:integer类型,指定直线终点的...
  • 新手学习C++入门资料

    2008-12-28 23:58:50
    C++中还包括wchar_t数据类型,wchar_t也是字符类型,但是是那些宽度超过8位的数据类型。许多外文字符集所含的数目超过256个,char字符类型无法完全囊括。wchar_t数据类型一般为16位。 标准C++的iostream类库中包括...
  • java基础题 很全面

    2009-05-09 09:24:24
    19. 四种会话跟踪技术 18 20. J2EE是什么? 19 21. J2EE是技术还是平台还是框架? 19 22. 请对以下在J2EE中常用的名词进行解释(或简单描述) 19 23. WEB SERVICE名词解释。JSWDL开发包的介绍。JAXP、JAXM的解释。SOAP、...
  • SQL语法大全

    2014-03-30 11:00:11
    Recordset对象Open方法的CursorType参数表示将以什么样的游标类型启动数据,包括adOpenForwardOnly、adOpenKeyset、adOpenDynamic及adOpenStatic,分述如下: ----------------------------------------------------...
  • java面试宝典

    2013-02-28 16:04:01
    181、四种会话跟踪技术 42 182、Request对象的主要方法 43 183、我们在web应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,如何输出一个某种编码的字符串? 43 184、Servlet执行时一般实现几个方法? ...
  • java面试题典 java 面试题 经典

    热门讨论 2010-06-18 13:42:36
    6. 四种会话跟踪技术 28 7. Request对象的主要方法: 28 8. jsp有哪些动作?作用分别是什么 29 9. 两种跳转方式分别是什么?有什么区别? 29 10. JAVA SERVLET API中forward() 与redirect()的区别? 29 11. Class.for...
  • 千方百计笔试题大全

    2011-11-30 21:58:33
    181、四种会话跟踪技术 42 182、Request对象的主要方法 43 183、我们在web应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,如何输出一个某种编码的字符串? 43 184、Servlet执行时一般实现几个方法? ...

空空如也

空空如也

1 2 3 4 5 6
收藏数 101
精华内容 40
关键字:

引用类型包括哪四种类型