自己建个网站需要什么,企业网站建设一条,免费ae模板素材网站,Linux查找WordPress路径文章目录 switch 实现成绩评级JVM内存模型概念栈的特点堆的特点 垃圾回收机制通用的分代垃圾回收机制三种清理算法垃圾回收过程垃圾回收常见的两种检测引用算法内存泄露常见原因 this的用法创建对象的四步 static 静态特点 变量的分类和作用域import switch 实现成绩评级 switc… 文章目录 switch 实现成绩评级JVM内存模型概念栈的特点堆的特点 垃圾回收机制通用的分代垃圾回收机制三种清理算法垃圾回收过程垃圾回收常见的两种检测引用算法内存泄露常见原因 this的用法创建对象的四步 static 静态特点 变量的分类和作用域import switch 实现成绩评级 switch的特性每次只能比较一个整数难道要一个一个处理么 可以使用求余反正成绩个位数不影响评级
switch ((int)grade/10){case 10:case 9:System.out.println(优秀);break;case 8:System.out.println(良好);break;case 7:System.out.println(中等);break;case 6:System.out.println(及格);break;default:System.out.println(不及格);
}JVM内存模型概念
栈的特点
每一个线程都会对应一个栈但是所有线程共享一个堆和方法区栈描述的是方法执行的内存模型每个方法被调用都会创建一个栈帧栈属于线程私有无法实现线程间的共享栈由系统自动分配速度快、内存空间连续
堆的特点
堆用于存储创建好的对象和数组数组也是对象JVM只有一个堆被所有线程共享堆存储空间不连续灵活但速度慢堆被所有线程所共享在堆上的区域会被垃圾回收期做进一步划分
垃圾回收机制
内存管理很大程度上是指堆中对象的管理垃圾回收机制回收的是没有任何变量引用的对象有引用的对象即使长时间没有调用也不会回收
通用的分代垃圾回收机制 年轻代——存放刚刚new过的对象年老代——Eden满以后会触发一次Minor GC 清理无用对象将有用对象复制到年老代年老代中的存储对象会不停循环转移区块存储当循环次数超过15次时会转移到年老代进行存储永久代——Java8后换了名字但是他的功能是一直都有的 分代垃圾回收是基于这样一个事实不同对象的生命周期不同 Full GC用于清理年老代年轻代。JVM调优中很大的工作就是Full GC的调节 Minor GC清理年轻代 Major GC清理年老代 程序员无权调用垃圾回收器即使程序员显示调用也只是申请不是一定执行System.gc() 三种清理算法
Minor GC清理年轻代区域Major GC清理老年代区域Full GC清理老年代、年轻代、永久代。成本高会对系统性能产生影响
垃圾回收过程
发现垃圾 - 回收垃圾
垃圾回收常见的两种检测引用算法
引用计数法根搜索法
内存泄露常见原因
大量拼接字符串时使用了String而不是StringBuilder
String str ;
for(int i0;i 10000;i){str i;//相当于产生了10000个String对象
}HashMap、Vector、List的使用IO流对象、数据库连接对象、网络连接对象未关闭监听器使用不当
this的用法
创建对象的四步 分配对象空间并将对象成员变量初始化 执行属性值的显式初始化 执行构造方法 返回对象的地址给相关的变量 this()调用重载的构造方法非默认。但是只能在构造方法中使用并且必须位于构造方法的第一句 this 不能用于static方法中
static 静态
静态变量、静态方法生命周期和类相同
特点
为该类的公用变量属于类被该类的所有实例共享在类载入时被初始化static成员变量只有一份一般用“类名.变量名/方法名”来调用在static方法中不可直接访问非static的成员可能此时类还没有被实例化
变量的分类和作用域
局部变量——属于方法成员变量——属于对象静态变量——属于类
import
Java默认会导入java.lang包下的所有类java.xxx.*会导入该包下所有的类会延长编译时间但是不会降低运行速度引入同名类时只能写包名全路径cn.jia 和 cn.jia.jia只是在逻辑上看起来有关系其实是两个完全独立的包静态导入 import static java.lang.Math.*这样可以直接使用该包的静态属性和静态方法。比如之前使用π需要 Math.PI 但是现在只需 PI