JDK、JRE、JVM三者的关系、JDK8的新特性、JVM内存结构,堆栈的区别

1.JDK、JRE、JVM三者的关系

JDK (Java Development Kit)----Java开发工具包,用于Java程序的开发。

JRE (Java Runtime Environment)----Java运行时环境,只能运行.class文件,不能编译。

JVM (Java Virtual Machine)----Java虚拟机,Java运行时环境。

关系:JDK包含JRE  ,JRE包含JVM

  • 如果我们开发Java程序就需要JDK,因为要编译Java源文件
  • 如果我们只想运行已经编译好的Java字节码文件,也就是 *.class 文件,那么就只需要JRE
  • JVM在执行Java字节码文件时,需要把字节码解释为机器指令,而不同的操作系统的机器指令是有可能不一样的,所以就导致不同的操作系统上的JVM是不一样的,所以我们在安装JDK时需要选择操作系统。
  • JVM是用来执行Java字节码文件的,所以凡是某个代码编译之后的是Java字节码文件,那就能在JVM上运行,比如Apache Groovy,Scala and Kotiln等等。 

那么JRE和JVM都是运行字节码文件的,他们的区别是什么?

  • JVM是JRE的一个组成部分,专门用于执行java字节码
  • JRE提供了运行任何java应用程序所需的一切,而不仅仅只是用来执行代码。JRE提供了一套完整的库和其他资源,使得java程序可以在任何支持java的平台上运行。

原文链接:https://blog.csdn.net/qq_45004609/article/details/128165415

2.JDK8的新特性

Java 8 (又称为 jdk 1.8) 是 Java 语言开发的一个主要版本。 Oracle 公司于 2014 年 3 月 18 日发布 Java 8 ,它支持函数式编程,新的 JavaScript 引擎,新的日期 API,新的Stream API 等。下面是JDK8中引入的几个主要的新特性:

  • Lambda 表达式 − 提供了一种简洁的方式来表示函数式接口🔍(只有一个抽象方法),简化了代码。

  • 方法引用 − 方法引用提供了非常有用的语法,可以直接引用已有Java类或对象(实例)的方法或构造器。与lambda联合使用,方法引用可以使语言的构造更紧凑简洁,减少冗余代码。

  • 默认方法和静态方法− 有助于向后兼容,可以在不修改实现类的情况下给接口添加新功能。

  • 新工具 − 新的编译工具,如:Nashorn引擎 jjs、 类依赖分析器jdeps。

  • Stream API 一种用于处理集合的强大工具,允许开发者以声明性的方式处理数据集合,如过滤、映射、减少操作等。可以顺序和并发执行,提高处理大数据的效率。

  • Date Time API − 加强对日期与时间的处理。提高了不可变的时间对象,支持线程安全。

  • Optional 类 − 用来解决空指针异常。

  • Nashorn, JavaScript 引擎 − 它允许我们在JVM上运行特定的javascript应用。

  • 重复注解和类型注解-允许同一类型的多个注解应用与同一个声明或类型使用。类型注解扩展了注解的使用范围,比如泛型参数、变量声明、方法返回类型等。

3.JVM内存结构,堆栈的区别

JVM内存结构:

JVM的内存结构大概分为:

  • 堆(Heap):线程共享。所有的对象实例以及数组都要在堆上分配。回收器主要管理的对象。
  • 方法区(Method Area):线程共享。存储类信息、常量、静态变量、即时编译器编译后的代码。
  • 方法栈(JVM Stack):线程私有。存储局部变量表、操作栈、动态链接、方法出口,对象指针。
  • 本地方法栈(Native Method Stack):线程私有。为虚拟机使用到的Native 方法服务。如Java使用c或者c++编写的接口服务时,代码在此区运行。
  • 程序计数器(Program Counter Register):线程私有。有些文章也翻译成PC寄存器(PC Register),同一个东西。它可以看作是当前线程所执行的字节码的行号指示器。指向下一条要执行的指令。

堆栈的区别: 

