jvm如何运行以及内存如何分配

瑞萨RA6M4平台I2C驱动移植实战:MPU6050传感器集成指南 本文详细介绍了在瑞萨RA6M4平台上进行I2C驱动移植并集成MPU6050传感器的实战指南。通过FSP配置工具添加I2C主栈,适配MPU6050官方驱动,实现传感器数据读取与调试,为嵌入式开发提供完整的解决方案。 阅读详情

这里是修真院后端小课堂,每篇分享文从

本篇分享的是:【jvm如何运行以及内存如何分配 】

一、背景介绍:

jdk,jre,jvm的联系与区别

JDK:

是java开发工具包,是Sun公司针对java开发人员的产品,jdk中包含jre,在jdk的安装目录下有一个jre的目录,里面有两个文件夹bin和lib,在这里

可以认为bin里面就是jvm,lib中是java工作需要的类库,而java和lib合起来就称为jre

JRE:

是运行基于java语言编写的程序所不可缺少的运行环境,也是通过它,java的开发者才可以将自己开发的程序发布到用户手中,让用户使用,与大家

熟悉的jdk不同,jre是运行环境,并不是一个开发环境,所以没有包含任何开发工具(如编译器,调试器)等,知识针对使用java程序的用户

JVM:

就是我们常说的java虚拟机,它是整个java实现跨平台的最核心的部分,所有的java程序首先被编译为.class文件,这种类文件可以在虚拟机上运行

,也就是说class并不直接与机器的操作系统相对应。而是经过虚拟机间接的与操作系统交互,由虚拟机将程序解释给本地系统执行,只有jvm还不能将class

执行,因为在解释class的时候jvm需要调用解释所需要的类库lib,而jre包含lib类库,jvm屏蔽了具体操作系统平台的相关信息,使得java程序只需要生成

在java虚拟机上运行的目标代码。可以在多种平台(操作系统)上不加修改的运行

JVM系统组成

类加载系统、执行引擎、运行时数据区

二、知识剖析:

1、程序计数器

程序计数器(Program Counter Register) 是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器。在虚拟机的概念模型里,字节码

解释器工作时就是通过改变这个计数器的值来选取下一条执行字节码指令。

每条线程都有一个独立的程序计数器。

如果执行的是java方法,这个计数器记录的是正在执行的虚拟机字节码指令地址。如果是native方法,计数器为空。

2、虚拟机栈

同样是线程私有,描述Java方法执行的内存模型:每个方法在执行的同时都会创建一个栈帧(Stack Frame)用于存储局部变量表、操作数栈、动态链接、方

法出口等信息。一个方法对应一个栈帧。

局部变量表存放了各种基本类型、对象引用和returnAddress类型(指向了一条字节码指令地址)。其中64位长度long 和 double占两个局部变量空间,其他

只占一个。

规定的异常情况有两种:1.线程请求的栈的深度大于虚拟机所允许的深度,将抛出StackOverflowError异常;2.如果虚拟机可以动态扩展,如果扩展时无法

申请到足够的内存,就抛出OutOfMemoryError异常。

3、本地方法栈

和Java虚拟机栈很类似,不同的是本地方法栈为Native方法服务。

4、Java堆

是Java虚拟机所管理的内存中最大的一块。由所有线程共享,在虚拟机启动时创建。堆区唯一目的就是存放对象实例。

堆中可细分为新生代和老年代,再细分可分为Eden空间、From Survivor空间、To Survivor空间。

堆无法扩展时,抛出OutOfMemoryError异常

5、方法区

所有线程共享,存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。

当方法区无法满足内存分配需求时,抛出OutOfMemoryError

6、运行时常量池

它是方法区的一部分,Class文件中除了有类的版本、字段、方法、接口等描述信息外,还有一项是常量池(Const Pool Table),用于存放编译期生成的各

种字面量和符号引用。并非预置入Class文件中常量池的内容才进入方法运行时常量池,运行期间也可能将新的常量放入池中,这种特性被开发人员利用得比

较多的便是String类的intern()方法。

