当前位置:首页 > 后端开发 > 深入JVM内核---JVM内存模型

深入JVM内核---JVM内存模型

7个月前 (05-20)76

        在上一篇博客中讲GC算法的时候提到了一些关于JVM内存模型.JVM中用heap堆来存储运行时的数据,所有类实例和数组由堆分配内存,JVM启动时创建堆(heap memory),在堆以外的内存叫非堆(non-heap memory)

深入JVM内核---JVM内存模型 _ Java侠

1.堆(Heap space)

在JVM的堆内存空间中,从大的层面划分,可以分为新生代(Young)和老年代空间(Old).其中Young空间又被分为两个部分和3个板块,分别为1个Egen区和2个survivor区.

Minor GC

从年轻代空间(包括Egen和survivor区域)回收内存被称为Minor GC.每次Minor GC会清理年轻代的内存.

深入JVM内核---JVM内存模型 _ Java侠


Eden区域:

         是用来存放使用new或者newInstance等方式创建的对象,默认都是存放在Eden区,除非这个对象太大,或者超过了设定的阈值-XX:PretenureSizeThresold,这样的对象会被直接分配到Old区域。 


Survivor(幸存)区

          一般称S0,S1,理论上他们是一样大的,解释一下,他们是如何工作的: 在不断创建对象的过程中,Eden区会满,这时候会开始做Young G也叫Minor GC,而Young空间的第一次GC就是找出Eden区中,幸存活着的对象,然后将这些对象,放到S0,或S1区中的其中一个, 假设第一次选择了S0,它会逐步将活着的对象拷贝到S0区域,但是如果S0区域满了,剩下活着的对象只能放old区域了,接下来要做的是,将Eden区域 清空,此时时候S1区域也是空的。 


当第二次Eden区域满的时候,就将Eden区域中活着的对象+S0区域中活着的对象,迁移到S1中,如果S1放不下,就会将剩下的部门,放到Old区域中,只是这次对象来源区域增加了S0,最后会将Eden区+S0区域,清空 


第三次和第四次依次类推,始终保证S0和S1有一个是空的,用来存储临时对象,用于交换空间的目的,反反复复多次没有被淘汰的对象,将会放入old区域中,默认是15次,计数器会在对象的头部记录它交换的次数。


老年代(Old)

用于存放经过多次新生代GC仍然存活的对象。新建的对象也可能直接进入老年代,比如大对象(可通过参数指定)和大的数组对象。

永恒代(Perment)

存放类的Meta信息。

Major GC

是清理老年代.

Full GC

是清理整个堆空间---包括年轻代和老年代.

发生在老年代的GC,当老年代没有足够的空间时即发生Full GC.在这里可能会发生Stop-The-World,这是java中一种全局暂停的现象,所有java代码停止,native代码可以执行,但不能和JVM交互.多半由于GC引起:Dump线程;死锁检查;堆Dump.


2.方法区:

用来储存已经加载的类信息,常量,静态变量以及方法代码.


3.Java虚拟机栈

也叫栈区。是由一个个栈帧组成的后进先出的栈式结构,栈帧中存放方法运行时的局部变量、方法出口等信息。当调用一个方法时,就会在虚拟机栈中创建一个栈帧用于存放这些数据,方法调用完时栈帧消失。若方法中又调用了其他方法,则继续在栈顶创建新的栈.


4.本地方法栈

与虚拟机栈类似,区别是本地方法栈是为Native方法服务的,而java虚拟机栈是为java方法服务的.

5.程序计数器

最小的一块内存,通过改变计数器的值来选取下一条需要执行的字节码指令.程序计数器用来为线程独立拥有,线互补互补影响,保证线程切换后能准确恢复到执行位置,线程执行指令的跳转、循环、分支都要依赖计数器来完成.


作者:陈晓婵
来源链接:https://www.cnblogs.com/chenxiaochan/p/7253397.html

“深入JVM内核---JVM内存模型” 的相关文章

JVM超详细

JVM超详细

JVM探究: **·请你谈谈你对JVM的理解? java8虚拟机和之前的变化更新? https://blog.csdn.net/qq_3826...

JVM内存模型入门

JVM内存模型入门

JVM内存模型入门 本文是学习笔记,原文地址在:https://www.bilibili.com/video/av62009886 综述 其实没有太多新东西...

jvm 名词解读及内存模型的相关关系

jvm 名词解读及内存模型的相关关系

java只是体系模块 先解释几个名称: 1. java web start  是基于 Java 技术的应用程序的一种部署解决方案,它是连...

JVM 调优指标、JVM 日志、JVM 调优工具

文章目录 参考 JVM 调优指标 JVM 日志 J...

TOMCAT JVM调优

TOMCAT JVM调优

近期换装了64位系统,不知道怎么的Tomcat老是内存溢出,经查资料得出以下经验: 本文介绍了Java内存溢出的详细解决方案。本文总结内存溢出主要有两...

Microsoft JVM 以及 Taobao JVM 的介绍

Microsoft JVM 微软为了在IE3浏览器中支持Java Applets,开发了Microsoft JVM。 Microsoft JV...

JVM虚拟机内存模型和GC垃圾回收机制小结

JVM内存模型是什么?可能百度的时候有一堆答案,但是死记硬背过一阵就忘了,无法真正的渗透自己的大脑,特别是像我一样非科班出身的,对于计算机还比较笼统,没有一个特定的概念,那么我这篇博客,...

jvm优化——运行参数篇

jvm优化——运行参数篇

在这篇文章中主要介绍jvm的一些运行参数 对jvm优化总结篇可以阅读:JVM优化——总结篇 1、jvm的运行参数 1.1、三种参数类型...

深入理解JVM—JVM内存模型

深入理解JVM—JVM内存模型

我们知道,计算机CPU和内存的交互是最频繁的,内存是我们的高速缓存区,用户磁盘和CPU的交互,而CPU运转速度越来越快,磁盘远远跟不上CPU的读写速度,才设计了内存...

《JVM》

《JVM》

一、JVM 1.1 预备知识 虚拟机的分类 1. 系统虚拟机 对物理计算机的仿真。Eg:VMware、Oracle VM VirtualBox。...