热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

JAVA中的JVMJRMJDK分别是什么意思?

1.什么是JVM?JVM最初的时候,JVM是为了实现跨平台运行,就是一次开发,到处运行.JDK(JavaSEDevelopmentKit),Java标准开发包&#x

1.什么是JVM?


JVM最初的时候, JVM 是为了实现跨平台运行, 就是一次开发, 到处运行.
JDK(Java SE Development Kit),Java标准开发包,它提供了编译、运行Java程序所需的各种工具和资源,包括Java编译器、Java运行时环境,以及常用的Java类库等。

JRE( Java Runtime Environment) 、Java运行环境,用于解释执行Java的字节码文件。普通用户而只需要安装 JRE(Java Runtime Environment)来运行 Java 程序。而程序开发者必须安装JDK来编译、调试程序。

JVM(Java Virtual Mechinal),Java虚拟机,是JRE的一部分。它是整个java实现跨平台的最核心的部分,负责解释执行字节码文件,是可运行java字节码文件的虚拟计算机。所有平台的上的JVM向编译器提供相同的接口,而编译器只需要面向虚拟机,生成虚拟机能识别的代码,然后由虚拟机来解释执行。

JDK(Java Development Kit):指的是Java开发工具集。JDK是整个Java的核心,包括了Java基础类库、Java运行环境(JRE)和Java开发工具。是做Java开发必须要安装的。

三者的关系如下图:

现在有很多的操作系统, 不同的操作系统的API差距很大,
还有很多硬件(CPU系统), 不同的CPU也不太一样.
不同的平台之间, 差异很大, JVM就屏蔽了系统和硬件的差异.
JVM相当于是一个"翻译官"
举个例子:
你去好几个国家旅游,每个国家都说不同的语言, 假设你只会说中文, 这时你需要找一个翻译会很多种语言, 这样的人不好找, 但是你可以找每去一个国家就找一个翻译:
在韩国, 你需要找一个翻译, 他懂韩语和中文;
在美国, 你需要找一个翻译, 他懂英语和中文;

JVM 就相当于一个"翻译官", 在不同的地方, 他的JVM 是不一样的, 就像是在windows上和linux上的JVM 是不一样的程序.
虽然他的跨平台能力也很强, 但是也有缺点, 就是效率变低了, 相当于你自己说话和别人交流和有个翻译翻译出来的和别人交流的效果是不一样的.

一个JVM中主要包含:

类加载器
执行引擎(解释执行字节码的)
动态内存管理(和GC有关的)
还有其他的一些…
2.JVM的内存区域划分
JVM内存来自与操作系统, JVM启动后会从操作系统申请一大块内存, 再针对这块内存进行划分出一些区域.
JVM内存中主要包含:

堆 new的对象
栈 (其实是JVM栈和本地方法栈) 局部变量
方法区 加载好的类和静态成员
程序计数器 存的是地址, 描述当前线程接下来要执行的指令在内存的那个地方
jdk1.8之前运行常量池在方法区中, 1.8之后运行常量池在堆中
在一个java进程中, 可能包含多个线程, 多个线程共用同一份堆和方法区, 每个线程又有自己的栈和程序计数器

在两个进程中的, 不共享同一个堆和方法区

问题1: 引用类型的一个变量是在堆上还是栈上?

其实决定一个变量是在堆还是栈, 和是基础类型还是引用类型无关, 看的是你的变量是局部变量还是成员变量还是静态变量.
局部变量就在栈上,
成员变量就在堆上,
静态变量就在方法区上.

问题2: 基础数据类型和引用数据类型的理解?

引用(类似于指针)保存的是地址, 我们可以把内存想象成是个大的走廊, 走廊上有很多的房间, 每个房间都占有一个字节, 且每个房间都有一个房间号, 这个房间号就相当于是一个地址, 你就可以凭借这个房间号(地址)找到这个房间.
基础类型的变量中保存的是就是值,
引用类型的变量对应的内存空间保存的是另一个内存空间的地址, 而另一个内存空间保存的是对象本身.
 

 

就像上图所画的那样, 基础类型的变量t的对应内存中保存的是就是值10, 而引用变量t 对应的内存区域存的是对象Test() 的地址0x1000.

纯纯自己理解++++在网上摘录的,希望可以帮到大家!!!!!!!!!


