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

垃圾分代回收机制

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

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

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

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

Object

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

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

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

  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个对象

  1. +和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是线程安全,效率低

  1. 重要方法
    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”};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值