返回顶部

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—垃圾回收)

 

posted @ 2022-09-26 21:52  dork-h  阅读(33)  评论(0)    收藏  举报