• 基础复习


    垃圾回收:
      垃圾回收分为年轻代,年老代,持久代。
      新创建的对象属于年轻代,有A、B区,A区满了,就会调用垃圾回收机制,通过引用计数法或者引用可达法就行筛选,没有的进行回收,有用的进行复制,复制到B区。
      B区满了,再重复以上操作。
      循环15次之后,就会属于年老代,进入年老区,C区,当C区达到一定比例之后,也会进行一次垃圾回收,跟年轻区的垃圾回收有些差别,具体差别还不太清楚。
      当年老区满了,则进行全盘清理,Full Gc。

    能够触发执行全盘清理的四个条件:
      年老区满了。
      持久区满了。
      调用System.gc()显性方法
      上次全盘清理之后....(这个不太懂)

    容易造成内存泄漏的操作:
      创建大量无用对象。eg:对于一个需要很多次拼接的字符串,使用String,而不是StringBuilder
      创建大量静态集合类
      不关闭连接。eg:数据库连接、IO流
      监听器的使用。

    传递参数其实就是值传递,值得是将值进行复制,而不是将原值给它。但是需要注意引用对象的传递,当将一个引用对象给定另外一个值时,就相当于将该对象的地址给了另外一个值,所以两个值只要有一
    个改变对象,那么对象就会被改变。

    创建对象的步骤
      先分配内存空间,并完成成员变量的初始化或者默认值。
      执行属性值的显示初始化(系统默认的无参构造器就是隐式的,不是系统默认的就是显示的)
      执行构造方法
      返回对象的地址给对象

    Integer对象的学习
    public static void main(String[] args) {
    Integer int1 = 2;
    Integer int2 = 2;

    Integer int3 = Integer.valueOf(222);
    Integer int4 = 222;

    /**
    * Integer对象中存在缓存,缓存比较常见的数值,大小范围是-128-127 只要是这个范围内的数字则从缓存中拿,不在这个范围则需要new一个新对象。
    */
    System.out.println(int1 == int2); //返回true
    System.out.println(int3 == int4); //返回false
    }
    相关源码(下面源码就是Integer的缓存信息):
    public static Integer valueOf(int i) {
    if (i >= IntegerCache.low && i <= IntegerCache.high)
    return IntegerCache.cache[i + (-IntegerCache.low)];
    return new Integer(i);
    }

    private static class IntegerCache {
    static final int low = -128;
    static final int high;
    static final Integer cache[];

    static {
    // high value may be configured by property
    int h = 127;
    String integerCacheHighPropValue =
    sun.misc.VM.getSavedProperty("java.lang.Integer.IntegerCache.high");
    if (integerCacheHighPropValue != null) {
    try {
    int i = parseInt(integerCacheHighPropValue);
    i = Math.max(i, 127);
    // Maximum array size is Integer.MAX_VALUE
    h = Math.min(i, Integer.MAX_VALUE - (-low) -1);
    } catch( NumberFormatException nfe) {
    // If the property cannot be parsed into an int, ignore it.
    }
    }
    high = h;

    cache = new Integer[(high - low) + 1];
    int j = low;
    for(int k = 0; k < cache.length; k++)
    cache[k] = new Integer(j++);

    // range [-128, 127] must be interned (JLS7 5.1.7)
    assert IntegerCache.high >= 127;
    }

    private IntegerCache() {}
    }


  • 相关阅读:
    布局及视图(三)
    笔试中的编程题2
    布局及视图(四)
    SoftReference,WeakReference&WeakHashMap
    Android自用 监测网络是否可用
    Android自用 加载png图片时出错!
    Android访问权限大全
    笔试中的编程题3
    如何全面的把握一个系统的异常处理
    从程序的控制逻辑看线程的三种应用模式
  • 原文地址:https://www.cnblogs.com/qcq0703/p/12099354.html
Copyright © 2020-2023  润新知