虚拟机系列 | JVM运行时数据区

Android Geckoview实战:5分钟搞定JS与原生交互(附完整Demo代码) 本文详细介绍了在Android应用中使用GeckoView替代系统WebView,构建稳定高效的JavaScript与原生代码交互桥梁的实战方法。通过WebExtension架构,文章提供了从环境配置、扩展开发到Android端集成的完整步骤,并附有可运行的Demo代码,帮助开发者快速解决混合应用中的兼容性问题。 阅读详情

一、内存与线程

1、内存结构

内存是计算机的重要部件之一,它是外存与CPU进行沟通的桥梁,计算机中所有程序的运行都在内存中进行,内存性能的强弱影响计算机整体发挥的水平。JVM的内存结构规定Java程序在执行时内存的申请、划分、使用、回收的管理策略,通说来说JVM的内存管理指运行时数据区这一大块的管理。

2、线程运行

JVM中一个应用是可以有多个线程并行执行,线程被一对一映射为服务所在操作系统线程,调度在可用的CPU上执行,启动时会创建一个操作系统线程;当该线程终止时,这个操作系统线程也会被回收。

在虚拟机启动运行时,会创建多个线程,数据区中有的模块是线程共享的,有的是线程私有的:

线程共享:元数据区、堆Heap;

线程私有:虚拟机栈、本地方法栈、程序计数器;

单个CPU在特定时刻只能执行一个线程,所以多线程通过几块空间的使用,然后不断的争抢CPU的执行时间段。

二、元数据空间

基本描述

方法元空间(方法区)在JVM启动的时候被创建,是被各个线程共享的内存空间,用于存放类和方法的元数据以及常量池,比如Class和Method。

在实际的开发中,经常因为加载的类太多,进而导致内存溢出问题,这样可以对元空间的大小进行扩展。

与堆的关系

元空间存放加载的类信息,当类被实例化时,堆中存储实例化的对象信息,并且通过对象类型数据的指针找到类。

三、堆空间

基本描述

JVM启动时创建堆区,是内存管理的核心区,通常情况下也是最大的内存空间,是被所有线程共享的,几乎所有的对象实例都要在堆中分配内存,所以这里也是垃圾回收的重点空间。

堆栈关系

栈是JVM运行时的单位,堆是存储单位,当栈中方法结束,相关对象失去所有引用后,不会马上被移除堆空间,要等到垃圾收集器运行的时候。

四、虚拟机栈

虚拟机栈(Java栈)在每个线程创建时都会生成一个虚拟机栈,栈的内部是一个个栈帧单元,对应Java方法的调用,其生命周期和线程周期保持一致。用来存储方法的局部遍历,部分执行结果,方法的调用和返回。

栈帧是方法执行的数据集,维持执行过程中的各种数据信息,执行的方法依次入栈,栈顶存放当前要执行的方法,执行结束后出栈,对于栈没有垃圾回收问题。

五、程序计数器

基本描述

JVM中程序计数寄存器用来存储下一条将要执行指令的地址,执行引擎获取到指令后进行执行,是线程私有的。它可以看作是当前线程所执行的字节码的行号指示器。

前后关系

线程在获取CPU的时间段内执行代码,但是线程随时可能没有执行完就被挂起,等到线程A再次获取CPU执行时,CPU 得知道执行到线程A的哪一个指令,程序计数器会存储该动作。

六、本地方法栈

本地方法栈与虚拟机栈所起到的作用是类似的,虚拟机栈为虚拟机执行Java方法,本地方法栈管理虚拟机使用到的 本地方法,在虚拟机规范中对本地方法栈中方法使用的语言、使用方式与数据结构并没有强制规定,因此具体的虚拟机可以自由实现它。HotSpot虚拟机直接就把本地方法栈和虚拟机栈合二为一。

七、源代码地址

GitHub·地址
https://github.com/cicadasmile/java-base-parent
GitEE·地址
https://gitee.com/cicadasmile/java-base-parent

粉丝福利:

点赞后添加即可领取

 

全覆盖路径规划开源项目Clean-robot-turtlebot3原理及流程概括总结 本系列文章主要介绍全覆盖路径规划开源项目Clean-robot-turtlebot3的相关内容,包含如下四篇文章,分别介绍了开源项目Clean-robot-turtlebot3流程的概括总结、ROS坐标系常用坐标及其变换、Clean-robot-turtlebot3关键函数解析等内容。 阅读详情

相关推荐

Win10和Ubantu16.04双系统下,卸载Ubantu