当方法区无法满足内存分配需求时,抛出OutOfMemoryError

7、垃圾收集(GC)

7.1 哪些内存需要回收

在运行时区域中,程序计数器、虚拟机栈、本地方法栈3个区域随线程而生,而线程而灭;栈中的栈帧随着方法的进入和退出也有序的执行入栈出栈操作,且

栈帧的内存分配在编译期就已经确定了。因此这几个区域的内存分配和回收都具备确定性,在这几个区域不必多考虑回收的问题,因为方法结束或者线程结

束时,内存自然就跟着回收了

需要进行GC操作的是方法区和堆,因为这部分内存是动态分配的,一个接口中的多个实现类需要的内存可能不一样,一个方法中的多个分支需要的内存可能

也不一样,我们只有在程序处于运行期间时才能知道会创建哪些对象。

7.2 什么时候回收

引用计数算法:给对象中添加一个引用计数器,每当有引用它时,计数器值就加1;当引用失效时,计数器值就减1;任何时刻计数器为0的对象就是不可能再

被使用。

可达性分析算法:通过一系列的称为"GC Root"的对象作为起点,从这些节点开始向下搜索,搜素所走过的路径称为引用链(Reference Chain),当一个对

象到GC Root没有任何的引用链相连,就判定对象可以被回收。

7.3 如何回收

垃圾收集算法:标记-清除算法、复制算法、标记-整理算法、分代整理算法

垃圾收集器:Serial收集器、ParNew收集器、Parallel Scavenge收集器、Parallel old、Serial old、CMS、GI

8、内存分配原则

对象优先分配到Eden区

大对象直接进入老年区(需要连续内存空间的对象,例如很长的字符串以及数组)

长期存活的对象将进入老年代(对象年龄计数器,每GC一次,age+1)

动态对象年龄绑定

空间分配担保

三、编码实战

四、参考文献:

[1]https://www.cnblogs.com/zhouyuqin/p/5161677.html

[2]《深入理解Java虚拟机》

[3]http://www.importnew.com/1551.html

五、更多讨论:

Q1:有没有可以检测jvm的工具

A1:检测jvm的工具有很多,jdk自己就带有很多个,如jps,jstart,jconsloe等,这些存放在bin目录下

Q2:Java程序可以运行在不同jvm中吗?

A2:可以的,比如安卓使用的是谷歌自己开发的davlik虚拟机,但我们同样可以编写Java程序在上面运行

Q3:jvm优化主要指那些方面

A3:最重要的就是堆的优化,因为这是存放对象的地方,是垃圾盛产地。

六、结束语:

今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖~

量化交易如何利用涨停板策略收割散户 量化交易通过算法筛选特定特征的股票,在早盘建立底仓后,利用大单拉升制造抢筹假象,吸引散户跟风买入。这种策略利用了散户的认知偏差,如锚定效应和从众心理,导致次日低开闷杀。从技术实现来看,量化策略通过控制买入量、隐藏真实意图等手段,精准执行隔日砸策略。对于短线交易者而言,理解量化资金的运作逻辑和识别危险涨停板的特征至关重要,这包括观察封板时间、盘口挂单、量价关系等多维度数据。在算法主导的市场中,散户需要升级交易工具和策略,从预测走势转向应对走势,才能避免成为量化策略的牺牲品。 阅读详情

相关推荐

FMEA-MSR步骤三:功能分析

目的 FMEA-MSR功能分析的主要目标: ● 功能及各功能之间的关系的可视化 ● 功能树/网络或等效功能矩阵参数图(P图) ● 顾客(外部和内部)功能与相关要求的关联 ● 要求或特性与功能的关联 ● 工程团队(系统、安全和组件)之间的协作 ● 失效分析步骤的基础 (点击链接进入官网领取软件试用) 在监视及系统响应的补充FMEA中,对失效探测和失效响应的监视视为其具有的功能。硬件和软件功能可能包括监视控制状态的功能。 故障/失效的监视和探测功能可能包括超出范围的探测、循环冗余校验、真实性检查和序列计数器检查

