运行时数据区(run-time data areas)

首先,我们应该通过题目了解到上下文是什么:run-time即运行时,即jvm启动时及启动后的存储数据的区域,而且这片区域以内存作为存储媒介,这些区域有些生命周期是随着jvm的启动和销毁而存在,有些区域则是线程维度的;为什么要将内存下面六部分,而不是七部分呢?不知道,那就先看一下这六部分的分工呗。

程序计数器(pc register)

线程私有区域,针对Java方法(非native方法),记录的是当前方法(the current method)正在执行的虚拟机字节码指令的地址(也就是执行到字节码什么位置了),如果执行native方法,计数器值为空。

存在的意义是什么:cpu执行期间,线程切换后能恢复到正确的执行位置。

虚拟机栈(jvm stacks)

我们通过它的stacks这个复数可以分析出来,这是一坨stack的聚会区域,那一个stack又是什么呢?一个stack也是线程私有区域,生命周期与线程一样,每个jvm stack存储多个栈桢(frame:对应一个方法),用官方的话就是:A Java Virtual Machine stack stores frames,

存在的意义是什么:jvm stack用来存储本地变量和部分计算结果,主要用于方法的调用和返回信息

内存管理特点:内存区域可以不连续(a Java Virtual Machine stack does not need to be contiguous),可以固定,也可以根据使用情况动态扩展。

虚拟机栈其实就是存储和管理栈桢的,下面咱们说说栈桢(stack frame)

栈桢(stack frame)

栈桢用于存储数据和部分结果,包括动态链接(dynamic link),方法返回值以及派发异常

栈桢的生命周期:方法被调用时创建一个栈桢 ,方法调用完成销毁

栈桢是用于方法调用,所以涉及方法的调用主要就需要考虑方法内部的变量,变量的指令运算,以及引用的方法外部的变量,所以栈桢由三个组成部分:

  • 栈桢自己所有的局部变量表(它是一个array数组呦)
  • 栈桢自己所有的操作数栈(用于变量计算)
  • 当前方法类的运行时常量池(run-time constant pool)的引用

局部变量表(local variables)

局部变量表是一个数组,数组的长度在编译期就已经确定,通过所在类或接口的二进制表示形式表示(其实就是记录到字节码文件上),并且通过index定位,默认index第一位为this。

操作数栈(operand stacks)

这个不多说了,就是一个后进先出的一个栈,用于方法调用的指令计算

动态链接(dynamic link)

说到动态链接需要先说一下符号引用,想想jvm的上下文:一个java类将会编译成一个class文件,在编译时,java类并不知道所引用的类的实际内存地址,因此只能使用符号引用来代替,这就产生了符号引用。

基于符号引用,动态链接负责将符号引用转换为具体引用 。

heap(堆)

jvm共享内存,用于存放实例和数组,通过gc统一管理

方法区(method area)

jvm共享内存,存储类的结构(例如run-time constant pool),属性,方法,虽然方法区在逻辑上是堆的一部分,但简单实现上,jvm不强制要求使用垃圾收集或压缩,也不强制要求管理编译代码的策略

运行时常量池(run- time constant pool) 

运行时常量池是在一个class文件中的常量池表,这个表的内容是每个class或每个interface运行时的表示形式。它包含几种常量,从编译时已知的数值文本到运行时必须解析的方法和字段引用。运行时常量池的功能类似于传统编程语言的符号表,但是它包含比典型符号表更广泛的数据范围。

存储区域:在方法区(method area)

本地方法栈(native method stacks)

线程私有