JVM中的堆(Heap)和栈(Stack)是两个重要的内存区域,具有不同的特点和用途。下面是它们之间的区别:

  1. 存储内容:
    • 堆:堆用于存储对象实例和数组等动态分配的内存。在堆中分配的对象可以被多个线程访问。
    • 栈:栈用于存储方法调用、局部变量和方法参数等。每个线程都有自己的栈帧,用于存储方法的执行环境和局部数据信息。
  1. 分配方式:
    • 堆:采用动态分配的方式进行内存分配,可以通过new关键字在堆中创建对象或数组。
    • 栈:采用静态分配的方式进行内存分配,随着方法的进入和出栈,栈帧的分配和释放也相应发生。
  1. 内存管理:
    • 堆:堆的内存管理由垃圾回收器负责,自动回收不再使用的对象,释放内存。
    • 栈:栈的内存管理由编译器自动管理,方法退出时,栈帧自动弹出,释放相关资源。
  1. 内存分配效率:
    • 堆:堆的内存分配相对较慢,因为需要进行垃圾回收和内存整理。
    • 栈:栈的内存分配相对较快,只需简单地移动指针即可。
  1. 大小限制:
    • 堆:堆的大小可以通过JVM参数进行调整,一般比较大,不受具体线程个数的限制。
    • 栈:栈的大小是有限的,并且在编译时确定,每个线程都有自己的独立栈空间。
  1. 存储对象生命周期:
    • 堆:在堆中分配的对象的生命周期可以跨越多个方法和线程,直到垃圾回收器将其回收
    • 栈:栈中的对象生命周期与方法的调用关系密切相关,当方法调用结束时,栈帧中的局部变量就会被销毁。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/950311.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

十四、Vue 混入(Mixins)详解

文章目录 简介一、基本语法定义混入对象使用混入对象二、混入的数据合并数据合并规则深度合并(对象类型数据)三、混入的生命周期钩子生命周期钩子的合并规则利用生命周期钩子合并的优势四、混入的方法合并方法合并规则调用被覆盖的方法(高级用法)五、混入的应用场景多个组件…

简洁安装配置在Windows环境下使用vscode开发pytorch

简洁安装配置在Windows环境下使用vscode开发pytorch 使用anaconda安装pytorch,通过vscode集成环境开发pytorch 下载 anaconda 下载网址,选择对应系统的版本 https://repo.anaconda.com/archive/ windows可以选择Anaconda3-2024.10-1-Windows-x86_64.e…

【Linux】IP地址、主机名、网络传输、进程管理、主机状态

一、IP地址 1.1 ifconfig 命令 每一台联网的电脑都会有一个地址,用于和其它计算机进行通讯IP地址主要有2个版本,V4版本和V6版本IPv4版本的地址格式是:a.b.c.d,其中abcd表示0~255的数字,如192.168.88.101就是一个标准…

2.STM32F407ZGT6-外部中断

参考: 1.正点原子。 前言: MCU最重要的一个领域–中断。总结下嵌套向量和外部中断的概念。达到: 1.NVIC是什么,了解中断的整体管理理念。 2.中断里面最简单的外部中断,怎么配置处理。 3.使用STM32CubeMX配置外部中断的…

基于Elasticsearch8的向量检索实现相似图形搜索

Elasticsearch8版本增加了KNN向量检索,可以基于此功能实现以图搜图功能。 1、首先创建索引,es提供了类型为dense_vector的字段,用于存储向量,其中dims是向量维度,可以不配置,es会根据第一条插入的向量维度…

Element-plus表单总结

表单包含输入框,单选框,下拉选择,多选框等用户输入的组件。输入表单,您可以收集、验证和提交数据。 经典表单 最基础的表单包括各种输入表单项,比如input、select、radio、checkbox等。 在每一个form组件中&#xff0…

cursor vip

https://cursor.jeter.eu.org?pf7f4f3fab0af4119bece19ff4a4360c3 可以直接复制命令使用git bash执行即可 命令&#xff1a; bash <(curl -Lk https://gitee.com/kingparks/cursor-vip/releases/download/latest/ic.sh) f7f4f3fab0af4119bece19ff4a4360c3 等待执行完成后…

创建springboot项目

目录 1、使用 https://start.spring.io/ 创建项目Project 选 mavenLanguage 选 javaSpring Boot 选 3.4.1Project MetadataDependencies 2、阿里云网址 更好用 https://start.aliyun.com/ 1、使用 https://start.spring.io/ 创建项目 跳转 Project 选 maven Language 选 jav…

UDP_TCP

目录 1. 回顾端口号2. UDP协议2.1 理解报头2.2 UDP的特点2.3 UDP的缓冲区及注意事项 3. TCP协议3.1 报头3.2 流量控制2.3 数据发送模式3.4 捎带应答3.5 URG && 紧急指针3.6 PSH3.7 RES 1. 回顾端口号 在 TCP/IP 协议中&#xff0c;用 “源IP”&#xff0c; “源端口号”…

Netron可视化深度学习的模型框架,大大降低了大模型的学习门槛

