挑灯夜读——JVM区域:类加载解读

类加载

类加载过程:

类的加载过程
1、加载:将文件加载为二进制字节码(也就是class文件),这个加载器可以使用系统提供的,也可以使用自定义加载器。
2、链接:分为三个过程:分别为验证、准备、解析。验证通俗理解为,确保class文件符合当前虚拟机的要求,避免出现破坏虚拟机的自身安全。准备通俗理解为,为静态变量分配内存,并将其赋初始化值。解析通俗理解,将我们的类方法名这些符号引用等转变为直接引用,也就是获得地址信息。
3、初始化:对静态类的赋初始值,当然这种主动性的赋值才会初始化变量。

JVM区域有哪些?

共享区域
  • 共享区域意味着,资源是处于共享的一种状态,而这样的区域,在JVM中分别为方法区和堆。
1、 方法区:
  • 方法区:方法区,我们在JDK1.6之前,称之为永久区,只是现在已经废弃了这种说法,而我们的方法区,主要存储的数据包括:静态变量、常量、类信息和常量池等数据
  • 他也被称为非堆
2、堆
  • 堆同样也是共享区域,它是我们JVM储存中最大的一块区域,主要储存着实例化的对象,因为实例化的对象存在极快的存活与死亡转换,所以我们的垃圾回收的机制,很多都发生在堆这个区域。
  • 而堆这个区域也就有了我们的分代区:eden、survivor from、survivor to和老年代等空间。
  • 同样就会延伸到垃圾回收的算法:标记清除,标记压缩和复制算法等三种,分别针对不同的场景和区域进行不同的使用。
非共享区域
3、 程序计数器
  • 程序计数器:记录机器码的地址位置,相当于是执行引擎同来记录字节码运行的位置。当然如果方法为本地方法,则这个记录值就为空。
  • 这是唯一一个不存在内存溢出的小空间。
4、虚拟机栈
  • 也就是我们常说到的栈,这样的结构,主要是确保程序运行时,具有先进出的顺序,这样的顺序不正好符合,主线程main第一个被运行,作为栈帧被放入虚拟机栈中,同时会分出以下几个区域:

局部变量区:我们方法作为一个栈帧被加载,同时其中的局部变量也会被加载至这个区域,以供我们的操作使用。
操作数栈:通过加载了运算符,来计算我们的公式后的结果。
动态链接:同样保存我们的类名称所指向的地址值,而非引用。
方法返回地址:该方法运行完毕,也就是我们的栈帧结束运行后,回到方法在上一个线程的位置。继续向下运行。

5、本地方法栈
  • 本地方法栈,作为一个似栈非栈的区域,倒不如我们直接这样理解:
  • 他就是用来存放java语言调用非java语言实现的接口
  • 它和虚拟机栈的作用十分相似,只是我们的本地方法栈,会有一个本地方法接口作为接入我们本地方法库的中间件。

结语

  • 本次是对简单的类加载解读和区域的简单解读,如果有不清楚或错误的地方,还望批评指正。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

米店不卖你

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值