JVM长篇-—jvm基础知识

39 篇文章 0 订阅
订阅专栏

目录

1、Java的跨平台性

2、JVM概念

3、JRE/JDK/JVM介绍

4、JVM的生命周期

5、JVM的工作过程

5.1、Java代码如何执行的

5.2、JVM工作过程

6、类加载子系统

7、运行时数据区域

7.1、执行引擎

8、类加载机制

8.1、类加载时机

8.2、类加载器


1、Java的跨平台性

JVM是用C/C++开发,生成机器码,不能跨平台,不同的平台需要安装不同的JVM。

Java源代码编译会生成字节码.class文件,JVM负责将字节码文件翻译成特定平台下的机器码进行执行,实现了”一处编译、到处运行“的目的

实现跨平台是Java程序,不是JVM

2、JVM概念

JVM(Java Virtual Machine)即Java虚拟机

JVM是Java的核心和基础,在java编译器和系统之间虚拟出来的机器,是利用软件方法实现了计算机下层的操作系统和硬件平台,可以在上面执行的java的字节码程序

具有自己的硬件架构,比如处理器、堆栈以及指定系统,使用JVM的目的是上Java能支持与操作系统无关可以跨平台的特征。

3、JRE/JDK/JVM介绍

JVM:是一个虚拟出来的计算机,通过软件实现在一个实际的计算机上模拟各种计算机 的功能,它是属于JRE的一部分

JRE(Java Runtime Environment,Java运行环境)也称之为Java平台,所有的Java程序都在JRE下才能运行

JDK(Java Development Kit,Java开发工具包),程序开发过程中需要编译,调试java程序用到的工具包,JDK的工具包也是Java程序,也需要在JRE上运行,为了保证JDK的独立性和完整性,在JDK的安装过程中,JRE也是安装的一部分,所以,在JDK的安装目录下有一个jre目录,存放JRE文件

4、JVM的生命周期

java虚拟机实例通过调用某个初始类的main方法来运行Java程序,main()必须是公有的(public)、静态的(static)、返回值为void,并且接收一个字符串数组作为参数,任何拥有面方法的类都可以作为Java程序的运行起点

当前mian方法程序执行结束,JVM实例也随之消亡

5、JVM的工作过程

5.1、Java代码如何执行的

5.2、JVM工作过程

加载类的整个过程分成3个子系统:

类加载系统(ClassLoader SubSystem)

运行时数据区(RUntime Data Area)

执行引擎(Execution Engine)

6、类加载子系统

Java类状态过程包含三部分,装载、链接、初始化

装载:主要功能完成是类加载,通过BootStrap ClassLoader、Extension classLoader及Application ClassLoader加载器和双亲委派模型完成特定类加载

链接:

验证:字节码验证器将验证生成的字节码是否正确,如果验证失败,将得到验证失败提示

准备:对于所有静态变量,内存将分配内存空间并给定初始值

解析:所有的符号引用转化为方法区内的原始引用

初始化:

将静态变量赋予原始值

7、运行时数据区域

方法区:类级别数据、静态编码 ,线程共享区域

堆区:创建对象及数组存储位置,线程共享区域

虚拟机栈: 线程私有区域

本地方法栈:存储是调用的额native的方法,线程私有区域

程序计数器:指示代码执行的位置,线程私有的区域

7.1、执行引擎

执行引擎将运行时数据区域存储的字节码交由执行引擎执行,执行引擎读取字节码并逐个执行

Object o = new Object();

8、类加载机制

Java中类加载是需要加载编译之后的.class的字节码文件,JVM虚拟机通过解释器能够将字节码解释为特定机器上的机器码

Java源代码 ->编译器->字节码->JVM->机器码

8.1、类加载时机

虚拟机规范中严格规定6种情况必须立即对类加载并初始化

  • 创建对象实例,new 对象的时候,会对类初始化,前提是类没有被初始化过
  • 通过class文件反射创建对象
  • 调用类的静态属性或给静态属性赋值 XXXX.instance;
  • 调用类的静态方法
  • 虚拟机启动时被标识为启动的类:比如main方法所在类
  • 初始化一个类的子类,使用子类的时候需要先初始化父类 super();

注:Java的类的加载是动态的,并不会一次性将所有的类全部加载后再执行,保证程序运行的基本类完全加载JVM中,至于其他类,在需要时在加载,可以节省内存

不会被加载的情况:

  • 在同一个类记载其下面一个类只会被初始化一次,如果已经被初始化了就不必在被初始化
  • 在编译是能确定下来的静态变量,不会对类进行初始化,比如final修饰的静态变量

8.2、类加载器

负责将字节码加载到内存

8.3、类加载器

JVM中提供了3种类记载器:各自职责:

BootStrap ClassLoader:负责加载jre/lib/rt.jar里所有的class,由C++实现的,不是ClassLoader的子类

