MinorGC/MajorGC/FullGC的对比
堆空间分代思想
逃逸分析
逃逸分析判定
分配到栈
逃逸分析优化代码
栈上分配
同步省略
标量替换
逃逸分析并不成熟
方法区
重要概念
堆方法区栈之间的关系
永久代为甚没被元空间替代
设置方法区参数
方法区OOM
方法区内部结构
常量池与运行时常量池
方法区垃圾回收
垃圾回收
基本概念
什么垃圾
Java自动内存管理
垃圾回收算法
引用计数算法
可达性分析算法
finalization机制
标记清除算法
标记压缩算法
复制算法
再次触发GC的时候 eden+from区两者会作为回收区域
在eden和from回收存活的对象复制到to之后要做三件事情
1.清空eden+from区
2.把原先from变为to 原先to变为from(交换)
3.对象d年龄加1
注意在复制d的时候判断年龄 年龄达到设定值—>老年代
分代收集算法
增量收集算法
分区回收算法
垃圾回收器
垃圾回收收集算法是内存回收的理论,而垃圾回收器是内存回收的实践。
并行和并发的区别
并发(Concurrent)
在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行。
并发不是真正意义上的“同时进行”,只是CPU把一个时间段划分成几个时间片段(时间区间),然后在这几个时间区间之间来回切换,由于CPU处理的速度非常快,只要时间间隔处理得当,即可让用户感觉是多个应用程序同时在进行。如:打游戏和听音乐两件事情在同一个时间段内都是在同一台电脑上完成了从开始到结束的动作。那么,就可以说听音乐和打游戏是并发的
并行(Parallel)
当系统有一个以上CPU时,当一个CPU执行一个进程时,另一个CPU可以执行另一个进程,两个进程互不抢占CPU资源,可以同时进行,这种方式我们称之为并行(Parallel)。
其实决定并行的因素不是CPU的数量,而是CPU的核心数量,比如一个CPU多个核也可以并行
总结
所以并发是在一段时间内宏观上多个程序同时运行,并行是在某一时刻,真正有多个程序在运行。
并行和并发的区别:
并发,指的是多个事情,在同一时间段内同时发生了。
并行,指的是多个事情,在同一时间点上同时发生了。
并发的多个任务之间是互相抢占资源的。
并行的多个任务之间是不互相抢占资源的、
只有在多CPU或者一个CPU多核的情况中,才会发生并行。
否则,看似同时发生的事情,其实都是并发执行的
Serial收集器
ParNew收集器
Parallel Scavenge收集器
Serial Old收集器
Parallel Old收集器
CMS收集器