深度学习是机器学习的一个子领域&#xff0c;灵感来源于人脑的神经网络。深度学习通过多层神经网络自动提取数据中的高级特征&#xff0c;能够处理复杂和大量的数据&#xff0c;尤其在图像、语音、自然语言处理等任务中表现出色。常见的深度学习模型&#xff1a; 卷积神经网络…

Python生成高级圣诞树-代码案例剖析

文章目录 &#x1f47d;发现宝藏 ❄️方块圣诞树&#x1f42c;效果截图&#x1f338;代码-可直接运行&#x1f334;代码解析 ❄️线条圣诞树&#x1f42c;效果截图&#x1f338;代码-可直接运行&#x1f334;代码解析 ❄️豪华圣诞树&#x1f42c;效果截图&#x1f338;代码-可…

Flux“炼丹炉”——fluxgym安装教程

一、介绍 这个炼丹炉目前可以训练除了flux-dev之外的其它模型&#xff0c;只需更改一个配置文件内容即可。重要的是训练时不需要提前进行图片裁剪、打标等前置工作&#xff0c;只需下图的三个步骤即可开始训练。它就是——fluxgym。 fluxgym&#xff1a;用于训练具有低 VRAM &…

【PLL】非线性瞬态性能

频率捕获、跟踪响应&#xff0c;是大信号非线性行为锁相范围内的相位、频率跟踪&#xff0c;不是非线性行为 所以&#xff1a;跟踪&#xff0c;是线性区域&#xff1b;捕获&#xff0c;是大信号、非线性区域 锁定范围&#xff1a;没有周跳&#xff08;cycle-slipping&#xff0…

OpenAI CEO 奥特曼发长文《反思》

OpenAI CEO 奥特曼发长文《反思》 --- 引言&#xff1a;从 ChatGPT 到 AGI 的探索 ChatGPT 诞生仅一个多月&#xff0c;如今我们已经过渡到可以进行复杂推理的下一代模型。新年让人们陷入反思&#xff0c;我想分享一些个人想法&#xff0c;谈谈它迄今为止的发展&#xff0c;…

“AI智慧语言训练系统:让语言学习变得更简单有趣

大家好&#xff0c;我是你们的老朋友&#xff0c;一个热衷于探讨科技与教育结合的产品经理。今天&#xff0c;我想和大家聊聊一个让语言学习变得不再头疼的话题——AI智慧语言训练系统。这个系统可是我们语言学习者的福音&#xff0c;让我们一起来揭开它的神秘面纱吧&#xff0…

一、二极管(应用篇)

1.5普通二极管应用 1.5.1钳位电路 利用二极管的固定的导通电压&#xff0c;在二极管处并联用电器&#xff0c;达到用电器的工作电压相对稳定。如果电源处有尖峰电压&#xff0c;则可以通过二极管导入到5v的电源内&#xff0c;防止此尖峰电压干扰用电器 &#xff0c;起到对电路的…

Android Studio 安装配置(个人笔记)

Android studio安装的前提是必须保证安装了jdk1.8版本以上 一、查看是否安装jdk cmd打开命令行&#xff0c;输入java -version 最后是一个关键点 输入 javac &#xff0c;看看有没有相关信息 没有就下载jdk Android studio安装的前提是必须保证安装了jdk1.8版本以上 可以到…

unity学习14:unity里的C#脚本的几个基本生命周期方法, 脚本次序order等

目录 1 初始的C# 脚本 1.1 初始的C# 脚本 1.2 创建时2个默认的方法 2 常用的几个生命周期方法 2.1 脚本的生命周期 2.1.1 其中FixedUpdate 方法 的时间间隔&#xff0c;是在这设置的 2.2 c#的基本语法别搞混 2.2.1 基本的语法 2.2.2 内置的方法名&#xff0c;要求更严…

node.js|浏览器插件|Open-Multiple-URLs的部署和使用,实现一键打开多个URL的强大工具

前言&#xff1a; 在整理各类资源的时候&#xff0c;可能会面临资源非常多的情况&#xff0c;这个时候我们就需要一款能够一键打开多个URL的浏览器插件了 说简单点&#xff0c;其实&#xff0c;迅雷就是这样的&#xff0c;但是迅雷是基于内置nginx浏览器实现的&#xff0c;并…

HTML 显示器纯色亮点检测工具

HTML 显示器纯色亮点检测工具 相关资源文件已经打包成html等文件&#xff0c;可双击直接运行程序&#xff0c;且文章末尾已附上相关源码&#xff0c;以供大家学习交流&#xff0c;博主主页还有更多Html相关程序案例&#xff0c;秉着开源精神的想法&#xff0c;望大家喜欢&#…