• 基础复习


    垃圾回收:
      垃圾回收分为年轻代,年老代,持久代。
      新创建的对象属于年轻代,有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() {}
    }


  • 相关阅读:
    MySQL学习之——锁(行锁、表锁、页锁、乐观锁、悲观锁等)
    PhpExcel导出excel报错:net::ERR_INVALID_RESPONSE
    Java收藏
    Java项目收藏
    CentOS 6.8 安装 Erlang 及 RabbitMQ Server
    Redis 中 5 种数据结构的使用场景介绍
    Golang 实现 set 集合,变相实现 切片去重、排序 功能
    查看 Mac/Linux 某端口占用情况
    [Beego模型] 六、事务处理
    [Beego模型] 五、构造查询
  • 原文地址:https://www.cnblogs.com/qcq0703/p/12099354.html
Copyright © 2020-2023  润新知