当前位置: 首页 > news >正文

快速了解什么是JVM

朋友,希望能帮助到你

  • 1.什么是JVM
  • 2.JVM的位置
  • 3.JVM结构体系
  • 4.类加载器
  • 5.双亲委派机制
  • 6.沙箱安全机制
  • 7.Native关键字
  • 8.栈
  • 9.HotSpot

1.什么是JVM

  • JVM可以看作一个用C语言编写虚拟机软件(提供远行环境规范),运行的是JAVA(又名C+±-)程序
  • JVM调优在方法区(Method Area)、堆(Heap)(99%)进行
    三种JVM:
  • Sun公司的HotSpot
  • BEA公司的Oracle JRockit
  • IBM

2.JVM的位置

  • 图示

3.JVM结构体系

  • 图示

4.类加载器

  • 作用:加载Class文件~(就是加载Java类到虚拟机里面)new polarBear();创建一个实例他的名字放在栈(Stack)里面,具体的对象放在堆(Heap)里面
  • 不同的类加载器负责不同的区域类的加载
    1.启动类(根)加载器(Bootstrap ClassLoader):这个加载器不是一Java类,底层由C语言实现,因此启动类加载器不属于Java类库无法直接被Java程序直接引用。
    2.扩展类加载器(ExtClassLoader):开发者可以直接使用
    3.应用程序加载器(AppClassLoader):也叫系统类加载器,负责加载用户类路径上所制定的类库,可直接使用

5.双亲委派机制

  • 为什么使用该机制:为了保证Java核心库的类型安全,通过该机制对于Java核心库的类加载工作由启动类加载器来统一完成,保证了Java应用所使用的都是同一版本的Java核心库得类,是互相兼容的
  • 加载过程:
    1.类加载器收到类加载的请求
    2.将这个请求向上委托给父类加载器去完成,一直向上委托,直到启动类加载器
    3.启动加载器检查是否能够加载当前这个类,能够加载就结束并使用当前的加载器,否则抛出异常并通知加载器进行加载
    4.重复步骤 3

6.沙箱安全机制

  • 相关介绍:我们都知道,当你编写一个Java程序,默认是访问该机器的任意资源,比如读取、删除一些文件或者网络操作。当你把程序正式部署到正式的服务器上,系统管理员要为服务器的安全承担责任,那么他可能不确定你的程序会不会访问不该访问的资源,为了消除潜在的安全隐患,有两种方法:
    1.让你的程序在一个限定得账号下运行
    2.利用Java得沙箱机制来限定你的程序不能肆意访问
  • 什么是沙箱机制:在Java中将执行程序分为本地代码和远程代码两种,本地代码默认视为可信,而远程代码则被视为是不受信的。对于授信的本地代码可以访问本地一切资源。而对于非授信的远程代码在早期Java实现中安全依赖于沙箱机制。但如此安全的机制也给程序的扩展功能带来了障碍,当用户希望远程代码访问本地资源时无法实现。
  • 改进:因此针对该问题Java1.1进行了改进,增加了安全策略,允许用户指定代码访问本地资源。在Java1.2中再次进行改进安全机制,增加了代码签名,不论是本地代码还是远程代码都会按照用户的安全策略设定,由类加载器加载到虚拟机中不同权限的运行空间,来实现差异化的代码执行权限控制
  • 什么是域:当前最新的安全机制引入了域(Domain)的概念。虚拟机会把所有代码加载到不同的系统域和应用域。系统域部分专门负责与关键资源进行交互,而应用域则通过系统域的部分代理来对各种需要的资源进行访问。虚拟机中不同的保护域对应不一样的权限。存在不同区域的类文件就具有了当前域的权限
  • 组成沙箱的组件:
    1.字节码校验器(bytecode verifier):确保Java类文件遵循Java语言规范,实现内存保护,但并不是所有类的文件都会经过字节码校验,比如核心类
    2.类加载器:类装载器采用双亲委派机制,其中类装载器在三个方面对Java沙箱器作用:
    1.它防止恶意代码去干涉善意代码
    2.它保护了被信任的类库边界
    3.它将代码归入保护域,确定了代码可以进行那些操作

7.Native关键字

  • 凡事带Native关键字的方法说明Java的作用范围达不到了,回去调用底层C语言的库
  • 会进入本地方法栈调用本地方法库
  • 调用本地方法接口 JNI(扩展Java得使用,配合不同语言的编程语言(C、C++)为Java所用),调用C、C++的程序
  • 他在内存区域中专门开辟了一个标记区域:Native Method Stack,登记native方法
  • 在最终执行的时候加载本地方法库的方法通过JNI