Infomass的博客 2389

方法在执行过程当中,在JVM中的内存是如何分配

方法在执行过程当中,在JVM中的内存是如何分配的呢,内存是如何变化的? 1、方法只定义,不调用,是不会执行的,并且在JVM中也不会给该方法分配“运行所属”的内存空间。只有在调用这个方法的时候,才会动态的给这个方法分配所属的内存空间。 2、在JVM内存划分上有这样三块主要的内存空间(当然除了这三块之外还有其它的内存空间):   方法区内存  堆内行  栈内存 3、关于“栈"数据结构:栈:stack...

qq_40965639的博客 238

鸿蒙实战开发教程-注册登录页面

在密码输入框中,只要设置TextInput的类型就可以实现带眼睛logo的密码输入框效果:

2401_82546228的博客 3558

JAVA虚拟机工作原理和流程

一、.背景介绍 作为一名Java使用者,掌握JVM的体系结构也是必须的。说起Java,人们首先想到的是Java编程语言.然而事实上,Java是一种技术,它由四方面组成:Java编程语言、Java类文件格式、Java虚拟机和Java应用程序接口(Java API)。它们的关系如下图所示: 二、知识剖析 2.1 JAVA虚拟机工作原理和流程 Java平台由Java虚拟机和Java应用程序接口搭建,Ja...

weixin_43124134的博客 1398

mos管结电容等效模型_MOS管的防冲击防反接电路

MOS管的反接和抑制冲击一:原理分析MOS管由于生产工艺等因素,会产生相应的寄生电容,体二极管等。Mos管的寄生电容如图1所示,可以看到其具有三个寄生电容:G和S的电容Cgs;G和D的电容:Cgd,也称为反向传输电容、米勒电容、Crss;D和S的电容Cds。D和S之间的体二极管D1.图 1:MOS管等效模型寄生电容的数值可以从元器件的datasheet中得到,如图2,图3:Ciss(输入电容)=C...

weixin_29179583的博客 1854

【Docker】Ubuntu安装Docker

1 安装Docker 安装Docker有三种方法,这里只用repository安装,更详细的安装方法可以看官方文档。 1.1 添加repository 首先更新apt: sudo apt-get update 安装一些包让apt可以通过https使用repository: sudo apt-get install \ apt-transport-https \ ca-certif...

widiot的博客 9945

JVM的内存分配、运行原理、回收算法机制

转自:阿里P8架构师谈JVM的内存分配、运行原理、回收算法机制_【快资讯】 不管是BAT面试,还是工作实践中的JVM调优以及参数设置,或者内存溢出检测等,都需要涉及到Java虚拟机的内存模型、内存分配,以及回收算法机制等,这些都是必考、必会技能。 一.JVM内存模型 JVM内存模型可以分为两个部分,如下图所示,堆和方法区是所有线程共有的,而虚拟机栈,本地方法栈和程序计数器则是线程私有的。 1. 堆(Heap) 堆内存是所有线程共有的,可以分为两个部分:年轻代和老年代。下图中的Perm代表的是永

weixin_42759726的博客 417

JVM的运行原理,内存分配

参考文档:https://www.cnblogs.com/zhanglei93/p/6590609.html 一.Java虚拟机的工作原理: 1.首先Java源文件经过前端编译器(javac或ECJ)将.java文件编译为Java字节码文件 2.然后JRE(类加载器)加载Java字节码文件,载入系统分配给JVM的内存区, 3.虚拟机中的执行引擎用来执行class文...

我想静静 527

Debian 12 安装nodejs(包括node、npm、npx、yarn、pnpm、cnpm、bun)

【代码】Debian 12 安装nodejs。

mirana的专栏 7997

XLSX Workbench 在 ABAP 世界的定位与实战:从概念到完整示例

