JDK,JRE,JVM是什么?

弄懂JDK、JRE和JVM到底是什么 首先是JDK JDK(Java Development Ki

JDK,JRE,JVM是什么?

弄懂JDK、JRE和JVM到底是什么

首先是JDK
JDK(Java Development Kit) 是 Java 语言的软件开发工具包(SDK)。在JDK的安装目录下有一个jre目录,里面有两个文件夹bin和lib,在这里可以认为bin里的就是jvm,lib中则是jvm工作所需要的类库,而jvm和 lib合起来就称为jre。
然后我们来看JRE
JRE(Java Runtime Environment,Java运行环境),包含JVM标准实现及Java核心类库。JRE是Java运行环境,并不是一个开发环境,所以没有包含任何开发工具(如编译器和调试器)
最后JVM也一目了然了
JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。

由上图一目了然:
JDK是整个Java的核心,包括了Java运行环境JRE、Java工具和Java基础类库。JRE是运行JAVA程序所必须的环境的集合,包含JVM标准实现及Java核心类库。JVM是整个java实现跨平台的最核心的部分,能够运行以Java语言写的程序。
JVM体系结构与运行原理:
Java语言写的源程序通过Java编译器,编译成与平台无关的‘字节码程序’(.class文件,也就是0,1二进制程序),然后在OS之上的Java解释器中解释执行。

JVM整个类加载过程的步骤:

  1.   装载
    

装载过程负责找到二进制字节码并加载至JVM中,JVM通过类名、类所在的包名通过ClassLoader来完成类的加载,同样,也采用以上三个元素来标识一个被加载了的类:类名+包名+ClassLoader实例ID。

  1.   链接
    

链接过程负责对二进制字节码的格式进行校验、初始化装载类中的静态变量以及解析类中调用的接口、类。

完成校验后,JVM初始化类中的静态变量,并将其值赋为默认值。

最后对类中的所有属性、方法进行验证,以确保其需要调用的属性、方法存在,以及具备应的权限(例如public、private域权限等),会造成NoSuchMethodError、NoSuchFieldError等错误信息。

  1.   初始化
    

初始化过程即为执行类中的静态初始化代码、构造器代码以及静态属性的初始化,在四种情况下初始化过程会被触发执行:

调用了new;

反射调用了类中的方法;

子类调用了初始化;

JVM启动过程中指定的初始化类。

ClassLoader抽象类的几个关键方法:

(1) loadClass

此方法负责加载指定名字的类,ClassLoader的实现方法为先从已经加载的类中寻找,如没有则继续从parent ClassLoader中寻找,如仍然没找到,则从System ClassLoader中寻找,最后再调用findClass方法来寻找,如要改变类的加载顺序,则可覆盖此方法

(2) findLoadedClass

此方法负责从当前ClassLoader实例对象的缓存中寻找已加载的类,调用的为native的方法。

(3) findClass

此方法直接抛出ClassNotFoundException,因此需要通过覆盖loadClass或此方法来以自定义的方式加载相应的类。

(4) findSystemClass

此方法负责从System ClassLoader中寻找类,如未找到,则继续从Bootstrap ClassLoader中寻找,如仍然为找到,则返回null。

(5) defineClass

此方法负责将二进制的字节码转换为Class对象

(6) resolveClass

此方法负责完成Class对象的链接,如已链接过,则会直接返回。

JVM运行时数据区:
第一块:PC寄存器

PC寄存器是用于存储每个线程下一步将执行的JVM指令,如该方法为native的,则PC寄存器中不存储任何信息。

第二块:JVM栈

JVM栈是线程私有的,每个线程创建的同时都会创建JVM栈,JVM栈中存放的为当前线程中局部基本类型的变量(java中定义的八种基本类型:boolean、char、byte、short、int、long、float、double)、部分的返回结果以及Stack Frame,非基本类型的对象在JVM栈上仅存放一个指向堆上的地址

第三块:堆(Heap)

它是JVM用来存储对象实例以及数组值的区域,可以认为Java中所有通过new创建的对象的内存都在此分配,Heap中的对象的内存需要等待GC进行回收。

第四块:方法区域(Method Area)

(1)在Sun JDK中这块区域对应的为PermanetGeneration,又称为持久代。

(2)方法区域存放了所加载的类的信息(名称、修饰符等)、类中的静态变量、类中定义为final类型的常量、类中的Field信息、类中的方法信息,当开发人员在程序中通过Class对象中的getName、isInterface等方法来获取信息时,这些数据都来源于方法区域,同时方法区域也是全局共享的,在一定的条件下它也会被GC,当方法区域需要使用的内存超过其允许的大小时,会抛出OutOfMemory的错误信息。

第五块:运行时常量池(Runtime Constant Pool)

存放的为类中的固定的常量信息、方法和Field的引用信息等,其空间从方法区域中分配。

第六块:本地方法堆栈(Native Method Stacks)

JVM采用本地方法堆栈来支持native方法的执行,此区域用于存储每个native方法调用的状态。

备注:转载自雨日微风的博客

发布者:admin,转转请注明出处:http://www.yc00.com/web/1690700299a401536.html

相关推荐

  • win10系统下载并配置JDK环境变量

    系统:win 10 JDK版本:jdk1.8.0_202 文章目录 下载jdk安装jdk配置环境变量检验最重要的一点下载jdk 推荐大家去官网下载,下载链接戳我。大家可以根据自己的系统与需求进行下载,需要注意的是x86代表32位,x6

    9月前
    250
  • Windows下JDK安装与环境变量配置

    文章目录 每日一句正能量前言安装步骤配置环境变量验证环境变量是否配置成功后记 每日一句正能量 生命,就像一场永无休止的苦役,不要惧怕和拒绝困苦,超越困苦,就是生活的强者。任何经历都是一种累积,累积的越多,人就越成熟;经历的越多,生命就越有厚

    9月前
    260
  • Windows下卸载与安装jdk

    一、卸载JDK 先找到配置的环境变量,通过路径找到相对应的位置,删除文件,再删除环境里面的 1、通过环境找到位置进行删除 2、系统变量下的:&

    9月前
    220
  • windowslinux下JDK安装配置教程

    JDK安装配置教程 前言 一、jdk下载1. 本人资源下载2. 官网下载2.1 进入java下载页2.2 选择版本并下载 二、windows1. 解压版(最简单、快捷)1.1 版本信息1.2 解压

    9月前
    150
  • JDK Tomcat MySQL一键安装

    文章目录 材料准备免安装版JDK免安装版Tomcat免安装版MySQL微软Visual C运行库组件打包工具Inno Setup 统一目录创建所需文件(先创建好清楚整体流程)整体结构文件内容测试

    9月前
    200
  • Windows7下Java环境搭建(JDK环境变量配置)

    Windows7下面Java环境的搭建是十分简单的,到oracle官网下载JDK安装包,安装在制定目录即可,最好把jdk路径和jre路径都放在同一个路径下。 这里主要是一下

    9月前
    200
  • windows7系统下JDK的安装及环境配置

    一:JDK的安装 1.   首先上甲骨文公司的官方网站下载JDK的安装包,根据自己电脑的操作系统选择正确的版本下载。不知道下载地址的同学可以直接点击链接:http:www

    9月前
    150
  • Java入门级教学(IDEA的下载与安装与JDK的环境配置)

    1.JDK的下载与安装 jdk的安装链接分为不同操作系统如下,点击链接跳转下载页面: windows操作系统JDK下载链接(按住键盘ctrl键单击链接即可): 链接7天有效&#xff

    8月前
    410
  • 在Windows 10系统下安装JDK

    1、安装准备(1)去官网(https:www.oracle)下载JDK,本次下载的是最新版本,具体下载步骤如下:①进入官网后,如果不熟悉英

    7月前
    150
  • Windows使用JEnv实现JDK多版本管理

    Windows使用JEnv实现JDK多版本管理 JEnv安装Jenv命令 JEnv安装 JEnv是一个帮助我们管理多个JDK安装的工具,并将每个代码库配置为使用特定的JDK版本,而不必改变JAV

    7月前
    190
  • jdk(WindowsMac含M1M2 Arm原生JDK)安装,附各个版本JDK下载链接

    文章目录 安装建议及注意事项1、JDK下载1.1 官方下载1.2 JDK 国内镜像1.3 Azul JDK(支持ARM原生:苹果M1、M2系列) 2、Widows系统安装及配

    6月前
    420
  • Win XP下安装jdk

    一直以来安装jdk都没有出现过问题,但是今天安装jdk8的时候就出现意外了,现在使用的系统是win xp,双击安装没有反应,安装其他的应用是没有问题的,很是令人费解。 按照网上的解释进行了处理也不行,重新下

    6月前
    180
  • windows 10 系统JDK版本互换(1.8换为1.7)亲测可行操作

    windows 10 系统JDK1.8和JDK1.7之间互相切换问题 环境: 1、系统:win10; 2、当前JDK版本:(1)jdk1.7.0_51;(2)默认为jdk1.8.0_60;状况: 因特殊需求,现需将默认的JDK1.8切

    6月前
    370
  • eclipse导入一个项目之后没有JRE System Library怎么办?

    导入一个项目时出现 Multiple markers at this line- The type java.lang.Object cannot be resolved. It is indirectly referenced from

    5月前
    450
  • jdk 7 官方下载

    jdk7下载-jdk 7 官方下载 产品文件说明  大小 JDK7官方下载地址jdk7 for Windows x86         84.04 MB  jdk-7u2-windows-i586.exe jdk7 for

    1月前
    210
  • JDK的下载及其安装

    一、下载jdk 首先我们需要到Oracle官网下载jdk 官网地址:甲骨文官网 点击右侧的 download Java 跳转 然后将网页往下拉 在这里可以看到有  L&#xff49

    1月前
    240
  • JAVA的JDK在哪里下载,如何下载?

    一:jdk的下载和安装 1、可以到官网去 下载,是开源的 下载地址:http:www.oracletechnetworkjavajavase downloadsjdk8-down

    1月前
    210
  • Windows、Linux安装JDK及环境变量配置

    文章目录一、前言二、Windows下安装JDK与环境配置1、Windows安装JDK2、环境变量配置3、检验环境变量配置三、Linux下安装JDK与环境变量配置1、yum命令openjdk安装2、apt命令安装openjdk3、apt源安装

    1月前
    130
  • JDK中没有Servlet包的解决方法

    原因javax属于Java EE的包,而我们平时下载的是Java SE解决办法进入Tomcat中lib文件夹,解压servlet-api.jar,然后把其中的文件夹ja

    1月前
    210
  • Jenkins的jdk和maven配置

    目录传送门前言一、概念二、JDK的配置三、Maven配置四、环境变量配置五、坑传送门 SpringMVC的源码解析(精品) Spring6的源码解析(精品&#xff

    1月前
    180

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信