java 垃圾回收机制(csdn)
- GC回收
- 需要干的事情是找到垃圾 ,然后进行垃圾回收
- 垃圾回收算法 (六种)
- 引用计数法
- 标记整理法
- 标记清除法
- 缺点 当存在大量对象的时候,只有小部分存活的情况,耗时严重
- 复制搜集法
- 克服了标记清除法的缺点
- 可达性分析法
- 分代计数法
- java内存模型
- java内存
- 线程私有区域
- 程序计数器
- 本地方法栈
- 虚拟机栈
- 线程共享区域
- 方发区
- 堆区
- 线程私有区域
- Java内存模型规定了所有的变量都存储在主内存中,每条线程有自己的工作内存,线程的工作内存中保存了该线程中是用到的变量的主内存副本拷贝,线程对变量的所有操作都必须在工作内存中进行,而不能直接读写主内存。不同的线程之间也无法直接访问对方工作内存中的变量,线程间变量的传递均需要自己的工作内存和主存之间进行数据同步进行。
- 原子性
- 一个操作或则多个操作要么全部执行要么全部不执行,执行的过程不会被任何因素打断,类比数据库的事务操作
- 在Java中可以使用synchronized来保证方法和代码块内的操作是原子性的。
- 可见性
- 定义:可见性是指当多个线程访问同一个变量时,一个线程修改了这个变量的值,其他线程能够立即看得到修改的值
- Java内存模型是通过在变量修改后将新值同步回主内存,在变量读取前从主内存刷新变量值的这种依赖主内存作为传递媒介的方式来实现的。
- Java中的volatile关键字提供了一个功能,那就是被其修饰的变量在被修改后可以立即同步到主内存,被其修饰的变量在每次是用之前都从主内存刷新。因此,可以使用volatile来保证多线程操作时变量的可见性。
- 除了volatile,Java中的synchronized和final两个关键字也可以实现可见性。只不过实现方式不同,这里不再展开了。
- 有序性
- 定义:程序执行的顺序按照代码的先后顺序执行
- 在java 中通过使用synchronized 和volatile 来保证线程操作的有序性
- volatile 会禁止指令的重排, synchronized 保证同一个时刻只有一个线程进行操作
- 参考
- java内存
- java 类加载过程
- java类加载过程指的是 jvm虚拟机把.class文件中类的信息加载到内存中,并解析生成class对象的过程
- 加载
- 链接
- 验证
- 准备
- 解析
- 初始化
- 参考
- java 堆栈分配
- 堆里存放创新的对象实例 栈存放对象的引用
- eg
- String str1 = "abc";
- 过程:是先在栈创建一个string类的对象的引用str1,然后查找堆里面是否存在abc
- String str1 = "abc";