聊聊JVM(上)

前言

最近UP在准备面试,正好复习到了JVM,跟大家说说心得,怎么说呢,笔记是自己整理的,听的是B站上面狂神的课,狂神真的是一个良心UP!!!
附上狂神的学习网站
狂神的B站个人空间

一、JVM的位置

JVM 在操作系统之上
JVM 全名Java Virtual Machine,中文名称Java虚拟机
大家可能经常听说JDK,JRE和JVM,有没有搞混呢
三者逻辑关系是:JDK包含JRE,JRE包含JVM
想要运行Java程序只需要JRE即可,想要编写Java程序,需要安装JDK
请添加图片描述

二、JVM的体系结构

请添加图片描述
这是一个关于JVM的简单的体系结构图

三、类加载器

作用:加载Class文件
在这里插入图片描述

关于类加载器的分类

类加载器都是虚拟机自带的加载器分为以下三个类型
1.启动类(根)加载器:主要负责加载JDK下常用的一些工具类(Object类、String类等)
2.拓展类加载器:这个加载器主要负责ext包下的一些类的加载
3.应用程序加载器:主要加载我们自己定义的一些类

四、双亲委派机制

说到类加载器,我们就要聊聊双亲委派机制了,因为这是面试中类加载器的一个重要的考点
那么具体什么是双亲委派机制呢,且听我······马上说^ v ^

双亲委派机制描述

Jvm在运行一个类之前会先找到应用程序加载器,应用程序加载器会向上委托,找到拓展类加载器,拓展类加载器还会向上委托到根加载器,此时如果根加载器中有这个类,就会执行根加载器里面的类,如果根加载器中没有这个类,根加载器就会向下委托,委托给他的子加载器去加载
我所理解的类加载器就是一个双向奔赴的过程,哈哈哈哈

为什么要用双亲委派机制

Java类伴随其类加载器具备了带有优先级的层次关系,确保了在各种加载环境的加载顺序。
保证了运行的安全性,防止不可信类扮演可信任的类。
这么理解有些晦涩,说简单点就是保证程序的安全,防止核心API被篡改,严格限制代码对本地资源的访问,保证对代码的有效隔离,防止不安全的代码对本地系统造成破坏。
再直白点,为了安全嘛,毕竟,要是本地系统坏了,就没得玩了

五、Native

本地方法栈的由来

大家对这个关键字熟悉吗?Native顾名思义,是本地的意思。
想必诸位看官都知道,在Java诞生的时候,C、C++的江湖地位就已经奠定了,就连JVM也是用C语言写的,为了跟这两个大哥套近乎,也为了更好的利用JVM,在JAM中有一个专门的存储区域叫本地方法栈。

如何调用本地方法栈

这个本地方法栈就是用Native关键字修饰的
因为本地方法栈中的方法什么的都是用C写的,所以不能直接调用,我们需要通过本地方法接口JNI(java native interface)加载本地方法栈中的方法

六、栈

存储特点

栈在Jvm中觉对是一个大课题,我也是个刚入门的小学生,就简单聊聊,欢迎补充哦
首先说一下栈的存储特点------栈是先进后出的存储结构,顾名思义,就是先进来的后出去
栈是方法的运行环境,栈里面存储的是对象的引用地址,而对象的真实地址则在堆中存储,至于堆嘛,那就是后话了

作用

也是因为栈的先进后出的特点,所以栈是方法的运行环境,虚拟机中栈主管的就是程序的运行过程
因为栈是线程级别的,线程结束,栈内存被释放,所有栈没有垃圾回收,很省心,哈哈哈
在这里插入图片描述

运行

前面说过栈是线程级别的,所以每一个方法过来,就开启一个线程,每一个线程访问都会开启一个虚拟机栈,每个虚拟机栈都会压入一个栈帧
在这里插入图片描述

预告

最近搞面试,时间有限,jvm里面的东西聊完了一半至于后一半嘛,请看聊聊JVM(下)
咳咳,我在码字中·······

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值