Thinking in Java:第五章-初始化与清理
来源:互联网 发布:腾牛网软件下载 编辑:程序博客网 时间:2024/05/28 15:48
1:初始化和清理是设计安全的两个问题。(内存)
2:java使用构造器在用户有能力操作对象之前初始化。
3:人类的语言具有冗余性,即使漏掉几个词,也可以根据语境推测出语义。机器的语言要求精确性。
4:重载方法:相同的函数名,不同的参数列表,不能用返回值类型来区分重载函数。
5:this关键字:表示“调用方法的那个对象”。
6:使用本地方法分配的内存块java垃圾收集器不能回收这部分内存。需要程序员自己搞定。
7:垃圾回收算法:一:回收空间。二:使得堆中对象紧凑排列,可以是实现一种高速的,有“无限空间”可以分配的堆模型。
//敲重点,垃圾回收算法
jvm体系结构
图片来源:网络,侵删
java堆内存
图片来源:网络,侵删
新生代(Young Generation)
Eden空间(Eden space,任何实例都通过Eden空间进入运行时内存区域)
S0 Survivor空间(S0 Survivor space,存在时间长的实例将会从Eden空间移动到S0 Survivor空间)
S1 Survivor空间 (存在时间更长的实例将会从S0 Survivor空间移动到S1 Survivor空间)
老年代(Old Generation)实例将从S1提升到Tenured(老年代)
永久代(Permanent Generation)包含类、方法等细节的元信息(在java se8中被移除)
1:引用计数法:(简单但很慢的垃圾回收技术)
每个对象都有一个引用计数器,当有引用连接到对象时,计数加1,当引用离开作用域或者引用被置为null(Java 编译器能选择给实例赋 null 值,从而标记实例为可回收。),计数减1。垃圾回收会在含有全部对象的列表上遍历,当发现某个对象的引用计数为0时,就释放其空间。(对象之间存在交互引用不能清理)。
2:对于所有活的对象,一定可以追溯到他在堆栈或者静态存储区的引用。所以,从堆栈或者静态存储区开始,遍历所有的引用,就能找到所有的引用。
2.1:停止-复制
先停止程序运行,然后将所存活的对象从当前堆复制到另一个堆。
有两个问题:1:需要两个堆。2:程序运行稳定后只会产生少量垃圾,很浪费。
2.2:标记-清理
如果没有新垃圾产生,一些jvm就会由“停止-复制”转换到“标记-清理”模式。
从堆栈或者静态存储区开始,遍历所有的引用,就能找到所有的引用,每当找到一个活的对象,就给对象一个标记,标记完成后,清理动作才开始。没有被标记的对象会被释放,但是这时剩下的堆空间是不连续的(内存碎片化),需要重新整理。
3:java 4中垃圾回收器
3.1串行垃圾回收器(Serial Garbage Collector)
3.2并行垃圾回收器(Parallel Garbage Collector)
3.3并发标记扫描垃圾回收器(CMS Garbage Collector)
3.4G1垃圾回收器(G1 Garbage Collector)
G1垃圾回收器:G1垃圾回收器适用于堆内存很大的情况,他将堆内存分割成不同的区域,并且并发的对其进行垃圾回收。G1也可以在回收内存之后对剩余的堆内存空间进行压缩。并发扫描标记垃圾回收器在STW情况下压缩内存。G1垃圾回收会优先选择第一块垃圾最多的区域
4:GC监控与分析:jdk自带的工具是Java VisualVM(路径:\Java\jdk1.8.0\bin)
阅读全文
0 0
- 《Thinking in Java》笔记 - 第五章 - 初始化与清理
- Thinking in Java--第五章-初始化与清理
- Thinking in Java学习笔记 第五章:初始化与清理
- Thinking in Java 读书笔记 第五章 初始化与清理
- #Thinking in Java阅读笔记# 第五章 初始化与清理
- Thinking in Java:第五章-初始化与清理
- thinking in java 笔记 思维导图 第五章初始化与清理
- Thinking In Java笔记(第五章 初始化与清理(二))
- Thinking In Java笔记(第五章 初始化与清理(三))
- day4 part1:《Thinking in Java》笔记第五章---初始化与清理
- Thinking in Java 读书笔记-初始化与清理
- Thinking in Java---初始化与清理
- Java - Thinking in Java 第5章 初始化与清理
- Thinging in java 第五章 初始化与清理
- think in java第五章 初始化与清理 总结随笔
- Thinking In Java 学习笔记 - 初始化与清理
- 【Thinking in Java】初始化与清理(一)
- 【Thinking in Java】初始化与清理(二)
- 【TensorFlow】关键字global_step使用(十)
- 自动备份远程机器的脚本
- java中比较double大小
- 主题提取 问题解决思路
- Maven搭建hadoop环境报Missing artifact jdk.tools:jdk.tools:jar:1.6
- Thinking in Java:第五章-初始化与清理
- 润乾V5web端预览报错 cell num exceeds limit 的解决方案
- 高手详解SQL性能优化十条经验
- Yii2中多表关联查询(hasOne、hasMany、join、joinwith)
- Yarn_基础
- 文件包含漏洞 TIPS
- tomcat8 日志切割之cronolog
- poj 1502 floyd
- Android开源项目和应用源码分析