Extension classLoader:负责加载扩展功能的jar包,指jre/lib/*.jar或者是-Djava.ext.dirs指定目录下的jar

Application ClassLoader:负责加载classpath中指定的jar及目录中的class

8.4、双亲委派模型

8.5、双亲委派模型的工作过程如下

1、当前类加载器从自己已经加载的类中查询是否此类已经加载,如果已经加载则返回原来已经加载的类。

2、如果没有找到,就去委托父类加载器去加载。父类加载器也会采用同样的策略,查看自己已经加载过的类中是否包含这个类,有就返回,没有就委托其父类去加载,直到委托到启动类加载器为止。因为如果父类加载器为空了,就代表使用启动类加载器作为父加载器去加载该类。(也就是看到的String类加载器为null)

3、如果启动类加载器加载失败,就会使用扩展类加载器来尝试加载,继续失败则会使用AppClassLoader来加载,继续失败就会抛出一个异常ClassNotFoundException。

双亲委派的好处:

1、避免类的重复加载

2、安全性,避免用户自己编写的类动态的替换Java的核心类。

JVM基础知识
08-24
Java虚拟机中,数据类型可以分为两类:基本类型和引用类型。基本类型的变量保存原始值,即:他代表的值就是数值本身;而引用类型的变量保存引用值。“引用值”代表了某个对象的引用,而不是对象本身,对象本身存放在这个引用值所表示的地址的位置。 基本类型包括:byte、short、int、long、char、float、double、Boolean、returnAddress 引用类型包括:类类型、接口类型、数组
Android 面试准备进行曲(Java基础篇) v1.3
魔都大白
09-03 374
Java 基础JVM内存管理 Java 基础 jvm 参考文章 JVM内存管理 JVM执行Java程序的过程:Java源代码文件(.java)会被Java编译器编译为字节码文件(.class),然后JVM中的类加载器加载各个类的字节码文件,加载完毕之后,交由JVM执行引擎执行。 运行时数据区被分为线程私有数据区和线程共享数据区两大类: 线程私有数据区包含:程序计数器、虚拟机栈、本地方法栈 线程...
JVM 基础知识
bage2014的博客
05-10 171
JVM 基础 知识点汇总github地址 https://github.com/bage2014/interview JVM理论基础 内存划分 JVM规范,将内存分为 程序计数器、Java栈,也叫虚拟机栈、本地方法栈、方法区、堆 程序计数器 程序指令保存,从当前指令到下一个指令,从程序计数器获取下一个指令的地址,直到执行所有的指令;线程私有 Java栈(虚拟机栈) 保存方法栈帧,当调用一个方法,...
JVM菜鸟进阶高手之路十(基础知识开场白)
最简单的东西,往往包含了最复杂的实现。
09-05 4859
最近没有什么实战,准备把JVM知识梳理一遍,先以开发人员的交流来谈谈jvm这块的知识以及重要性,依稀记得2、3年前用solr的时候老是经常oom,提到oom大家应该都不陌生,那个时候也并没有从根本仅仅oom,由于对jvm不熟悉,只是去百度,到处都是配置jvm参数的,那个时候啥不懂,直接粘贴,但是并没有解决问题,通过这个就告诉我们作为开发人员也需要对jvm很熟悉才行,问题来了,很多人会说我的代码并没
nginx-upstream-jvm-route-1.15
05-08
nginx-upstream-jvm-route 支持nginx版本1.15 解决nginx: [emerg] invalid parameter "srun_id=tomcat1" 问题
JVM图解-JVM指令-JVM原型图.rar
08-06
JVM图解-JVM指令-JVM原型图.rar
面试总结-JVM .png
04-16
JVM 的运行机制 多线程 JVM 的内存区域 JVM 会创建操作系统的接口创建一个原生线程。JVM 线程和操作系统线程是一一对应的
JVM学习 - 副本.xmind
04-02
本人手打笔记,欢迎来白嫖,学完Jvmjava代码的眼界就不一样了
JVM原理-jvm内存及相关图示
10-07
JVM原理-jvm内存及相关图示
JVM参数-Xms和-Xmx设置
最新发布
05-16
JVM参数-Xms和-Xmx用于设置Java虚拟机的初始堆大小和最大堆大小,具体介绍如下: 1. -Xms: 初始堆大小,即Java虚拟机启动时申请的内存大小。默认值为物理内存的1/64,最小值为1MB。例如,-Xms128m表示初始堆大小为...

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • 史上最全的JVM配置参数大全 19582
  • Redis缓存数据一致性及问题 4374
  • Spring之IOC(Inversion Of Control)-控制反转 4048
  • Junit测试介绍及mybatis的接口绑定方法 3530
  • SQL注入及解决方案 3262

分类专栏

  • 笔记 39篇

最新评论

  • Spring之IOC(Inversion Of Control)-控制反转

    芒格的迷妹: :) 学习到啦表情包

  • 动态SQL,持续更新中.......

    平平无奇小菜鸟。: 可以啦😊

  • 动态SQL,持续更新中.......

    小宜要努力: 你好 可以转载吗 你写的很详细!

  • 史上最全的JVM配置参数大全

    偏食: -XX:+HeapDumpOnOutOfMemoryError 当首次遭遇OOM时执行自定义命令,应该是+号

  • Spring之IOC(Inversion Of Control)-控制反转

    飞翔的宝宝龙: 很努力,加油

大家在看

  • 打卡考勤机,什么牌子考勤机好用
  • 复现GLM4-9B
  • c中野指针在栈区对数据的修改
  • docker-compose入门级实战教程

最新文章

  • ADT和OOP学习心得
  • ConcurrentHashMap
  • 自定义Starter-4
2022年7篇
2021年44篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

深圳SEO优化公司合肥百度爱采购价格嘉兴网站搭建报价巴中seo排名哪家好平凉网络推广多少钱商洛网站优化推广价格重庆seo优化多少钱韶关网络营销价格嘉兴SEO按天扣费价格通辽seo网站推广宝安网站关键词优化公司哈尔滨关键词按天计费推荐开封网站优化价格黄冈网站建设报价邢台网站推广方案多少钱延边模板网站建设公司开封阿里店铺运营多少钱荷坳关键词按天收费公司金昌网站推广方案报价黑河网站搭建公司仙桃企业网站设计多少钱鹰潭外贸网站设计价格丹竹头网站设计公司东营模板网站建设果洛优秀网站设计哪家好焦作seo哪家好常德百度竞价哪家好延安网站推广报价清远模板网站建设推荐保山外贸网站设计价格通辽百度网站优化排名歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化