JVM(2)架构

FPGA实战:用DDR3和乒乓操作解决视频帧撕裂问题(附Verilog代码) 本文详细介绍了如何利用DDR3内存和乒乓操作架构解决FPGA视频处理中的帧撕裂问题。通过多帧缓存原理、AXI接口配置和自适应乒乓操作设计,有效隔离读写操作,确保视频流稳定传输。文章包含Verilog代码实现和性能优化技巧,适用于工业相机、医疗影像等高速视频处理场景。 阅读详情

Java虚拟机简介

“Java虚拟机”可能指如下三个不同的东西

抽象规范

  • 一个具体的实现
  • 一个运行中的虚拟机实例
  • 每个Java程序都运行在某个具体的Java虚拟机实现的实例上。

一个Java虚拟机的实例负责运行一个Java程序。当启动一个Java程序的时候,一个虚拟机的实例也就诞生了。当该程序关闭退出时,这个虚拟机实例也就随之消亡。

线程介绍

在Java虚拟机内部有两种线程:

  • 守护线程:通常是由虚拟机自己使用,比如GC线程。但是,Java程序也可以把它自己创建的任何线程标记为守护线程(public final void setDaemon(boolean on)来设置,但必须在start()方法之前调用)。

  • 非守护线程:main方法执行的线程,我们通常也称为用户线程。

只要有任何的非守护线程在运行,Java程序也会继续运行。当该程序中所有的非守护线程都终止时,虚拟机实例将自动退出(守护线程随JVM一同结束工作)。

守护线程中不适合进行IO、计算等操作,因为守护线程是在所有的非守护线程退出后结束,这样并不能判断守护线程是否完成了相应的操作,如果非守护线程退出后,还有大量的数据没来得及读写,这将造成很严重的后果。

web服务器中的Servlet,容器启动时后台初始化一个服务线程,即调度线程,负责处理http请求,然后每个请求过来调度线程从线程池中取出一个工作者线程来处理该请求,从而实现并发控制的目的。

Java虚拟机体系结构

注:以下讲的PC寄存器和程序计数器视为同一。

这里写图片描述

每个Java虚拟机都有一个类装载器子系统,他根据给定的全限定名来装在类型。
同样,每个Java虚拟机都有一个执行引擎,它负责执行那些包含在被装载类的方法中的指令。当Java虚拟机运行一个程序时,它需要内存来存储很多东西,例如:字节码,从已装载的class文件中得到的其他信息,程序创建的对象,传递给方法的参数,返回值,局部变量,以及运算的中间结果等等,Java虚拟机把这些东西都组织到几个“运行时数据区”中,以便管理。

每个Java虚拟机实例都有一个方法区以及一个堆, 他们是由 该虚拟机实例中所有线程共享的。 当虚拟机装载一个class文件时,它会从这个class文件包含的二进制数据中解析类型信息。然后把这些类型信息放到方法区中。 当程序运行的时候,虚拟机会把所有该程序在运行时创建的对象都放到堆中。

每个新线程都会得到它自己的PC寄存器(程序计数器)以及一个Java栈。

  • 如果线程正在执行的是一个Java方法(非Native方法)。那么PC寄存器的值将总指向下一条将被执行的指令,而 它的Java栈则总是存储该线程中Java方法调用的转台–包括它的局部变量、被调用时传进来的参数、返回值以及运算的中间结果等等。

  • Native方法调用的状态,则是以某种依赖于具体实现的方式存储在本地方法栈中,也可能是在寄存器或者其他某些与特定实现相关的内存区中。

Java栈是由很多的栈帧(stack frame)或者说帧(frame)组成的,一个栈帧包含一个Java方法调用状态。 当现场调用一个Java方法的时候,虚拟机压入一个新的栈帧到该线程的Java栈中:当该方法返回时,这个栈帧被从Java栈中弹出并抛弃

Java虚拟机没有指令寄存器,其指令集使用Java栈来存储中间数据。这样设计的原因是为了保持Java虚拟机的指令集尽量紧凑、同时也便于Java虚拟机在那些只有很少通用寄存器的平台上实现。另外,Java虚拟机这种基于栈的体系结构,也有助于运行时某些虚拟机实现的动态编译器和即时编译器的代码优化。

这里写图片描述

