zoukankan      html  css  js  c++  java
  • 亨元模式 四大引用 逃逸引用 池化思想

    亨元模式

    说到享元模式,第一个想到的应该就是池技术了,String常量池、数据库连接池、缓冲池等等都是享元模式的应用,所以说享元模式是池技术的重要实现方式。

      比如我们每次创建字符串对象时,都需要创建一个新的字符串对象的话,内存开销会很大,所以如果第一次创建了字符串对象“adam“,下次再创建相同的字符串”adam“时,只是把它的引用指向”adam“,这样就实现了”adam“字符串再内存中的共享

    享元模式(Flyweight),运用共享技术有效地支持大量细粒度的对象。UML结构图如下:

    四大引用

    什么是java的四大引用

    是JDK1.2版本开始引入,把对象的引用分为4个等级,我们平时学习的就是四种的第一级的强引用,说白了,就是Object o = new Object() ,四个引用分别是强引用、软引用、弱引用和虚引用,请记住它们的顺序!因为这是它们对内存的敏感程度!
    等级: 强 > 软 > 弱 > 

    它们有什么作用

    灵活的控制对象的生命周期
    提高对象的回收机率

    什么是强引用

    - 强引用就是我们平时使用的对象方式,也是使用最多的一种方式,**请记住不管内存紧张也罢,不足也罢,gc永不回收强引用的对象, 即使jvm 出现(内存溢出错误)OutOfMemoryError,使程序停止,也不会回收对象来提高内存**

    什么是软引用

    -  对象具备软引用,**请记住,只要内存足够,我们不对对象回收,但是当内存不足,gc对软引用对象进行回收** 可以看出软引用对内存很敏感,可用来高速缓存,同时它可以结合队列使用,如果软引用被gc回收,jvm就会把软引用加入到队列中 
    

    什么是弱引用

    -  gc不内存是发现弱引用,就会立刻回收弱引用对象,但是我们知道gc是一个优先级很低的线程,所以不一定立刻发现并回收弱引用对象,**但记住,只要被gc发现弱引用,不管内存够不够,直接回收**,同时,弱引用,也可以结合队列使用,当被回收,就进去于之关联的队列中

     什么是虚引用

    虚引用就是和没有任何引用一样,任何时候都可能被回收,**它必须与队列联合使用**
     

    逃逸引用

    逃逸分析是目前Java虚拟机中比较前言的优化技术,他与类型继承关系分析一样,并不是直接优化代码的手段,而是为前天优化手段提供依据的分析技术。
    逃逸分析的基本行为就是分析动向的动态作用域:当一个对象在方法中被定义后,它可能被外部方法所引用,例如,作为调用参数传递到其他方法中。成为方法逃逸。甚至还有可能被外部线程访问到,例如赋值给类变量或者可以在其他线程中访问的实例变量,成为现场逃逸。

    ublic class EscapeTest {
    public static Object globalObj;

    // 给全局变量赋值,发生逃逸
    public void globalVariableEscape() {
    globalObj= new Object();
    }

    // 方法返回值,发生逃逸
    public Object methodEscape() {
    return new Object();
    }

    // 实例引用发生逃逸
    public void instanceEscape() {
    test(this);
    }
    }

    栈上分配

    栈上分配主要是指在Java程序的执行过程中,在方法体中声明的变量以及创建的对象,将直接从该线程所使用的栈中分配空间。 一般而言,创建对象都是从堆中来分配的,这里是指在栈上来分配空间给新创建的对象。

    所以java对象不光存在堆上,而栈中可能也会有

    池化技术(待补充)

    池化技术能够减少资源对象的创建次数,提高程序的性能,特别是在高并发下这种提高更加明显。使用池化技术缓存的资源对象有如下共同特点:1,对象创建时间长;2,对象创建需要大量资源;3,对象创建后可被重复使用。


  • 相关阅读:
    POJ 1953 World Cup Noise
    POJ 1995 Raising Modulo Numbers (快速幂取余)
    poj 1256 Anagram
    POJ 1218 THE DRUNK JAILER
    POJ 1316 Self Numbers
    POJ 1663 Number Steps
    POJ 1664 放苹果
    如何查看DIV被设置什么CSS样式
    独行DIV自适应宽度布局CSS实例与扩大应用范围
    python 从入门到精通教程一:[1]Hello,world!
  • 原文地址:https://www.cnblogs.com/wangjincai/p/13221411.html
Copyright © 2011-2022 走看看