XLSX Workbench 在可视化、易维护与批量后台生成三方面填补了 ABAP 报表到 Excel 的空白。它与官方类及社区明星 abap2xlsx 形成了“模板驱动、代码驱动、二者兼顾”的互补格局。掌握 Workbench 后,开发者能把精力集中在业务逻辑以及数据质量,而把排版细节交给图形化工具,大幅加速交付与迭代。通过本文提供的示例,你可以立即在项目中落地并尝到效率提升的红利。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 520

Jvm如何运行和内存分配

这里是修真院后端小课堂,每篇分享文从【背景介绍】【知识剖析】【常见问题】【解决方案】【编码实战】【扩展思考】【更多讨论】【参考文献】八个方面深度解析后端知识/技能。 本篇分享的是:jvm如何运行和内存分配 开场语: 大家好,我是IT修真院北京分院廖友,一枚正直纯洁善良的Java程序员。 今天给大家分享一下官网Java任务拓展中的知识点——jvm如何运行和内存分配 一、背景介绍: ...

IT修真院:初学者转行到互联网的聚集地 396

【深度学习新浪潮】AI 智能眼镜关键视觉技术、技术栈及开源项目全解析

Meta新款智能眼镜在演示中暴露出的AI误判和延迟问题,揭示了端侧视觉与多模态算法落地的核心瓶颈。本文从算法工程视角解析了AI智能眼镜的三大关键技术:感知增强(多帧降噪、HDR成像)、场景解析(轻量化目标检测、语义分割)和空间定位(视觉SLAM、ToF辅助),并梳理了完整的技术栈架构,包括硬件适配、驱动优化和框架选型。文章还提供了高价值开源项目参考,如OpenXR和ORB-SLAM3,为端侧视觉算法落地提供实操指南,助力开发者攻克算力约束下的实时性、精度和功耗平衡难题。

专注:太空算力、AI infra、异构调度、大模型成本工程 530

JVM运行时数据区及内存分配策略

运行时数据区 运行时数据区也就是JVM运行时产生的数据存放的区域,这块区域就是JVM的内存区域,也称为JVM的内存模型–JMM JMM分成了以下几部分: 堆空间(线程共享):存放new出来的对象 元空间(线程共享):存放类元信息、类的模板、常量池、静态部分。 线程栈(线程独享):存放方法的栈帧 本地方法区(线程独享):本地方法产生的数据 程序计数器(线程独享):配合执行引擎来执行指令 内存分配策略 为对象分配内存,具体的分配策略如下: Bump the pointer(指针碰撞):如果内存空间是绝对

yangxiao的博客 324

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

【jvm】JAVA运行时数据区与内存分配

