JVM原理之运行时数据区

2025年有道翻译网页版JS逆向实战:从抓包到AES解密,手把手教你搞定sign签名 本文详细解析2025年有道翻译网页版的JS逆向实战,从抓包分析到AES解密全流程。通过实战演示签名生成机制和AES-CBC解密技术,帮助开发者破解有道翻译的反爬系统,实现高效数据获取。重点涵盖动态密钥处理、错误重试机制及反反爬策略,为开发者提供完整的技术解决方案。 阅读详情
JVM虚拟机
1. JVM在运行时主要包含java堆,方法区,程序计数器,JVM栈,本地方法栈。其中JAVA堆和方法区归所有线程共有,而JVM栈和程序计数器归线程私有。
程序计数器
  1. 程序计数器主要是执行线程中的指令,在多核环境中,线程需要进行切换。线程获得CPU的执行后要恢复到原来的执行位置,这就是需要程序计数器保存当前线程执行位置。每个线程都有自己独立的计数器。
  2. 如果线程正在执行一个JAVA方法,则程序计数器记录的是当前字节码指令。
虚拟机栈
  1. JAVA虚拟机栈是线程私有的,生命周期与线程相同。虚拟机栈描述的是java方法的内存模型。每个方法在执行时,线程都会创建一个栈帧,用于存储局部变量表,操作数栈,动态链接,方法出口等信息。
    1.1 局部变量表存储了基本类型和引用类型和returnAddress类型。局部变量表的空间在编译期间已经确定,在方法运行期间不会改变。
  2. 每一个JAVA方法的执行实际上就是栈帧在的入栈和出栈操作。
本地方法栈
  1. 本地方法栈是JVM虚拟机用来调用本地方法,不同的虚拟机实现本地方法栈不同。
JAVA堆
  1. JAVA堆是JVM内存管理中最大的一块内存区域,是所有线程共享的区域。堆在JVM启动时创建,主要存放对象实例和数组。JAVA堆可以处于物理上不连续的空间,只要逻辑上连续即可。
  2. 现在的垃圾收集主要采用分代收集,通常将JAVA堆分为新生代和老年代。其中,新生代又分为Eden区,from surivior区,to surivior区。通常Eden区和surivior区比例为8:2。
  3. 堆的大小都是可以控制的,通过-Xms和-Xmx进行控制。
方法区
  1. 方法区同java堆一样,都是所有线程共享的区域,主要存储被加载类的信息,常亮,静态变量,及时编译器变异后的代码。
  2. 对于HotSpot而言,GC分代收集时,会回收方法区,也称方法区为”永久代”。这样垃圾收集器就可以像管理java堆一样管理方法区的内存。
  3. 垃圾收集行为在方法区是很少出现的,即使出现了,回收内存成果也是不怎么好。在方法区进行垃圾回收主要是回收常亮池和类型的卸载。
运行时常量池
  1. 运行时常量池是方法区的一部分。Class文件中除了有类的版本,字段,方法,接口等信息,还有一项信息就是常量池。
  2. 常量池另外一个重要特征就是动态性,运行期间也可以将新的常量放入池中。常量池中主要存放符号引用和各种字面量。
直接内存
  1. JDK中NIO,采用了通道和缓冲一种新的I/O方式,NIO可以采用Native函数直接分配堆内存以外的内存。即不占用JVM内存。
  2. 在JVM中同时存储了一个DirectByteBuffer对象,它可以直接操纵直接内存。DirectByteBuffer对象的引用指向直接内存。
  3. 直接内存的存在避免了JVM和本地堆中来回复制数据。

对象创建

  1. 在应用程序中当生成一条New指令时,JVM就会从常量池中寻找代表该类型的符号引用,如果能找到该类的类型符号,则说明已经加载该类。如果没有找到,则需要重新加载该符号代表的类。
  2. 找到代表该类的符号引用,JVM会分配一块与该对象大小相等内存空间。分配内存空间时,可以采用指针碰撞法或空闲列表方式。
    这里写图片描述
