Jvm(day3—内存模型)
Jvm内存模型
总览

| 名称 | 说明 |
| 方法区 |
存储:类的元信息、静态变量、常量 jdk1.8之后,用元空间替换了方法区,且元空间的内存不在jvm中,而是用的本地内存。 |
| 堆 | 存储:对象实例 |
| 虚拟机栈 |
存储:局部变量 每个线程创建单独的运行时栈 |
|
本地方法栈 |
与虚拟机栈类似,区别:处理native方法 |
|
程序计数器 |
当前线程所执行的字节码的信号指示器 |
- 元空间替换方法区的原因?
1. 字符串大小不定,会出现内存溢出; 2. 对象大小不定; 3. 方法区给GC带来一定的复杂度,且回收效率低;
堆内存布局

- Minor GC 与 Full GC

| 类别 | 说明 |
| Minor GC |
发生条件:Eden区放不下新生对象; GC算法:标记-复制; GC过程:1. 先对Eden区、S0区进行可达性分析,找到活跃对象; 2. 将活跃对象复制到S1区,并将分代年龄+1(如果分代年龄超过15,则直接放入老年代); 3. 清空Eden区、S0区; 4. 交换S1区与S0区; 耗时长的原因:对象生命周期长(静态变量多);缓存使用不当;锁竞争严重(局部变量生命周期变长); |
| Full GC |
发生条件:1. Minor GC后Eden区仍放不下; 2. 尝试放入老年代,也放不下; GC算法:标记-清除(CMS)、标记-整理; |
具体GC请见下篇分析:Jvm(day4—垃圾回收)

浙公网安备 33010602011771号