这些内存区域是私有的,任何线程都不能访问另外一个线程的PC寄存器或Java栈。
图中是一个虚拟机实例的快照,它有三个线程正在执行。线程1和线程2都正在执行Java方法,而线程3在执行Native方法。

数据类型

这里写图片描述

方法区

这里写图片描述

在Java虚拟机中,关于被装载类型的信息存储在逻辑上一个被称为方法区的内存中。 当虚拟机装载某个类型市,它使用类装载器定位相应的class文件,然后读入这个class文件–一个线性二进制数据流,然后把他传输到虚拟机中。紧接着虚拟机提取其中的类型信息,并将这些信息存储到方法区。该类型的类(静态)变量同样也是存储在方法区内。

当虚拟机运行Java程序时,它会查找使用存储在方法区中的类型信息。

由于所有线程都共享方法区,因此他们对方法区书记的访问必须设计为线程安全的。 方法区的大小不必是固定的,虚拟机可以根据应用需要动态调整。同样,方法区也不必是连续的,方法区可以在一个堆中自由分配。方法区也可以被垃圾收集–这里涉及到类的卸载。

方法区中包含的信息:

  1. 类型信息:对每个装载的类型,虚拟机都会在方法区存储一下信息
    这个类型的全限定名
    这个类型的直接父类的全限定名
    这个类型是类类型还是接口类型
    这个类型的访问修饰符
    任何直接父接口的全限定名的有序列表
  2. 常量池:虚拟机必须为每个被装载的类型维护一个常量池。常量池就是该类型所用常量的一个有序集合,包直接常量(string,integer…)和对其他类型、字段和方法的符号引用。池中的数据项通过索引访问。
  3. 字段信息。
  4. 方法信息。
  5. 类变量。
  6. 编译时常量。
  7. 指向ClassLoader类的引用。
  8. 指向Class类的引用。
  9. 方法表:为了提高访问效率,虚拟机对每个装载的非抽象类都生成一个方法表,把它作为类信息的一部分,它主要存储了所有它的实例可能被调用的实例方法的直接引用,包括从父类继承的 实例 方法。

链接网址:
https://github.com/hadyang/interview/blob/master/java/jvm-architecture.md

SAP 中租赁资产的实现需区分经营租赁与融资租赁,核心围绕资产主数据配置、折旧与利息设置、科目分配及业务操作展开 摘要:SAP系统租赁资产管理需区分经营租赁与融资租赁,通过SPRO配置资产主数据、折旧范围、利息计算及科目分配。关键步骤包括:激活折旧范围利息计算(OABZ)、设置租赁资产类别(OAYZ)、维护总账科目(AO90)及创建租赁资产主数据(AS01)。业务操作涵盖资产资本化(ABZON)、折旧利息过账(AFAB)、租金支付(F-53)及终止处理(ABUMN)。核心配置要点在于准确设置租赁类型、利率参数和科目联动,确保系统自动计算折旧与利息并生成正确凭证。 阅读详情

相关推荐

避坑指南:将大华官方Java SDK无缝迁移到SpringBoot 2.x项目的完整流程

本文详细介绍了如何将大华官方Java SDK无缝迁移到SpringBoot 2.x项目,重点解决内存管理、连接池设计和异步处理等核心问题。通过设备连接池化、异步非阻塞接口改造和内存管理优化,实现刷卡、刷脸等认证功能的高效整合,提升Web服务的稳定性和性能。

weixin_42557830的博客 415

2. JVM架构及其生命周期

由于跨平台性的设计,Java的指令都是根据栈来设计的。不同平台CPU架构不同,所以不能设计为基于寄存器的。 优点是跨平台,指令集小,编译器容易实现; 缺点是性能下降,实现同样的功能需要更多的指令。

weixin_45267102的博客 313

强化学习_06_pytorch-TD3实践(BipedalWalkerHardcore-v3)

DDPG的critic会高估, 从而导致actor策略失败。TD3是增加了三个关键技巧优化DDPG。经过优化后的TD3(Twin Dalayed DDPG 双延迟深度确定性策略梯度算法)适合于具有高维连续动作空间的任务。

RL小站 2688

《剑指JVM》JVM架构——JVM与Java体系结构——引言篇2

🔥本篇概览:详细讲解了JVM与Java体系结构中的JVM架构篇。🌈⭕🔥