Win10和Ubantu16.04双系统下,卸载Ubantu 机器配置 华硕主板,英伟达显卡(这不是重点) Win10与Ubantu16.04均为UFFI分区(如果不知道这个也不需要在意,一般默认的都是这样,鸵鸟原则) 清除Ubantu系统 一般按照常规的方法来删除Ubantu,都是直接将磁盘管理器里面的关于Ubantu的磁盘清空,但是还会留下一个UFFI分区,如果不进行删除的话,开机时候还是会有...

qq_33289694的博客 392

Java并发编程(07):Fork/Join框架机制详解

Java提供Fork/Join框架用于并行执行任务,核心的思想就是将一个大任务切分成多个小任务,然后汇总每个小任务的执行结果得到这个大任务的最终结果。这种机制策略在分布式数据库中非常常见,数据分布在不同的数据库的副本中,在执行查询时,每个服务都要跑查询任务,最后在一个服务上做数据合并,或者提供一个中间引擎层,用来汇总数据核心流程切分任务,模块任务异步执行,单任务结果合并;在编程里面,通用的代码不多,但是通用的思想却随处可见。...

【积累】,是一个长期持续的过程。 721

华为交换机链路聚合对接思科交换机链路聚合故障

2台华为交换机采用堆叠方式与思科交换机之间使用链路聚合,华为交换机与cisco交换机链路捆绑接口频繁UP/DOWN,业务中断。

网络工程师日常的博客 2121

通过多线程把大任务变成多个小任务并发处理的进一步总结

前面已经对通过线程池把大任务分成小任务并汇总小任务结果的逻辑进行了简单总结,现在对该场景进行进一步总结 一:使用ThreadPoolExecutor方法 1.把大任务分成多个可以让线程执行的小任务,并创建一个list容器,存储这些小任务 2.以该list为入参,调用线程池的invokeAll()方法,并发执行这些小任务。该方法的返回值是存储了Future的list 3.遍历返回结果,拿到每一个Future,通过future.get()方法就可以获得对应的线程结果,从而可以拿到所有线程的执行结果 *

m0_57713282的博客 1266

使用Power Apps实现SharePoint Online列表的下拉菜单的级联选择

在SharePoint列表中添加数据的时候,下拉菜单的级联选择一直是一个非常实用的功能,尤其是有很多数据的情况,级联选择可以根据上一层的选择,自动过滤下一层的选择,方便用户查找和选择准确的信息。一个最常用的情景是选择供应商的地区和国家,例如有三个列表,一个是供应商所在的大洲,一个是国家,一个是供应商。当用户选择州的时候,会自动列出属于这个州的国家。避免用户迷失在大量的数据中。 这里展示一下如何在...

shrenk的专栏 7813

ADS使用Smith圆图进行阻抗匹配

在处理RF系统的实际应用问题时,总会遇到一些非常困难的工作,对各部分级联电路的不同阻抗进行匹配就是其中之一。一般情况下,需要进行匹配的电路包括天线与低噪声放大器(LNA)之间的匹配、功率放大器输出(RFOUT)与天线之间的匹配、LNA/VCO输出与混频器输入之间的匹配。匹配的目的是为了保证信号或能量有效地从“信号源”传送到“负载”。 阻抗匹配(impedance matching) 信号源内阻与所接传输线的特性阻抗大小相等且相位相同,或传输线的特性阻抗与所接负载阻抗的大小相等且相位相同,分别称为传输线的输

红茶绿茶和奶茶的博客 3万+

Java高并发之Fork/Join框架、锁优化

1. Fork/Join框架 ① 什么是Fork/Join框架 Fork/Join框架是JDK1.7提供的一个并行任务执行框架,它可以把一个大任务分成多个可并行执行的子任务,然后合并每个子任务的结果,得到的大任务的结果。 有点类似Hadoop的MapReduce,Fork/Join框架也可以分成两个核心操作: Fork操作:将大任务分割成若干个可以并行执行的子任务 Join操作:合并子任务的...

lucyLee的博客 653

用Cloudflare Worker搭建你的私人Gemini Pro API

文章介绍如何通过开源项目gemini-cli-openai将谷歌Gemini模型转换为兼容OpenAI API的服务,解决Gemini CLI的三大使用障碍:网络访问、命令行操作和生态整合问题。部署流程主要包括获取Google OAuth2凭证、配置Cloudflare Worker项目并设置KV存储,最终可在CherryStudio等图形客户端中调用Gemini。该方法利用Cloudflare全球网络实现加速访问,同时保持认证信息安全可控。

Hsiao的二进制生活 1684

Fork/Join机制