2025-06-19 09:08:06 - INFO - 脚本启动 2025-06-19 09:08:06 - INFO - 输出目录: C:/pyMet/figures 2025-06-19 09:08:06 - INFO - 导入依赖库... 2025-06-19 09:08:07 - DEBUG - Could not import boto3, continuing with reduced functionality. 2025-06-19 09:08:07 - DEBUG - GDAL data found in package: path='C:\\Python313\\Lib\\site-packages\\rasterio\\gdal_data'. 2025-06-19 09:08:07 - DEBUG - PROJ data found in package: path='C:\\Python313\\Lib\\site-packages\\rasterio\\proj_data'. 2025-06-19 09:08:09 - DEBUG - matplotlib data path: C:\Python313\Lib\site-packages\matplotlib\mpl-data 2025-06-19 09:08:09 - DEBUG - CONFIGDIR=C:\Users\Administrator\.matplotlib 2025-06-19 09:08:09 - DEBUG - interactive is False 2025-06-19 09:08:09 - DEBUG - platform is win32 2025-06-19 09:08:09 - DEBUG - CACHEDIR=C:\Users\Administrator\.matplotlib 2025-06-19 09:08:09 - DEBUG - Using fontManager instance from C:\Users\Administrator\.matplotlib\fontlist-v390.json 2025-06-19 09:08:10 - DEBUG - Could not import boto3, continuing with reduced functionality. 2025-06-19 09:08:10 - DEBUG - GDAL data found in package: path='C:\\Python313\\Lib\\site-packages\\fiona\\gdal_data'. 2025-06-19 09:08:10 - DEBUG - PROJ data found in package: path='C:\\Python313\\Lib\\site-packages\\fiona\\proj_data'. 2025-06-19 09:08:10 - DEBUG - GDAL data found in package: path='C:\\Python313\\Lib\\site-packages\\fiona\\gdal_data'. 2025-06-19 09:08:10 - DEBUG - PROJ data found in package: path='C:\\Python313\\Lib\\site-packages\\fiona\\proj_data'. 2025-06-19 09:08:10 - INFO - 找到高程数据文件: D:/测试/GMTED2010_land.tif 2025-06-19 09:08:10 - INFO - 读取高程数据... 2025-06-19 09:08:10 - DEBUG - Entering env context: <rasterio.env.Env object at 0x0000027A35DB06E0> 2025-06-19 09:08:10 - DEBUG - Starting outermost env 2025-06-19 09:08:10 - DEBUG - No GDAL environment exists 2025-06-19 09:08:10 - DEBUG - New GDAL environment <rasterio._env.GDALEnv object at 0x0000027A35C17C70> created 2025-06-19 09:08:10 - DEBUG - Installing FilePath filesystem handler plugin... 2025-06-19 09:08:10 - DEBUG - GDAL data found in package: path='C:\\Python313\\Lib\\site-packages\\rasterio\\gdal_data'. 2025-06-19 09:08:10 - DEBUG - PROJ data found in package: path='C:\\Python313\\Lib\\site-packages\\rasterio\\proj_data'. 2025-06-19 09:08:10 - DEBUG - Started GDALEnv: self=<rasterio._env.GDALEnv object at 0x0000027A35C17C70>. 2025-06-19 09:08:10 - DEBUG - Entered env context: <rasterio.env.Env object at 0x0000027A35DB06E0> 2025-06-19 09:08:10 - DEBUG - Sharing flag: 0 2025-06-19 09:08:10 - DEBUG - Nodata success: 1, Nodata value: 32767.000000 2025-06-19 09:08:10 - DEBUG - Dataset <open DatasetReader name='D:/测试/GMTED2010_land.tif' mode='r'> is started. 2025-06-19 09:08:10 - DEBUG - Exiting env context: <rasterio.env.Env object at 0x0000027A35DB06E0> 2025-06-19 09:08:10 - DEBUG - Cleared existing <rasterio._env.GDALEnv object at 0x0000027A35C17C70> options 2025-06-19 09:08:10 - DEBUG - Stopped GDALEnv <rasterio._env.GDALEnv object at 0x0000027A35C17C70>. 2025-06-19 09:08:10 - DEBUG - Exiting outermost env 2025-06-19 09:08:10 - DEBUG - Exited env context: <rasterio.env.Env object at 0x0000027A35DB06E0> 2025-06-19 09:08:10 - INFO - 获取山西地图数据... 2025-06-19 09:08:10 - INFO - 下载地图数据: https://geo.datav.aliyun.com/areas_v3/bound/140000.json 2025-06-19 09:08:10 - ERROR - 获取地图数据失败: 'NoneType' object has no attribute 'drvsupport'
最新发布
06-20
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值