做一个善良的人,做好自己的事,如果愿意,再发一份光。 821

基于Ventoy制作单个U盘引导Windows+Linux+黑苹果macOS

一款国内高手开发的一个名为Ventoy的开源多系统启动U盘制作工具,官方链接:https://www.ventoy.net/cn/index.html Ventoy 特点 不影响U盘日常普通使用 直接从ISO文件启动,无需解开 支持MBR和GPT分区格式(1.0.15+) 支持超过4GB的ISO文件 支持大部分常见操作系统, 已测试650+ 个ISO文件 不仅仅是启动,而是完整的安装过程 版本升级时数据不会丢失 Ventoy 待改进 不支持macOS和ChromeOS 准备2个空的U.

wybarcelona的博客 3万+

别再找在线API了!用C#调用微信电脑版自带的OCR,本地识别又快又准

本文详细介绍了如何利用C#调用微信电脑版内置的OCR引擎实现本地文字识别,解决传统云端API的隐私和网络依赖问题。微信OCR具备高精度中文识别、完全离线运行和零成本接入三大优势,特别适合企业文档电子化处理。通过实战代码演示了核心交互逻辑、批量处理流水线和表格数据提取等高级应用场景。

weixin_29295541的博客 588

【JVM速通】2. JVM 核心架构组成

这四个部分是如何协同工作的呢?你写的代码被编译成.class文件存放在硬盘上。类加载子系统把这个文件读入到 JVM 的运行时数据区(内存)。执行引擎开始从内存中抓取字节码。执行引擎一边通过解释器或JIT 编译器把字节码翻译成机器码交给 CPU 执行,一边在必要时通过本地接口去调用操作系统的底层功能。JVM 运行时内存区域的具体划分(即堆、栈、元空间等)。

MUKOU_AOI的博客 188

利用Solidworks2020将挖掘机装配体转换为URDF模型

利用Solidworks2020将挖掘机装配体转换为URDF模型一、下载sw_urdf_exporter插件 URDF(Universal Robot Description Format)——通用机器人描述格式,它是ROS里边使用的一种机器人的描述文件,包含的内容有:连杆、关节,运动学和动力学参数、可视化模型、碰撞检测模型等。 一、下载sw_urdf_exporter插件 ROS提供了SolidWorks转URDF的插件(下载链接)—sw2urdfSetup.exe,下载后点击安装,安装完成后就能在sol

weixin_48192326的博客 6097

、为什么jvm要使用解释器和编译器共存的架构_JVM系列-2.JVM架构简介

架构简介JVM架构图JVM的架构核心包括以下几部分:类加载子系统:主要用于加载字节码文件到运行时数据区,也就是将class文件中的内容加载到方法区中,用于完成类加载的过程。主要包括加载、链接和初始化三个过程。运行时数据区:运行时数据区主要存储的是程序运行过程中的数据,比如实例化后的对象、静态变量、局部变量等等,不同的数据对应存储的位置也不相同。主要包括:堆、方法区、栈、程序计数器和本地方法栈,通常...

weixin_35065221的博客 161

SAP FICO 银企直连

银企直联或者自动付款的目的是和银行做一个接口,把SAP中的到期应付款(也包括预付款)按照一定格式(银行要求的)在审批后发送给银行,请银行按照这个付款指定进行付款,并跟踪付款状态的过程,这个过程在SAP中如何实现呢?根据个人项目经验,客户需求可分为如下三种: 1. 第一种是完全不自动方式,仅批量生成付款凭证,实际的付款还是通过原来的流程执行,和银行没有任何接口; 2. 第二种是半自动方式,这种方式下需要按照银行的要求的格式生成付款条件,然后把付款文件下载下来,通过企业版的网银接口把付款文件进行上载,提交后

IamRunjiang的博客 9287

2025华为OD 面试手撕代码真题【字符串至多删除一个字符,是否能构成回文串】

2025华为OD 面试手撕代码真题【字符串至多删除一个字符,是否能构成回文串】

MISAYAONE的博客 1703

图解JVM整体结构、执行流程以及2种架构模型,你学会了吗?

