浅谈对JVM内存结构体系的理解

1 篇文章 0 订阅

一.完整过程图
在这里插入图片描述
二.步骤详解

一.类的加载过程
1,我们程序在执行时,首先会编译成多个.class文件,在运行时,会将.class文件加载(读到)到内存中,谁把这个对象读到内存中的呢?(用一段代码说明)
在这里插入图片描述

传参数:右键空白处→Run As,Run Coufigurations→Arguments
Program arguments(程序运行时的参数)中写入自己传的参数(例如:10)
在这里插入图片描述
拿到了参数值
VM arguments(jvm里的参数),jvm里-XX:+TraceClassLoading
在这里插入图片描述

呈现出类加载过程。
JVM(Hotspot)在执行.class文件时,把类load到内存里面,谁来负责把这些类读到内存中呢?有一个JVMClassLodingSystem(类加载系统),类加载系统中有一个核心的抽象类ClassLoader(abstract)→这个类负责把.class文件加载到内存中。
它的底层过程是使用liux从磁盘里把类读到内存中,将内存放在方法区。
ClassLoader(abstract)中有更多的具体实现类classLoader。
在子系统加载类时,还有很多小的过程,例如验证类语法结构的load,连接Link,初始化init等。
二.方法区method area
方法区分为线程共享区即堆(heap)和线程私有区即栈(stack)。
比如说有一块区域public thread。在这个所有线程可以被共享的区域里,有一个method area(JDK Metaspace) 持久代。类带加载后会放到method area(JDK Metaspace)中。在类加载的过程中,除了字节码要放到method area(JDK Metaspace)中以外,还会在堆(heap)内存里创建一个对象,对象里存储的是字节码的内存地址。在新的版中,有些池也会放到堆里,是因为便于GC的回收。堆中又分为不同的区域,如老年代(old),eden区,S0区,S1区。s0,s1区有被称为幸存区。
不同区域过程解析:对象在创建时,不是所有对象都在堆里,有的对象会分配到方法栈,大部分放在eden区,在Eden区要满的时候,会触发GC回收,在gc时,有的对象可能会被回收掉,有些对象没有被回收,没有被回收的对象会放到幸存区s0。S1区的是S0区触发gc被回收的。反复执行。幸存下来的对象,将被转移到old区。
在这里插入图片描述
(二)栈区
栈是先进后出的一种结构。(类似于厨房一个碗堆着一个碗),这种栈结构分成两部分:java method stack(java方法栈),native method stack(本地方法栈)。
例如在方法栈(A)中调用了一个本地方法hashcode(B),

在这里插入图片描述
本地方法hashcode(B)会放在本地方法hashcode(B)中,本地方法hashcode(B)又调了一个java方法(C),C就会放到java中。也就是说只要是java方法调本地方法,就会存在本地方法上,而本地方法调Java方法,将会放在java上
在这里插入图片描述

![栈区是在thread (private)线程对象创建的时候创建的,线程结束,栈的生命周期也会结束。
当一个线程区创建的时候,就会创建这样一个方法栈,存储线程下面运行的方法,在java method stack里,存储的是栈帧,栈帧里面存储的方法信息,包含方法的修饰符,方法的返回类型,方法的参数,方法的局部变量等等。
thread (private)里还有一块区域,Programmer Counter(程序计数器),唯一没有内存递出的一块区域。它的作用是:在将来实行代码时,是由CPU 来执行,CPU只有一个,而线程却有多个,cpu会在这些线程之间来回切换,Programmer Counter用来记录CPU切换到一半位置的线程。
以上这些知识点,属于自己总结,整理,如有不对的地方,欢迎交流。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值