垃圾分代回收机制
栈–会产生无用的内容,会立即清除
方法区–类的信息
堆—无用对象,在某个时间进行回收
在程序启动的时候就会开始监测堆内存的使用情况,监测如果堆内存的使用率超过了一个临界值(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”};