iconst_2 // 常量2入栈 istore_1 iconst_3 // 常量3入栈 istore_2 iload_1 iload_2 iadd //常量2/3出栈,执行相加 istore_0 // 结果5入栈。在大部分情况下,基于寄存器架构的指令集往往都以一地址指令、二地址指令和三地址指令为主,而基于栈式架构的指令集却是以零地址指令为主。Java 编译器输入的指令流基本上是一种基于栈的指令集架构,另外一种指令集架构则是基于寄存器的指令集架构。由于跨平台性的设计,Java 的指令都是根据栈来设计的。

m0_63437643的博客 133

别再瞎改网络结构了!解决YOLO小目标检测痛点,我用这招把mAP提了15%

本文基于我7年工业PCB缺陷检测、无人机航拍、安防监控项目的一线落地经验,针对YOLO小目标检测最痛的「漏检率高、特征丢失、精度难提升」三大核心问题,拆解出。本文全程配套小目标特征丢失原理图、分块训练流程图、切图前后效果对比图、mAP提升柱状图、多方案性能对比表等可视化内容,从YOLO天生不擅长小目标的底层根源、方案核心原理、可直接复制的代码实现,到工业场景实测验证、新手必踩的10个坑位避坑指南,全链路讲透。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 386

2. JVM的架构模型和生命周期

通过上面的一些比较,虽然暂时还不明白底层的实现逻辑,但是先get到一点,因为不同的CPU架构,寄存器的设计是不一样的,所以不能设计为基于寄存器的方式,否则无法兼容。基于栈的方式,规避了寄存器的限制,但是指令集更小,所以完成一个操作需要执行的指令就更多,自然也就导致执行效率相比于寄存器架构低。

工作学习总结,技术分享 774

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

【架构师面试-JVM原理-2】-JVM加载类过程