推荐阅读
  • 本文通过复旦大学自然语言处理课程中的一个具体案例,详细解析了中文词汇分割技术的实现方法。该案例利用Java编程语言,结合词典和算法模型,展示了如何高效地进行中文文本的词汇分割,为相关研究和应用提供了宝贵的参考。 ... [详细]
  • 本文详细探讨了 Java 中定义宏的方法,并与 C++ 中的 `#define` 用法进行了对比。通过具体示例,深入解析了两者在预处理阶段的不同机制及其应用场景,帮助开发者更好地理解和选择合适的宏定义方式。 ... [详细]
  • 在JSP页面中调用客户端本地应用程序(例如 `C:\netterm.exe`)时,可以通过使用 `Runtime.getRuntime().exec("c:\\netterm.exe")` 实现。然而,这种方法仅在服务器端有效,若要实现在客户端执行本地程序,需要采用其他技术手段,如Java Applet或ActiveX控件,以确保安全性和兼容性。 ... [详细]
  • 在Linux/WSL环境中,本文对Shell任务的并行处理进行了详细的测试与分析。通过多种并行处理技术,如GNU Parallel和xargs,探讨了如何有效提升任务执行效率和系统资源利用率。实验结果表明,合理配置并行参数能够显著缩短任务完成时间,提高系统整体性能。此外,文章还介绍了Shell脚本编写的基本原则和最佳实践,为读者提供了实用的参考。 ... [详细]
  • 压缩工具全面对比:Bandizip、7-Zip与WinRAR,哪一款最符合你的需求?
    压缩工具全面对比:Bandizip、7-Zip与WinRAR,哪一款最符合你的需求? ... [详细]
  • 本文将详细介绍如何利用JMeter高效执行API接口测试,涵盖JMeter的基础介绍、安装方法、中文环境配置、主要元件及其作用域和执行顺序等内容,并分享一系列实用的测试技巧,帮助读者全面掌握JMeter接口测试的全过程。 ... [详细]
  • EasyUI作为一种高效的前端框架,显著简化了JavaScript代码的编写,提升了开发效率。在构建窗口应用程序时,首先需要引入EasyUI所需的JS文件和CSS样式表。由于EasyUI依赖于jQuery,因此还需确保正确加载jQuery库。通过这种方式,开发者能够快速实现界面组件的动态交互与美观布局,为用户提供更加流畅的使用体验。 ... [详细]
  • Webpack与Babel的配置详解及优化策略深入探讨了这两个工具在现代前端开发中的应用。Babel作为一款强大的JavaScript编译器,能够将最新版的JavaScript代码转换为广泛兼容的版本,从而突破浏览器对ES规范的支持限制,确保开发者可以无缝使用最新的语言特性。本文不仅介绍了如何高效配置Webpack与Babel,还提供了多种优化策略,以提升构建性能和代码质量。 ... [详细]
  • 综合实训 201521440015
    Chinesepeople’publicsecurityuniversity网络对抗技术实验报告实验五综合渗透学生姓名常泽远年级15区队4指导教师高见信息技术与网络安全学院2018 ... [详细]
  • 在CentOS虚拟环境中部署Java开发套件(JDK)的详细步骤,不仅适用于Linux系统,也适用于Windows系统的Java开发。本文将详细介绍如何在CentOS虚拟机中安装和配置JDK,包括环境准备、下载JDK安装包、解压安装、配置环境变量等关键步骤。通过本文的指导,开发者可以轻松完成JDK的部署,为后续的Java应用开发打下坚实的基础。 ... [详细]
  • 在 Linux 环境下,深入探讨 GTK+3.0 的高级开发技巧,涵盖组件定制、事件处理及多线程应用等核心内容,帮助开发者提升应用界面的交互性和性能。 ... [详细]
  • 通过Apache Commons FileUpload组件,可以根据具体应用需求实现多样化的文件上传功能。在基本应用场景中,开发者可以通过调用单一方法来解析Servlet请求,从而轻松处理文件上传任务。此外,该组件还提供了丰富的配置选项和高级功能,支持大文件上传、多文件并发处理等复杂场景,显著提升了文件上传的效率和可靠性。 ... [详细]
  • 博主通常比较偏爱前端工具,而开发者和设计师则比较关注对站点的处理——他们必须从后端确保那个站点的脚本可以正常运行。有时,出现问题之后很难发现。通常&#x ... [详细]
  • Joomla!软件介绍【Joomla!概括介绍】国外相当知名的内容管理系统。【Joomla!基本介绍】Joomla!是一套在国外相当知名的内容管理系统(ContentManagem ... [详细]
  • 【原创】《Linux设备驱动程序》学习之循序渐进---调试技术第四章---调试技术内核编程带有它自己的,独特的调试挑战性.内核代码无法轻易地在一个调试器下运行,也无法轻易的被跟踪,因为 ... [详细]
author-avatar
手机用户2502881415
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有