8.栈

  • 先进后出,后进先出
  • 因为栈的进出规则,所以main方法先执行最后结束
  • 线程结束栈内存释放(不存在垃圾回收)
  • 栈里存放八种基本数据类型、对象引用(名称)、实例方法
  • 栈运行原理:栈帧,每个方法执行的同时都会创建一个栈帧,用于存储局部变量表、操作数栈、动态链接、方法出口信息,每一个方法从调用直至执行完毕的过程,就对应着一个栈从进栈到出栈的过程

9.HotSpot

  • HotSpot是一款高性能的Java虚拟机,可以大大提高Java运行的性能
  • 我已写了一个专门讲述HotSpot的专题博客(我的HotSpot专题博客)
http://www.jsqmd.com/news/1301729/

相关文章:

  • 谁需要GEO:生成式AI时代的内容可见性需求全景分析
  • Windows热键冲突终结者:5分钟快速定位快捷键占用程序的终极指南
  • 计算机网络自顶向下学习方法:从应用到协议的系统性掌握
  • 为什么你的AI助手越用越忙?深度拆解时间算法偏差与认知负荷失衡,立即优化
  • 为什么选择ClosedXML:解决.NET中Excel自动化开发的三大核心痛点
  • 从状态机到行为树:BehaviorTree.CPP核心概念与实战指南
  • 大湾区跨境经营企业家,复旦 EMBA 衔接港澳与内地产业资源 - 新闻快传
  • GoldHEN Cheats Manager完整指南:如何在PS4上轻松管理1490+游戏金手指
  • 7 月总结:极简架构的方法论提炼——在复杂系统中保持简单的实践智慧
  • AI 数据分析 7 月全景复盘:从工具链到方法论的全面升级之路
  • 2026孝感短视频运营与GEO本地推广怎么选?别只看报价,先看服务流程和交付边界 - 中国远见品牌企业资讯
  • 告别资源焦虑!猫抓扩展让你轻松保存网页上的任何媒体内容
  • STM32软件I2C驱动OLED与Keil调试实战:从点亮屏幕到掌握调试技巧
  • ArkTS 进阶之道(25):@StorageLink/@StorageProp 应用级状态绑定边界——为啥双向绑定 vs 单向只读
  • 从零搭建本地 RAG 知识库:Ollama + LangChain 处理私有文档的完整实践
  • 无人便利店AI运维崩溃实录(内部故障日志首次公开):从边缘推理延迟到多模态感知漂移的8小时应急修复全流程
  • 【单片机毕业设计推荐】基于 STM32/51 单片机的气压温度采集与蓝牙报警监测系统设计 基于 STM32/51 单片机的环境温压监测及蓝牙终端控制系统设计(022404)
  • 第4篇:PyQt6 桌面应用中大模型 API 客户端的封装与费用控制
  • 微店商品详情API对接实战:权限自适应校验+私有商品兼容+结构化数据落地(Python全新方案)
  • 亦庄哪家宠物医院治疗髌骨脱位效果好
  • 如何免费解锁Switch第三方手柄支持:5个简单步骤实现全平台控制器兼容
  • 前端开发者必掌握的HTTP协议:从基础到实战排查指南
  • 免费开源桌面分区神器:3分钟打造整洁高效工作空间
  • 2026年海港区爱马仕包包回收指南:秦皇岛赵掌柜二奢实体店正规流程与行情解析(185-3117-2838) - 赵掌柜二奢
  • 苏州老房翻新转介绍率排行:老客愿意推荐给朋友的装修公司,致美的口碑积累 - 生活测评君
  • 新疆宣传片
  • 为什么我的 GraphRAG 上线就崩?权限、日志和流程才是真相
  • 猫抓浏览器扩展:3个真实场景告诉你为什么需要这个智能资源嗅探工具
  • 【单片机毕业设计推荐】基于 STM32 或 51 单片机的 TOF 激光测距与 WiFi 远程监测系统设计 基于 STM32 或 51 单片机的激光位移检测与声光报警装置开发(023404)
  • 2026 广德装修口碑榜单|深耕13年,广德智博装饰凭精工与诚信服务收获广德业主一致好评 - 推途云