1:Java程序运行时整体架构 Java通过latcher程序启动JVM,通过类加载器加载类,先加载类的元数据信息,包括类编译好的方法指令,这些信息先放在Method Area。 Method area中的数据就是运行时的数据(Runtime Data),而这些数据有一部分是指令,这些指令需要运行必须依靠线程。线程执行就需要stack和ProgramCounter,这两部分配合起来执行程序就需要使用heap(对象初始化需要heap),如果调用了JNI(java native interface.

chongfa2008的博客 228

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

、为什么jvm要使用解释器和编译器共存的架构_JVM整体结构、执行流程以及2种架构模型...

JVM整体结构HotSpot VM 是目前市面上高性能虚拟机的代表作之一。方法区和堆:多线程共享虚拟机栈、本地方法栈、程序计数器:每个线程独有一份执行引擎:包含三部分:解释器,及时编译器(后端编译器),垃圾回收器它采用解释器与即时编译器并存的架构。在今天,Java 程序的运行性能早已脱胎换骨,已经达到了可以和 C/C++ 程序一较高下的地步。Java 代码执行流程只是能生成被 Java 虚拟机所能...

weixin_33187554的博客 90

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

【JAVA架构师成长之路】【JVM内存模型】第2集:JVM常用垃圾收集器

通过以上设计,可在15分钟内掌握JVM主流垃圾收集器的核心特性与适用场景,为实际系统调优提供理论支撑。如需深入某收集器实现细节(如G1的Region划分),可进一步查阅源码或专项文档。JVM提供多种收集器,根据场景需求选择不同实现策略。说明垃圾收集器的核心目标——

因为热爱,所以付出 715

享学堂-架构师网课笔记-JVM-L2

笔记 运行加载 1,jvm的运行流程,先往操作系统中申请一块连续的内存空间,根据内存大小找到具体分配表,根据内存的起始位置和终止位置分配给jvm然后jvm进行内部分配。 2,jvm根据运行参数分配堆,方法区和堆内存的空间大小 3,类加载,加载类信息到方法区,还有类中的静态变量也要加入方法区 4,执行方法区创建对象,运行main方法线程,创建栈空间 static class Teacher{ String name; public String getName() { return n

u013325225的博客 289

dalvik虚拟机执行流程_JVM整体结构、执行流程以及2种架构模型

JVM整体结构HotSpot VM 是目前市面上高性能虚拟机的代表作之一。方法区和堆:多线程共享虚拟机栈、本地方法栈、程序计数器:每个线程独有一份执行引擎:包含三部分:解释器,及时编译器(后端编译器),垃圾回收器它采用解释器与即时编译器并存的架构。在今天,Java 程序的运行性能早已脱胎换骨,已经达到了可以和 C/C++ 程序一较高下的地步。Java 代码执行流程只是能生成被 Java 虚拟机所能...

weixin_29661797的博客 139

【Sofice小司笔记】2 JVM,包含jvm体系结构,内存区域,GC机制,类加载机制,Hotspot虚拟机架构等

OpenJDK源代码:http://hg.openjdk.java.net/jdk/jdk11 JVM 体系结构 JVM 的结构基本上由 4 部分组成: 类加载器,在 JVM 启动时或者类运行时将需要的 class 加载到 JVM 中 执行引擎,执行引擎的任务是负责执行 class 文件中包含的字节码指令,相当于实际机器上的 CPU 内存区,将内存划分成若干个区以模拟实际机器上的存储、记录和调度功能模块,如实际机器上的各种功能的寄存器或者 PC 指针的记录器等 本地方法调用,调用 C 或 C

Sofice小司的小星球 662

面试问题之:Dalvik VM和JVM的区别(2)---架构层

(1) Dalvik VM和JVM 的第一个区别是 Dalvik VM是基于寄存器的架构(reg based),而JVM是栈机(stack based)。reg based VM的好处是可以做到更好的提前优化(ahead-of-time optimization)。 另外reg based的VM执行起来更快,但是代价是更大的代码长度。(2) 另外一个区别是Dalvik可以允许多个instance 运

张拭心的博客 shixinzhang 1862

Java最全8年开发架构师浅析SpringBoot的JVM的内存占用与Docker-spring(2),spring并发+JVM调优把我直接问懵了

如果你选择了IT行业并坚定的走下去,这个方向肯定是没有一丝问题的,这是个高薪行业,但是高薪是凭自己的努力学习获取来的,这次我把P8大佬用过的一些学习笔记(pdf)都整理在本文中了JVM的非堆内存分为几个不同的区域。我们可以使用HotSpot VM的本机内存跟踪(NMT)来检查这些区域的内存使用情况。请注意,虽然NMT不跟踪所有原生本机Native内存使用情况(例如,它不跟踪第三方本机代码内存分配),但对于大类典型的Spring应用程序来说已经足够了。

2401_84557849的博客 801

《架构风清扬-Java面试系列第2讲》谈JDK,JRE,JVM有什么区别?

谈谈JDK、JRE、JVM的区别

架构风清扬 185

放弃微服务:我们如何用单体架构支撑多端B2B2C商城?—— SHOPTNT模块化设计与实战

今天,我想分享我们如何在单体架构下,通过清晰的模块化设计,来实现平台、商户、买家三端的复杂业务隔离与协作。技术选型没有银弹,适合自己的才是最好的。| | buyer-api | | seller-api | manager-api| <- 不同的Controller层。| | (买家端API) | | (商家端API) | (管理端API) | 接收各自终端的请求。:保证了“业务逻辑的唯一性”。的设计,我们在享受单体应用简单性的同时,也获得了近似微服务的清晰边界和模块化好处。

qq_25093429的博客 1270

大型互联网公司必备的架构技术栈——分布式架构、高可扩展、高性能、高并发、性能优化、Spring boot、Redis、ActiveMQ、Nginx、Mycat、Netty、Jvm大型分布式项目实......

性JVM调优Java程序性能优化TomcatMysqlSpring IOCSpring AOPSpring MVCSpring 5新特性Mybatis 分布式架构架构核心服务层技术架构关键技术设施分布式消息通讯 异步于MQ分布式缓存RedisMemcachedMongoDB数据存储高并发分流技术Nginx分布式解决方案 应用框架源码解读...

xingduan5153的博客 915

docker容器jvm调优_JVM微服务–如何在Windows上运行Docker容器

docker容器jvm调优 微服务是最响亮的IT流行语之一,每个人都急于尝试。 但是Linux和MacOS用户免费获得的Windows并不是那么容易。 本指南显示了如何设置Windows环境以运行Docker容器,作为微服务架构项目的基础。 词汇表 GIT-SCM – 用于Windows的Git项目,包含git , bash和其他Linux工具 环境变量 – Windows环境变...

danpob13624的博客 432
上一篇: jvm(1)深入理解java虚拟机笔记
下一篇: jvm(3)类加载器
王小禾
博客等级 码龄11年 80粉丝 291原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值