JAVA基础09 垃圾分代回收机制+Object+String

    科技2022-07-11  76

    垃圾分代回收机制

    栈–会产生无用的内容,会立即清除 方法区–类的信息 堆—无用对象,在某个时间进行回收

    在程序启动的时候就会开始监测堆内存的使用情况,监测如果堆内存的使用率超过了一个临界值(0.75)就开始通知GC(Garbage Collector)进行垃圾回收,GC会在某个时间段进行垃圾回收----System.gc();–通知

    内存分成新生代(伊甸园区和幸存区)和老生代, 新创建的对象会存储在伊甸园区,此时系统会对伊甸园区进行一次扫描,如果这个对象没有在使用就会被通知GC进行回收,如果还在使用就会把这个对象挪到幸存区,系统会对这个对象进行多次扫描,如果这个对象没有在使用就会通知Gc进行回收,如果还在使用就把这个对象挪到老生代,系统会对这个对象进行多次扫描(扫描频率比幸存区的频率低),如果这个对象没有在使用机会通知GC进行回收,如果还是使用就继续待在老生代,重复上述操作

    如果老生代的对象突然消失----系统可能崩溃 如果刚创建的而对象的内存很大,伊甸园区存储不了,会挪到老生代进行存储,如果老生代也存储不了,就会报错OutOfmemoryError

    Object

    API----Application Programing Interface----应用程序接口—提供了接口以及接口下的类 Api文档----通过Javadoc命令对文档注释的内容进行抽取,抽取到了一个文档

    概念 object是所有类的顶级父类,是没有父类的类,默认所有类继承object类

    重要方法 clone()—把原对象的属性进行拷贝放到新的对象中,把新的对象进行返回—实现cloneable才能执行克隆操作 finalize()—通知GC进行垃圾回收—System.gc(); getClass()—得到的是实际创建的类型 hashcode()—0返回的是哈希码值----分布范围广而且散列分布—唯一的—表示地址值—不同对象的哈希码值不一样 toString()—默认调用的是Object()返回对象的地址值,也可以自行重写 equals()—默认是调用Object的方法默认是比较对象的地址值是否相等,—重写equals方法(1.判断地址值是否相等2.判断参数是否为null,3.判断对象是否是同一类型

    判断属性(引用类型))–手写

    案例: Student类 String name, int age,String nu(学号)

    String

    最终类–不能被继承 “helloworld”–所有的字符串都是String类的对象 字符串是常量;它们的值在创建之后不能更改 String底层是有字符数组(private和final共同修饰)组成的,字符串创建之后不能改变(字符数组的长度以及元素值) 所有的常量都是存储在方法区的运行时常量次 共享?------常量池里存储的字符串常量不能出现重复

    String s1=“a”;//1 s1=s1+“b”;//new StringBuilder(“a”).append(“b”).toString()//4

    一共创建了5个对象

    +和StringBuilder拼接对比? 空间 String[] str={…};//100个字符串 ①.+ String s="";//1 for(int i=0;i<str.length;i++){ s+=str[i];//new StringBuilder(s).append(str[i]).toString(); //一次创建了3个对象 }

    一共创建了301个对象 ②.StringBuilder

    StringBuilder sb=new StringBuilder();//1 for(int i=0;i<str.length;i++){ sb.append(str[i]);//一次创建1个对象 } String s1=sb.toString();//1

    一共创建了102个对象

    综合时间和空间的角度,StringBuilder拼接(拼接次数较多的时候)效率更高 Stringbuilder是线程不安全,效率高 Stringbuffer是线程安全,效率低

    重要方法 charAt()—返回指定下标对应的字符数组元素的值 length()—字符串长度 toCharArray()—字符串转成字符数组 new String(cs,int offset,int count)—字符数组可以灵活的转换部分或者全部内容为字符串 comPareTo()—比较字符串字典顺序返回差值 concat()—用于拼接字符串(底层由数组的复制完成的) contains()—判断新串是否是原串的子串 endsWitch()、startsWith()—以什么为结束或者开始

    案例: 1.输入字符串,统计这个子字符串中有多少个英文字母,数字,其他字符 2.输入字符串,把这个字符串中数字求和 3.输入字符串,把这个字符串中的数字排序 4.输入字符串,输出所有字符在字符串中出现的次数 5.字符串数组排序 String[] s={“asd”,"cdf’,“aad”,“avd”,“bw”,“ba”};

    Processed: 0.019, SQL: 8