化繁为简,分而治之,采用递归 Future机制和FutureTask 可以获取到线程执行的结果,可以中断线程,可以判断任务是否完成。 Fork/Join机制 将任务切割成足够小,最后将结果汇总。 fork决定了ForkJoinTask异步执行,Join任务间结果的汇总。 使用Fork/Join类 (1)继承ForkJoinTask的子类,重写compone 方法,RecursiveA...

weixin_42183336的博客 321

基于PLC的立体车库控制系统设计

本文介绍了基于西门子S7-1511-1PN PLC和KTP700 Basic PN HMI的立体堆垛式停车场自动化控制系统。系统通过PLC逻辑控制滑台运动,配合传感器实现车辆存取自动化,包含初始化、入库、出库和安全保护程序。程序采用模块化设计,分为安全互锁、动画显示、模式切换等六个功能模块,运用边沿触发、定时器和多级联锁确保安全。HMI界面提供模式切换、车位选择、状态显示和手动控制功能。该系统具有模块化、安全性和可扩展性特点,可应用于多车位立体停车场场景。

sxs3030787796的博客 1266

YOLO11改进-注意力-引入Deformable Large Kernel Attention (DLKA) 解决多尺度、小目标、遮挡等问题

Deformable Large Kernel Attention (DLKA) 是一种用于视觉任务的注意力机制,旨在提升模型在处理不同尺寸和形状对象时的灵活性和性能。DLKA 的设计灵感源自传统的注意力机制,但通过引入可变形核(deformable kernel)来增强对局部特征的适应能力。

qq_64693987的博客 4042

Java ForkJoin 简介和应用

Java 并行计算框架 Fork Join 简介和应用 基于分治思想分解任务并处理,工作窃取算法充分利用线程资源

weixin_42176639的博客 2639

从 Junior 到 Lead:ABAP 开发者进阶路线图与真实项目练级法

本文拆解了ABAP工程师从初级到高级的成长路径,强调能力提升依赖于可复用经验的积累。对于初级开发者,建议夯实ABAP Dictionary、内表处理和数据库思维三大基础,培养数据流与规则层的结构化思维,并逐步掌握面向对象编程。中级阶段应注重代码可维护性,通过单元测试和Clean ABAP规范提升工程质量。文章指出,ABAP开发者需要学会筛选学习重点,建立知识地图,并重视团队协作中的代码可读性。关键在于将碎片知识整合为可迁移的模型,而非盲目追求新技术。

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

Java 虚拟机系列一:一文搞懂 JVM 架构和运行时数据区

前言 之前写博客一直比较随性,主题也很随意,就是想到什么写什么,对什么感兴趣就写什么。虽然写起来无拘无束,自在随意,但也带来了一些问题,每次写完一篇后就要去纠结下一篇到底写什么,看来选择太多也不是好事儿,更重要的是不成体系的内容对读者也不够友好。所以以后的博客尽量按系列来写,不过偶尔也会穿插其他的内容。接下来一段时间我会把写博客的重点放在 JVM (Java Virtual Machine) 和 ...

IamHYN的博客 1467

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

java中判断undefined_Java虚拟机系列一:一文搞懂 JVM 架构和运行时数据区