对象访问定位
  1. 在JVM堆中生成对象之后,访问对象的方式主要通过reference来访问。在JVM中reference类型在JVM规范中只规定了一个指向对象的引用,但是没有规定通过何种方式去定位,查找到对象。
  2. 目前主流的reference访问对象方式主要有通过句柄和直接指针两种方式。在流行的HotSpot中,采用直接指针方式进行定位对象。
    2.1 直接指针访问是指 reference中存放了对象实例的指针(即对象地址)和对象类型数据指针的地址,通过reference可以直接在堆中定位到对象实例。对象类型的指针也是存放在堆中,但是该类型数据存放在方法区中。说起来有点拗口,通过图可以直观表示一下:
    这里写图片描述
    2.2 句柄方式访问是指在JVM堆中单独分配一块内存,用来存放句柄池。句柄池中存放的是都是句柄,而句柄中包含了对象实例数据与对象类型数据的地址信息。reference中存放的是句柄的地址。
    这里写图片描述
    2.2.1 上图可以看出,使用句柄访问对象时,reference中存放的是句柄的地址,句柄是存放在JVM堆中的句柄池中,句柄中存放了对象数据实例指针和对象类型数据指针。
uniapp - 解决苹果ios真机运行报错:错误:请查看是否设备未加入到证书列表或者确认证书类型是否匹配(HbuilderX运行IOS手机出现问题,uniapp运行到IOS真机提示请查看是否设备未) uni-app,ios苹果,App平台端,uniapp运行到IOS真机提示错误:请查看是否设备未加入到证书列表或者确认证书类型是否匹配,UUID在哪里,uniApp运行到ios真机报错解决,安装自定义基座App失败,没找到有计划资源,证书、标识符和描述文件,证书标识符和描述文件下面没有选项怎么回事,HBuilder真机调试报错请查看是否设备未加入到证书列表或者确认证书类型是否匹配,UniApp运行到IOS真机提示,授权的设备才可以直接安装基座,添加调试的IOS设备,在Devices中,添加手机设备UUID 阅读详情

相关推荐

【深度学习】肺结节分割项目实战一:处理数据集

