精华内容
下载资源
问答
  • Java引用类型分类以及详解

    千次阅读 2018-06-11 00:10:46
    Java引用类型分类以及详解 - Java引用类型概述 在JVM之中再好的算法,也敌不过一个好烂的程序员。一个程序要想写好有两点:按照开发标准进行、请写有用代码。 而对于垃圾的产生与回收的处理之中,要想进行更好...

    Java引用类型分类以及详解

    - Java引用类型概述

    在JVM之中再好的算法,也敌不过一个好烂的程序员。一个程序要想写好有两点:按照开发标准进行、请写有用代码。
    而对于垃圾的产生与回收的处理之中,要想进行更好的控制,就必须清楚的掌握Java中的四种引用方式。
    强引用(Strong Reference):即使进行了多次的GC回收,即使JVM真的已经不够用了,即使JVM最终不得已抛出了OOM错误,那么该引用继续抢占;
    软引用(Soft Reference):当内存空间不足时,可以回收此内存空间。如果充足则不回收,可以用其完成缓存的一些处理操作开发。
    缓存:保证数据更快的操作(读取)。是不重要的数据。可以作为牺牲来释放空间。
    弱引用(Weak Reference):不管内存是否紧张,只要一出现GC处理,则立即回收。
    幽灵引用(Phantom Reference):和没有引用是一样的。
    比如HashMap根据key取得值,设置key值为null和不设置key值的效果是一样的。

    • 强引用

    强引用是Java默认支持的一种操作模式,也就是说在引用的处理其间,即使出现有GC,即使内存不足,该引用的数据也不会被回收。

    范例:观察强引用:

    这里写图片描述
    这个流程就叫做强引用。在之前所编写的所有操作都属于强引用,而强引用只有全部的对象都断开连接之后,才可能称为垃圾空间,才有可能被回收。而即使有一个对象引用此空间,那么该对象也不会被回收。
    在多线程状态下,即使产生多个引用对象,空间也不会被回收。

    这里写图片描述
    每个线程都会出现OOM
    强引用并不是造成OOM的关键性因素,正常来讲,你每一个用户(线程)操作完成后,该对象都可以被很容易的进行回收,不必强制性进行回收。

    • 软引用
      软引用指的是当内存不足的时候才进行GC的空间释放,但是如果要想使用软引用必须单独使用特殊的处理类:
      java.lang.ref.SoftReference,该类的定义如下:

    这里写图片描述
    除了强引用,其它引用必须借助特殊类来完成。

    这里写图片描述
    软引用的类继承了Reference的引用父类。
    这个类下有三个引用:
    这里写图片描述

    在软引用之中如果想要进行引用的处理操作,则可以使用如下的方法完成:

    1.构造方法:public SoftReference(T reference);
    2.取得引用的数据:public T get();

    范例:观察软引用:
    这里写图片描述
    软引用与强引用相比,最大的特点在于:软引用中保存的内容如果在内存富裕的时候会继续保留,内存不足会作为第一批的丢弃者进行垃圾空间的释放。
    在开发中,可以利用软引用可以实现高速缓存组件。
    缓存处理好了,你的程序写的才能达到高性能的第一步

    • 弱引用
      弱引用最大的特点就是一旦发生了GC的处理操作,则保存的引用内容将立即释放。弱引用使用“WeakReference”类来完成。
      java.lang.ref.WeakReference

    范例:弱引用处理
    这里写图片描述

    因为不执行GC,所以弱引用的对象并没有被释放。输出依然有值。
    这里写图片描述
    输出为null;
    一旦执行了GC,那么就需要进行内存空间的释放,在类集里面有一个与弱引用功能相似的Map集合WeakHashMap,它属于弱引用的一个实现。

    这里写图片描述

    这里写图片描述

    whm中存放的都是匿名对象。
    个人觉得使用WeakHashMap最大的好处是可以用它保存一些共享数据,这些共享数据如果长时间不使用,可以将其清空。

    • 引用队列
      在之前使用软引用和弱引用的时候都会发现有这样一个构造方法:
      SoftReference:
      这里写图片描述
      WeakReference:
      这里写图片描述
      java.lang.ref包中一共五各类:一个父类,三个子类,另外一个就是引用队列。

    引用队列:待被砍掉的对象的集合点
    如果要清楚引用队列,则首先必须知道对象的引用的强度。如果说按照现在的理解来讲:强引用的强度大于软引用,软引用大于弱引用。

    这里写图片描述
    通过以上的图形分析可以发现,如果要想找到“对象5”,那么一共有两条对象的可及性的路径:
    这里写图片描述

    在以上给出的引用的路径上,1到5是最强引用,但是由于其本身存在一个软引用,所以对象5对于整个的程序就属于软可及对象。
    在java里面,如果某一个对象不属于强引用,那么就需要有一个专门的机制来清除那些不具有存在价值的对象(强对象才有价值)
    所以这个时候如果保存有太多的无价值对象就会造成内存泄漏,那么为专门提供有一个引用队列,当某一个对象被垃圾回收后,则该对象会被保存到引用队列之中。

    范例:观察引用队列的处理操作;
    这里写图片描述
    在发生GC内存清理之前,此时引用队列中为null;
    这里写图片描述
    此处必须断开强引用
    执行完GC之后引用队列有内容。

    引用队列里面保存的就是一个要准备被回收的对象的信息。

    • 幽灵引用(虚引用)
      幽灵引用指的是什么都不保存,但是又看起来像是保存了一样。
      这个的处理类java.lang.ref.PhantomReference。

    范例:观察幽灵引用:
    幽灵引用直接就把要保存的内容保存在了引用队列之中
    这里写图片描述

    需要发生引用但是又不需要引用占用空间的时候。—采用幽灵引用。

    展开全文
  • Java 项目无法引用javax.swing.JOptionPane JAVA引用JOptionPane报错 解决方案 报错通常以这种方式报错 原因可能是因为eclipse的环境配置过高或过低导致的不能调用java中的一些包 下面我的解决方法如下 第一...

    Java 项目无法引用javax.swing.JOptionPane JAVA引用JOptionPane类报错 解决方案
    在这里插入图片描述
    报错通常以这种方式报错
    原因可能是因为eclipse的环境配置过高或过低导致的不能调用java中的一些包
    下面我的解决方法如下
    第一步: 选择Project>>>Properties选项

    第二步:选择左边的Java Build Path>>>然后选中JRE System Library>>>选中那一行JRE>>>在选择Edit

    在这里插入图片描述
    第三步:选择Execution environment>>>选择javaSE-1.8(jdk-11.0.2)(或者其他适合的选项)>>>Finish>>>Apply and close
    在这里插入图片描述
    然后问题就解决了
    PS这种解决方法适用于eclipse的环境配置过高或过低导致的不能调用java中的一些包

    展开全文
  • java 内部如何获取外部类引用

    千次阅读 2015-10-15 20:41:08
    java内部获取外部类引用 :OuterClassName.this Code Example public Class OuterClass{ //外部 private Class InnerClass{ //内部 public void fun(){ //内部方法

    java内部类获取外部类引用 :OuterClassName.this

    Code Example

    public Class OuterClass{              //外部类
        private Class InnerClass{         //内部类
              public void fun(){                //内部类方法
                   OuterClass.this;             //内部类中获取外部类引用
            }
         }
    }
    
    展开全文
  • 在内部里,想引用外部的对象,为什么是外部.this而不是外部引用变量,还有.操作应该是成员操作符吧,这样this不就成了外部成员了
  • Java引用数据类型String详解

    万次阅读 2020-07-02 23:54:44
    Java引用数据类型(String)引用数据类型概述引用数据类型与基本数据类型的差别(举例说明) 引用数据类型概述 说到引用数据类型,那么何为引用数据类型? 引用类型,都可以用null值作为值,也就是说可以在初始化的...

    引用数据类型概述

    说到引用数据类型,那么何为引用数据类型?
    引用类型,都可以用null值作为值,也就是说可以在初始化的时候赋值为null,String是引用类型,也就是说可以使用null作为值。
    在这里插入图片描述

    引用数据类型与基本数据类型的差别(举例说明)

    使用基本数据类型:
    int i1 = 1
    int i2 = 1
    这种是会在内存中存储两个1的值

    但是,使用引用类型就不会!
    String s = “hello”
    String s1 = “hello”
    这种,是不会在内存中存在两个"hello"的,只存在一个"hello"。

    假设"hello"的内存地址为xxxxxx,声明s变量时给s赋值"hello"实际上让s变量引用"hello"的内存地址xxxxxx;

    当我们再次声明变量s1也赋值为"hello"的时候实际上也是直接把已经存在的"hello"的内存地址给了s1引用

    此乃引用类型和基本数据类型的区别。

    记录自己最近学习到的东西,做一个总结,希望大家喜欢,一起加油!

    展开全文
  • Java引用类型

    千次阅读 2016-03-16 19:12:55
    博主最近在整理Java集合框架时,在整理到WeakHashMap的时候,觉得有必要先阐述一下Java引用类型,故此先整理的这篇文章,希望各位多提提意见。   闲话不多说,直接进入主题。Java中提供了4个级别的引用:强引用...
  • Java实体中封装其他实体引用

    千次阅读 2020-03-28 19:44:53
    引用的时候有人会把二个表的数据全都封装在一个实体中,然后在对这个实体进行操作,但如果是三个表呢?四个表呢?还都封装在一个实体吗?这样被封装的实体的数据是不是太多了呢?而且也会照成层次不分,...
  • 我建了一个dynamic web工程,想用JSP引用java类,我写的放在Java Resources/src/(default packge) 这个默认的文件下,有个公共Student,在JSP里有语句<jsp:useBean id="stu" class="Student" scope="page"></jsp...
  • Java引用数据类型()+案例

    千次阅读 2019-03-08 19:54:09
    引用数据类型() 自定义也是一种数据类型。只是自定义类型并非Java为我们预先提供好的类型,而是我们自己定义的一种引用数据类型用来描述一个事物。 的定义格式 创建java文件,与类名相同 public class 类名{...
  • Java中内部的定义与使用一般为成员内部与匿名内部,他们的对象都会隐式持有外部对象的引用,影响外部对象的回收。解决方案为 1.将内部定义为static 2.用static的变量引用匿名内部的实例或将匿名...
  • 文章目录JAVA虚拟机共享数据区方法区java堆线程私有程序计数器PC虚拟机栈本地方法栈GC垃圾回收器引用计数算法可达性分析算法回收和引用类型的关系强引用 StrongReference软引用(SoftReference)弱引用(WeakReference)...
  • java中的参数传递(只有值传递没有引用传递)

    万次阅读 多人点赞 2019-07-31 19:25:14
    Java中数据类型分为两大:基本类型和引用类型。相应的,变量也分这两种类型:基本类型和引用类型。 基本类型的变量保存原始值,即它代表的值就是数值本身; 而引用类型的变量保存的值是引用值,...
  • JAVA 四中引用类型

    万次阅读 2019-07-09 12:22:12
    常见的java引用有四种:强引用、软引用、弱引用、虚引用; 下面分别来介绍一下各种引用: 1、强引用 在Java 中最常见的就是强引用,把一个对象赋给一个引用变量,这个引用变量就是一个强引用。当一个对象被强引用...
  • 深入理解Java String

    万次阅读 多人点赞 2018-06-28 21:15:55
    Java语言了中,所有类似“ABC”的字面值,都是String的实例;String位于java.lang包下,是Java语言的核心,提供了字符串的比较、查找、截取、大小写转换等操作;Java语言为“+”连接符(字符串连接符)以及...
  • 深入理解Java类加载器(ClassLoader)

    万次阅读 多人点赞 2017-06-26 09:34:08
    【版权申明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) ...深入理解Java类型信息(Class对象)与反射机制 深入理解Java枚举类型(enum) 深入理解Java注解类型(@Annotation) 深入理解
  • Java 引用 WeakReference

    千次阅读 2012-02-22 16:40:11
    Reference 是一个抽象,而 SoftReference,WeakReference,...接下来我们来分别介绍和分析强引用以及 java.lang.ref 包下各种虚引用的特性及用法。 StrongReference, SoftReference, WeakReference 以及 Phanto
  • Java内部和匿名内部的用法

    万次阅读 多人点赞 2016-07-21 15:46:41
    Java内部和匿名内部的用法 【尊重原创,转载请注明出处】http://blog.csdn.net/guyuealian/article/details/51981163一、内部: (1)内部的同名方法 内部可以调用外部的方法,如果内部有同名方法...
  • 什么是Java的对象引用Java中都有哪些类型的对象引用Java中提供的Java对象引用主要有什么目的? 通过本文,你就能很清楚得了解Java的对象引用
  • 转载自: ... /** * @author hgl * @data 2019年1月10日 * @description 接口 */ public interface TestInterface { ... public void innerMethod();... System.out.println("匿名内部调用了外部方法"); } }
  • 匿名内部、lambda和方法引用其实是相通的,从匿名内部到lambda到方法引用是一个进化的过程,是一个简化的过程,更加是一个从抽象的过程。 作用都是实现接口方法,换句话说就是实现接口;只是这个接口只有一个...
  • 我竟然不再抗拒 Java加载机制了

    万次阅读 多人点赞 2019-07-10 12:47:50
    很长一段时间里,我对 Java加载机制都非常的抗拒,因为我觉得太难理解了。但为了成为一名优秀的 Java 工程师,我决定硬着头皮研究一下。 01、字节码 在聊 Java 加载机制之前,需要先了解一下 Java 字节码,...
  • 4种Java引用浅解

    万次阅读 多人点赞 2014-04-28 12:56:08
    最近研究Java Cache实现,发现使用到了软引用(SoftReference),不太理解,查阅了JDK文档、代码以及几篇文章。做个小结,如有错误,欢迎指正。 之所以想学习一下Java的...Cache不是仅仅HashMap那么简单,Java引用与Java
  • java】:一个如何引用别的

    千次阅读 2016-01-05 16:23:50
    JAVA语言中,我们经常会遇到这样的问题,想引用别的,如何引用?这里分几种情况考虑 1,两个有继承关系 方法很简单,直接引用就行,并且如果是继承关系的话,假设A继承B,A就能使用B的成员以及方法...
  • 写在前面:对Java有一定认识的人都知道,Java有垃圾回收机制,尽管如此,Java同样也会出现内存泄露,本篇系列主要介绍Java的内存回收机制,以及介绍开发过程中内存管理的小技巧。本文参考《疯狂Java-突破程序员基本...
  • 项目是组件化的,其他的module都是可以正常再kotlin类引用java,只有一个module不行, 而且这个module只是不能应用自己module的java类, 公共组件的java类是没有问题的。 解决过程: 很明显是这个module的问题,...
  • Java内部不能引用本地变量?

    万次阅读 2015-10-18 23:26:59
    Java新手可能会经常碰到提示 “Variable is accessed from... 意思就是,在内部中不能引用本地变量,需要声明为常量。 于是上网查阅,发现了两篇有意思的文章。 第一篇 http://blog.csdn.net/woshichunchun/ar
  • Java对象引用处理机制

    千次阅读 2013-11-13 11:31:17
    Java引用别名机制(原文为Aliasing,别名,即Java中的多态)意味着多个引用变量可以定位到同一个实际物理对象,而这些引用变量可以是不同的类型. 下面的代码中,S继承P, pp 和 ss 分别是P类型 和 S
  • Java基础篇 - 强引用、弱引用、软引用和虚引用

    万次阅读 多人点赞 2018-09-09 08:58:21
    引用计数:Java堆中每一个对象都有一个引用计数属性,引用每新增1次计数加1,引用每释放1次计数减1。 在JDK 1.2以前的版本中,若一个对象不被任何变量引用,那么程序就无法再使用这个对象。也就是说,只有对象...
  • 二丶选中引用jar包的所在的项目 (注意:第3步中先找到报错的jar然后remove然后执行第四步) 三丶重新引用jar包 做完这些就可以中成功引用相对应的外部jar包的方法了! 因为是坑,所以自己做下记录! 亲测没得问题! ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,084,563
精华内容 433,825
关键字:

java引用类

java 订阅