前言之前写博客一直比较随性,主题也很随意,就是想到什么写什么,对什么感兴趣就写什么。虽然写起来无拘无束,自在随意,但也带来了一些问题,每次写完一篇后就要去纠结下一篇到底写什么,看来选择太多也不是好事儿,更重要的是不成体系的内容对读者也不够友好。所以以后的博客尽量按系列来写,不过偶尔也会穿插其他的内容。接下来一段时间我会把写博客的重点放在 JVM (Java Virtual Machine...

weixin_26854555的博客 189

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Java 虚拟机系列一:一文搞懂 JVM 架构和运行时数据区 (内存区域)

前言 了解 JVM 是对 Java 开发人员的基本要求,JVM 的相关内容自然也成了现在 Java 程序员面试的重要考点。不过估计很多小伙伴和我一样,长时间醉心于 CRUD,却忘了去了解一下更底层、更基础的东西,殊不知这些才是决定你能在这条路上走多远的关键因素,那接下来我们就一起来深入学习一下看似神秘的 JVM 吧。JVM 总体来看内容还是很多的,我会把最重要的内容介绍给大家,不过如果你有时间和精力的话,还是推荐你去看一下《深入理解Java虚拟机》这本书,确实是有口皆碑。本系列文章也会引用很多此书的内容并

wdquan19851029的专栏 449

Java虚拟机系列一:一文搞懂 JVM 架构和运行时数据区

前言之前写博客一直比较随性,主题也很随意,就是想到什么写什么,对什么感兴趣就写什么。虽然写起来无拘无束,自在随意,但也带来了一些问题,每次写完一篇后就要去纠结下一篇到底写什么,看来选择太...

320

JVM从零到一系列:03--运行时数据区【PC寄存器,虚拟机栈】

0x01.运行时数据区概述 1.运行时数据区模型图(整体图) 2.运行时数据区模型图(详情图) 3.概述 Java虚拟机定义了若干程序运行期间会使用到的运行时数据区: 有一些会随着虚拟机的启动而创建,随着虚拟机退出而销毁。 还有一些与线程一一对应,与线程对应的数据区会随着线程的开始和结束而创建和销毁。 独立的线程:【程序计数器,栈,本地栈】 共享的线程:【堆,堆外内存,方法区】 Java虚拟机与线程: 线程是一个程序运行的单元,JVM允许一个应用有多个线程。 HotSpot中,每个线程都与

ATFWUS的博客 3万+

JVM虚拟机学习系列之三(Java虚拟机的运行时数据区子系统、程序计数器、虚拟机栈)

目录 1、JVM虚拟机学习系列之一(Java虚拟机的发展史和java发展重大事件) 2、JVM虚拟机学习系列之二(Java虚拟机的内部结构、整体框架、类加载子系统、双亲委派机制) 3、JVM虚拟机学习系列之三(Java虚拟机的运行时数据区:程序计数器+虚拟机栈+局部变量表) 4、JVM虚拟机学习系列之四(Java虚拟机的字节码与类的加载) 5、JVM虚 前言 学习完本章,你会学到什么是Java虚拟机的运行时数据区、程序计数器、虚拟机栈、局部变量表等。 一、虚拟栈的位置结构图 二、什么是

qq_28245087的博客 540

JVM系列-虚拟机栈(运行时数据区)

虚拟机栈 简介 虚拟机栈的出现背景 由于跨平台性的设计,Java的指令都是根据栈来设计的。不同平台CPU架构不同,所以不能设计为基于寄存器的【如果设计成基于寄存器的,耦合度高,性能会有所提升,因为可以对具体的CPU架构进行优化,但是跨平台性大大降低】。 优点是跨平台,指令集小,编译器容易实现,缺点是性能下降,实现同样的功能需要更多的指令。 内存中的栈与堆 首先栈是运行时的单位,而堆是存储的单位。 即:栈解决程序的运行问题,即程序如何执行,或者说如何处理数据。堆解决的是数据存储的问题,即数

weixin_47277897的博客 177

【jvm系列-03】精通运行时数据区私有区域---虚拟机栈、程序计数器、本地方法栈

精通jvm运行时数据区私有区域

zhenghuishengq的博客 1万+

JVM入门到精通系列 (二)运行时数据区的程序计数器和虚拟机栈简介----栈与计数器的深度理解

文章目录运行时数据区概述:程序计数器(PC寄存器)--program counter register:一:pc寄存器作用:二:两个常见问题:虚拟机栈--stack:一:是什么?二:生命周期:三:作用:四:栈的异常:如何设置栈内存大小:五:栈的存储单位:java栈帧方法有两种返回函数的方式:六:栈帧的内部结构:局部变量表(local variables)Slot理解:静态变量和局部变量的对比和小结: 运行时数据区概述: 每个线程: 独立包括程序技术器,栈,本地栈 线程间共享: 堆,堆外内存(永久代或元空间,

qq_35050438的博客 972

4. JVM运行时数据区与JVM指令集

TestIPulsPlus Runtime Data Area PC 程序计数器,存放指令位置,虚拟机的运行,类似于这样的循环, while(not end){ 取PC中的位置,找到对应位置的指令; 执行该指令; PC++; } Heap 所谓栈指的是下面两块 JVM stacks:每个线程对应一个栈,装着一个个栈帧,每个方法对应一个栈针frame。java虚拟机管理的栈 n...

hanzong110的博客 177

JVM运行时数据区和指令集

Runtime Data Area and Instruction Set jvms 2.4 2.5 指令集分类 基于寄存器的指令集 基于栈的指令集 Hotspot中的Local Variable Table = JVM中的寄存器 Runtime Data Area PC 程序计数器 存放指令位置 虚拟机的运行,类似于这样的循环: while( not end ) { ​ 取PC中的位置,找到对应位置的指令; ​ 执行该指令; ​ PC ++; } JVM Stack Frame - 每个方法对应

星星都没我亮的博客 387
上一篇: 大学毕业刚工作,学的Java和公司需要不同,什么都不会怎么办?
下一篇: 字节跳动HR:一年能入职1.2万应届生,全靠这4个管理动作
Java斗帝之路
博客等级 码龄7年 2392粉丝 687原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值