一、LIDC-IDRI数据集简介 官方网站 肺图像数据库协会的图像收集(LIDC-IDRI)包括诊断和带有病变注释标记的肺癌筛查胸部CT。这是一个网络公开的国际资源,用于肺癌检测和诊断的计算机辅助诊断(CAD)方法的开发、培训和评估。 数据集包含1018个病例,每个病例包括来自临床胸部CT扫描的图像和一个相关的XML文件,该文件记录了由四名经验丰富的胸部放射科医生进行的两阶段图像注释过程的结果。在最初的盲读阶段,每个放射科医生独立审查每个CT扫描,并标记出属于三种类型之一的病变(“结节>= 3mm”,

weixin_42182906的博客 1万+

JVM运行时数据区

常见JVM面试题及答案整理 1、运行时数据区的结构 运行时数据区包括,方法去、堆、pc计数器、本地方法区和虚拟机栈。其中方法区在JDK8中更名为元空间。程序计数器和虚拟机栈都不会发生GC,程序计数器也不会发生溢出异常,虚拟机栈有溢出错误。堆空间和方法区有GC和OOM异常,但是方法区GC条件苛刻,GC效率低,GC主要发生在堆区。 2.虚拟机栈栈帧的组成 虚拟机栈由一个个的栈帧组成,栈帧的大小决定了栈的最大深度,而栈帧的大小主要取决于局部变量表和操作数栈。 ...

cl19950327的博客 1396

COMSOL网格划分技巧总结

在对马赫曾德尔型光学传感器进行模拟仿真时,在采用自动物理场自动控制网格-极细化的情况下透射谱曲线仍不理想,因此需要手动划分网格来对其进行更精细的剖分。 手动划分的基本原则是在作用边界,热点,曲边处做细致划分, 基底,包层等做粗略划分。对于光波导型的微纳结构,在仿真时一般需要用到创建边界层网格。 1.COMSOL所需要的网格数量 网格单元数越多,结果精细度越高,计算所需内存越多。在细化到一定程度后网格收敛,仿真结果提升不明显。 2.网格剖分类型 ...

qq_42453337的博客 4万+

JVM——运行时数据区域

一、运行时数据区的结构 如上图,运行时数据区包括五个部分,红色区域多个线程共享,灰色区域每一个线程独占, 在java API ,一个java虚拟机就对应一个Runtime类,一个Runtime就对应一个运行时数据区。 1.1 程序计数器 程序计数器用来存储指向下一条指令的地址,也即将要执行的指令代码,由执行引擎读取下一条指令。不会出现OutOfMemoryError情况,也没有GC(垃圾回收) Code: stack=2, locals=4, args_s...

qq_41891244的博客 4792

从零到精通:ROS2 MoveIt2与MPC机械臂轨迹规划的完整配置流程

本文详细介绍了ROS2 MoveIt2与MPC机械臂轨迹规划的完整配置流程,从环境准备到高级功能扩展,帮助开发者实现精准控制。通过集成模型预测控制(MPC),机械臂能够优化复杂轨迹规划,处理动态避障,提升工业自动化效率。

juice的博客 707

【TC3xx芯片】TC3xx芯片电源管理系统PMS详解

本文主要介绍了TC3xx芯片的电源管理系统(PMS),重点探讨了供电模式选择、电源监控机制及电源管理模式。文章首先分析了4种供电模式及其硬件配置方式,详细说明了3.3V单电源供电模式的特点;其次阐述了Primary和Secondary两种电源监控机制,包括阈值配置和异常中断处理;最后重点讲解了CPU和系统的电源管理模式,特别对Standby模式及其进入/退出条件进行了详细说明。文章以软件开发视角解析了TC3xx芯片的电源管理功能,为ECU低功耗设计提供了技术参考。

redparrot2008的博客 1528

JVM系列之运行时数据区

1、运行时数据区 Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域,这些区域有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而一直存在,有些区域则是依赖用户线程的启动和结束而建立和销毁。 根据《Java虚拟机规范》的规定,Java虚拟机所管理的内存将会包括以下几个运行时数据区域虚拟机栈、堆内存、程序计数器、方法区、本地方法栈 虚拟机栈、本地方法栈、程序计数器为线程私有 方法区、堆内存为线程共享 1.1、程序计数器(Program Counter R

prefect_start的博客 1538

西门子AI面试问答(STAR法则回答实例)

通过建立良好的沟通渠道、倡导透明和积极的沟通,并建立信任和共享目标的文化,我成功地改善了团队合作的氛围和效果。对于一些存在分歧和冲突的情况,我采用了积极的解决问题的态度,促进双方的沟通和理解,寻找共同的利益点和解决方案。我的成果得到了评委和观众的认可,并为我的学术发展和进一步的科学研究奠定了基础。首先,我主动与团队成员进行一对一的沟通,倾听他们的观点和意见,了解他们在合作中遇到的问题和需求。我还参加了学校组织的科学俱乐部和研究小组,与其他热衷科学的同学一起进行讨论和实验,加深我的理解和实践技能。

kashine的博客 7249

【JVM基础篇】JVM运行时数据区

本文深入剖析了Java运行时数据区的关键组成部分,包括程序计数器、Java虚拟机栈、本地方法栈、堆内存、方法区以及直接内存的概念与作用。特别强调了程序计数器在控制指令执行流程中的重要性,Java虚拟机栈与本地方法栈在方法调用过程中的数据管理,以及堆内存和方法区在对象存储和类信息保存方面的作用。同时,介绍了直接内存的引入背景及其在提高IO操作效率上的优势,并探讨了JDK7及以后版本中字符串常量池和静态变量存储位置的变化,以及如何通过ByteBuddy框架动态创建类以测试方法区的内存溢出情况。

我只管埋头前行,剩下的交给时间。 1557

C#解析基恩士(KEYENCE)PLC数据:KV协议通信与实时监控实现

KV协议是基恩士PLC使用的一种专用通信协议,通常用于与上位机进行数据交换。KV协议通过RS-232C、RS-485、Ethernet等接口与上位机通信,支持多种数据类型的读写,包括但不限于位、字、双字、浮点数等。简洁易用:KV协议的通信格式简单,易于实现。支持多种数据类型:支持位数据、字数据、定长字符串等。高效实时性:能够提供较高的实时数据交换性能,适合实时监控应用。本文介绍了如何通过C#与基恩士KV系列PLC进行通信,实现数据的解析和实时监控功能。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1807

Centos 7 Linux 离线安装使用 MySQL 5.7:下载、安装、配置、使用

本文详细介绍了在 CentOS 7 系统下离线安装 MySQL 5.7 的完整流程,包括环境准备、安装包下载、用户与目录配置、数据库初始化、服务启动与自启设置、root 密码修改、远程访问开启及防火墙配置等关键步骤,并提供了本地与远程客户端(如 Navicat、DBeaver)的连接使用方法,适合无网络环境下的数据库部署参考。

寒水馨 · 轻量级技术文档 · hanshuixin.org 6112

JVM运行时数据区结构及原理

下图红色区域(即堆和方法区):一个进程对应一份,一个进程可以有多个线程,即是线程共享的。JVM允许一个应用有多个线程并行执行 灰色区域(即PC、栈、本地栈):每个线程都拥有一份,即是线程独立的。 每个JVM只有一个Runtime实例(即运行时数据区)。 ...

S mile0804的博客 1815

面向元数据的 SAP UI 中枢:namespace sap.ui.mdc 全景解析

如果把应用前端比作一条数据到交互的装配线,sap.ui.mdc 就是那条线的标准化工装:以 PropertyInfo 描述原料,以 Delegate 定义装配方法,以 p13n 与 VariantManagement 交付面向个体的最终产物;而 Condition Model、Operator 与 ValueHelp 则让输入与筛选的语义落地。与 OData V4 服务与 Fiori Elements 宏构件组合使用时,它能在保持一致体验的同时,给自由式开发者留下足够的可编排空间。

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

JVM原理之运行时数据区域

Java运行时数据区(Runtime Data Area)是Java虚拟机(JVM)在运行Java程序时内部维护的一系列数据区域。这些区域共同协作,确保Java程序能够高效、稳定地运行。本文将详细介绍Java运行时数据区的结构和作用。

ningkangming的博客 887

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

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

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

JVM组成原理(运行时数据区)

JVM组成原理(运行时数据区) JDK、JRE、JVM关系 jdk包含jre,同时还包括一些用来开发java程序使用到的像编译和debug的工具。jre主要是类库,jvm和一些其它运行java程序所使用到的组件。 JVM简介 JVM宏观上来说是一套规范,这个规范用来说明实现一个具体的JVM需要符合哪些标准,遵从哪些规范。我们知道java是一次编译到处运行的一种语言。为了达到这种

huangshulang1234的博客 622

假人有限元模型

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

【JVM原理】运行时数据区(内存结构)

Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有些区域则依赖用户线程的启动和结束而建立和销毁。

m0_66584716的博客 1476

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

JVM原理之运行时数据区详解

4. 运行时数据区 关于运行时数据官方解释:https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-2.html#jvms-2.5 4.1 堆 (heap) 堆在虚拟机中是一块共享区域, 存放 对象实例 和数组; 堆在虚拟机启动的时候创建。 可调整堆的大小 堆内存不够的时候会发生OOM java.lang.OutOfMemoryEr...

小哥的博客 357

深入理解JVM底层原理——运行时数据区

运行时数据区概述和线程 1.运行时数据区概述 ! 内存是非常重要的系统资源,是硬盘和CPU的中间仓库及桥梁,承载着操作系统和应用程序的实时运行。JVM内存布局规定了Java在运行过程中内存申请、分配、管理的策略,保证了JVM的高效稳定运行。不同的JVM对于内存的划分方式和管理机制存在着部分差异。结合JVM虚拟机规范,来探讨一下经典额JVM内存布局。 Java虚拟机定义了若干种程序运行期间会使用到的运行时数据区,其中有一些会随着虚拟机的启动而创建,随着虚拟机退出而销毁。另外一些则是与线程一一对应...

m0_46925568的博客 249

JVM原理--运行时数据区域

本文介绍Java的运行时数据区域。

IT利刃出鞘的博客 1万+

JVM原理及优化_运行时数据区

在java中最小的执行单位是线程,线程是要执行指令的,执行的指令最终操作的就是我们的电脑,就是 CPU。操作数栈:操作数栈就是用来操作的,例如代码中有个 i = 6*6,他在一开始的时候就会进行操作,读取我们的代码,进行计算后再放入局部变量表中去。如果一个栈中有动态链接调用别的方法,就会去创建新的栈帧,栈中是由顺序的,一个栈帧调用另一个栈帧,另一个栈帧就会排在调用者下面。栈指向堆是什么意思,就是栈中要使用成员变量怎么办,栈中不会存储成员变量,只会存储一个应用地址,堆中的数据等下讲。栈指向堆是什么意思?

IT二叔的博客 148

《Java虚拟机原理图解》3、JVM运行时数据区

JVM运行时数据区(JVM Runtime Area) 其实就是指JVM在运行期间,其对计算机内存空间的划分和分配。本文将通过以下几个话题来讨论JVM运行时数据区。 Topic 1. JVM运行时数据区 里有什么?Topic 2. 虚拟机栈 是什么?虚拟机栈 里有什么?Topic 3. 栈帧是什么?栈帧 里有什么?Topic 4. 方法区 是什么?方法区 里有什么?

我的程序人生(亦山札记) 2万+

浅谈JVM虚拟机运行时数据区运行原理

前言: Java程序运行的过程中,JVM会将其所管理的内存划分成若干个区域,统称为是运行时数据区。其中,一些线程间共享的区域,随着JVM的启动而创建,JVM的退出而销毁;另一些线程私有的区域,则随着线程的开始而创建,线程的结束而销毁。如图所示,运行时数据区由以下几个区域所组成:程序计数器、Java虚拟机栈、本地方法栈、方法区、堆。 ...

Alex_thomas的博客 1590

JAVA虚拟机原理图解 及 JVM运行时数据区

JVM运行时数据区(JVM Runtime Area)其实就是指JVM在运行期间,其对计算机内存空间的划分和分配。本文将通过以下几个话题来讨论JVM运行时数据区。 Topic 1. JVM运行时数据区里有什么? Topic 2. 虚拟机栈 是什么?虚拟机栈里有什么? Topic 3.栈帧是什么?栈帧里有什么? Topic 4. 方法区是什么?方法区里有什么? Topic 1.JVM运行时数据区里有什么? Topic 2. 虚拟机栈是什么?虚拟机栈里有什么? Topic 3. 栈帧..

m0_60237095的博客 174

3.6_5 【JVM原理】 P4 JVM运行时数据区

相关链接JVM虚拟机 + 执行引擎 + 本地方法接口  概述      Java 与 C++ 之间有一堵由内存动态分配和垃圾收集技术所围成的高墙,墙外面的人想进去,墙里面的人却想出来。     对于从事 C、C++ 程序开发的开发人员来说,在内存管理领域,他们既是拥有最高权力的 “皇帝”,又是从事最基础工作的劳动农民——既拥有每一个对象的 “ 所有权 ”,又担负着每一个对象生命从开始到终结的维护责任。     对于 Java 程序员来说,在虚拟机自动内存管理机制的帮助下,不再需要为每一个 new 操作去配对

GroupiesM的博客 640

JVM底层原理分析:1.JDK体系、JVM架构和运行时数据区

1.JDK体系结构 【组成部分】 组件 说明 Java基础命令 如java、javac、javadoc等 JRE(Java运行时环境) 由各个组件组成,如JDBC、JVM等 【如图】 2.JVM内部结构 【组成部分】 组件 说明 类加载器 读取.class文件,并生成class对象,并将其加载到内存中 运行时数据区(内存模型) 为生成的class对象提供的生存空间 字节码执行引擎 用于调用内存区中的class对象并执行代码逻辑,以及执行GC操作等 【如图

桔子 500
上一篇: Oracle索引原理
下一篇: JVM原理之内存分配参数
鸡蛋达芬奇
博客等级 码龄19年 24粉丝 34原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值