java虚拟机在运行时会将内存空间划分为不同的数据区域。每个区域都有各自的用途以及生命周期。有些区域伴随着JVM进程的存在而存在,有些区域“随线程而生,随线程而死”。 程序计数器作用:当前线程所执行的字节码的行号指示器,字节码解释器在工作时通过改变计数器的值来选取下一条需要执行的字节码指令。 特点: 1、线程私有,JVM多线程是通过轮流切换并分配CPU时间的,在任何一个时刻,一个CPU(一个核

刘劭的博客 3787

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

了解JVM运行时的内存分配

了解JVM运行时的内存分配 前言 上文中,在介绍运行时数据区域中的 JAVA 堆时,提到了 JVM 中的堆,一般分为三大部分:新生代、老年代、永久代,本文将进一步了解运行时的内存分配情况。 正文 1.新生代主要用来存放新生(new)的对象。一般占据堆的 1/3 空间。由于频繁创建对象,所以新生代会频繁的触发 MinorGC 进行垃圾回收。 新生代又分为 Eden(伊甸园)、Survi...

weixin_34368949的博客 79

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

【JVM】class文件格式,JVM加载class文件流程,JVM运行时内存区域,对象分配内存流程

这篇文章本来只是想讲一下class文件格式,讲着讲着越讲越多。JVM这一块吧,知识比较散比较多,如果深研究下去如死扣《深入理解Java虚拟机》,这本书很深很细,全记住是不可能的,其实也没必要。趁这个机会直接把标题中的这些的主要知识点都总结一下,不会过深,也不会是太浮于表面的八股文,总结一下比较好记,也省的后面自己再忘了。

不想睡觉的橘子君的博客 1477

【修真院java小课堂】JVM运行及内存分配

        写内存分配之前得明白java程序是如何运行的:我们编写的java文件java虚拟机(JVM)是不能运行的,得通过java编译环境进行编译,将其编译成二进制的文件,传输到java运行环境,由类加载器加载java标准库、扩展库以及编译的文件。执行文件之后通过JVM中的移植接口与各种不同的系统连接,最终解释成机器码加载到机器上。JVM实现了java语言的跨平台,而且由于JVM执行的是二进...

qq_41810013的博客 267

JVM运行时内存分配机制

JVM运行时内存分配机制前言内存模型模型解析Java heap直接内存方法区程序计数器JVM Stack本地方法栈 前言 Java在内存管理方面不象C/C++那样,可以直接管理内存,而是将内存分配和内存管理的工作交托给JVM(Java虚拟机)。虽然这减轻了程序员的工作,但也带来了不好的一方面,开发人员若毫不关心内存的情况,可能会造成程序运行的低效且耗资源。 另外,内存管理在不同的jdk版本中,管...

legendaryhaha的博客 887

JVM运行内存分配——拨云见日

自从上次咸菜给窝头讲解了算法的神奇后,窝头就好像变了一个人,游戏不玩了,看见校园的妹纸也不回头了,一门心思爱上了编程,这不昨天刘老师给布置了一项作业–了解java虚拟机(JVM)的内存分配。大清早就叫上学霸咸菜去了图书馆。 咸菜:“窝头星期天,能不能省点心,这么早就叫我起来,人家昨天看了半夜的韩剧还没睡醒呢!” 窝头:“哎呀!咸菜,我好不容易准备洗心革面,好好学习,你就帮帮我吧!” 咸菜心想,

wangheng_2017的博客 576

【转】JVM 运行时的内存分配

  首先我们必须要知道的是 Java 是跨平台的。而它之所以跨平台就是因为 JVM 不是跨平台的。JVM 建立了 Java 程序和操作系统之间的桥梁,JVM 是用 C 语言编写,而 C 语言不具备跨平台的特性。所以对于 Windows 平台,Java 有基于 Windows 平台的 JVM;对于 Linux 平台,Java 也有基于 Linux 平台的 JVM等等。不同的操作系统有不同的 JVM,所以我们编写的 Java 代码能在各个平台上运行,是因为有各个平台的 JVM。   而 Java 的内存分配也

201

linux分配jvm 堆内存存储,JVM运行时内存结构

1.JVM内存模型JVM运行时内存=共享内存区+线程内存区1).共享内存区共享内存区=持久带+堆持久带=方法区+其他堆=Old Space+Young SpaceYoung Space=Eden+S0+S1JVM用持久带(Permanent Space)实现方法区,主要存放所有已加载的类信息,方法信息,常量池等等。可通过-XX:PermSize和-XX:MaxPermSize来指定持久带初始化值和...

weixin_34247523的博客 457

JVM运行以及内存分配

大家好,我今天给大家分享一下,:JVM运行以及内存分配   1.背景介绍 Java核心四要素:Java编程语言、Java类文件格式、Java虚拟机和Java应用程序接口(Java API)。 JVM(Java Vitual Machine)Java虚拟机,用软件虚拟的一台计算机,可以把字节码文件翻译成机器指令。 Java API(Application Programming Inter...

weixin_41910244的博客 262

转载jvm runtime data area 运行时数据区 内存分配

图 4: 运行时数据区   运行时数据区是在JVM运行的时候操作系统所分配的内存区。运行时内存区可以划分为6个区域。在这6个区域中,一个PC Register,JVM stack 以及Native Method Statck都是按照线程创建的,Heap,Method Area以及Runtime Constant Pool都是被所有线程公用的。  PC寄存器(PC registe...

gtolilei的博客 235
上一篇: 常见的几种排序方法
下一篇: Maven常用的四个命令
learning__java
博客等级 码龄8年 87粉丝 174原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值