中小学校网站建设兰州网络广告设计价格
- 作者: 五速梦信息网
- 时间: 2026年03月21日 03:48
当前位置: 首页 > news >正文
中小学校网站建设,兰州网络广告设计价格,洛阳专注网站建设的公司,一般网站的宽度是多少文章目录 目录 文章目录 运行时数据区域 程序计数器 栈 Java虚拟机栈 本地方法栈 栈帧的组成 局部变量表 操作数栈 帧数据 堆 方法区 直接内存 总结 运行时数据区域 Java虚拟机在执行Java程序的过程中会把它所管理的内存区域划分为若干个不同的数据区域。这些区…文章目录 目录 文章目录 运行时数据区域 程序计数器 栈 Java虚拟机栈 本地方法栈 栈帧的组成 局部变量表 操作数栈 帧数据 堆 方法区 直接内存 总结 运行时数据区域 Java虚拟机在执行Java程序的过程中会把它所管理的内存区域划分为若干个不同的数据区域。这些区域有各自的用途,以及创建和销毁时间,有的区域随着虚拟机进程的启动而一直存在,有的区域则是依赖用户线程的启动和结束而创建销毁。根据《Java虚拟机规范》的规定,Java虚拟机所管理的内存将会包括一下几个运行时数据区域。 程序计数器 程序计数器(Program Counter Register) 是一块较小的内存空间, 它可以看作是当前线程所执行的字节码的行号指示器。 在代码执行过程中程序计数器会记录下一行字节码指令的地址.执行完当前指令之后虚拟机的执行引擎根据程序计数器执行下一行指令 字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令, 它是程序控制流的指示器,分支循环,跳转,异常处理, 线程恢复等基础功能都需要依赖这个计数器完成。为了线程切换后可以恢复到正确的执行位置,每条线程都有一个独立的程序计数器。 线程切换情况下程序计数器工作流程展示 注: 图中显示的数字非真实地址,为了方便使用偏移量进行代替 图1: 线程A上CPU运行 图二: 等到线程A执行到7位置时,cpu切换到线程B上 图三: 线程B执行一段时间,再次切换,解释器读取PA中的信息,从7为位置开始继续执行 图四: 全部执行完毕! 栈 Java虚拟机栈 与程序计数器一样,Java虚拟机栈(Java Virtual Machine Stack) 也是线程私有的, 它的生命周期与线程相同。虚拟机栈描述的是Java方法执行的线程内存模型: 每个方法被执行的时候,Java虚拟机都会同步创建一个栈帧用于存储局部变量表,操作数栈,动态连接,方法出口等信息。每一个方法被调佣直至执行完毕的过程将对应一个栈帧从入栈到出栈的过程。 下面根据一个简单的Java类来分析一下流程 第一步: main方法入栈 第二步: study方法入栈 第三步: eat() 方法和 sleep() 相继入栈 第四步: 相继出栈 从顶部开始 本地方法栈 本地方法栈(Native Method Stack) 与虚拟机所发挥的作用是非常相似的,其区别只是虚拟机栈为虚拟机执行Java方法,而本地方法栈则是为虚拟机使用到的本地方法服务。 栈帧的组成 Java虚拟机以方法作为基本的执行单元, 栈帧 则是用于支持虚拟机运行方法调用和方法执行背后的数据结构, 它也是虚拟机运行时数据区中的栈元素。栈帧存储了局部变量表操作数栈动态连接和方法返回值地址等信息。 局部变量表 局部变量表(Local Variables Table) 是一组变量值的存储空间, 用于存放方法参数和方法内部定义的局部变量。在Java程序被编译为Class文件时,就在方法的Code属性的max_locals数据项中确定了该方法所需分配的局部变量表的最大容量。 栈帧中的局部变量表是一个数组数组中每一个位置称之为槽(插槽)、Long和Double类型占用两个槽其他类型占用一个槽 。 实例方法中的序号为0的位置存放的是This指的是当前调用方法的对象运行时会在内存中存放实例对象的地址 。 操作数栈 操作数栈也被称为操作栈 它是一个后进先出Last In Frist Out LIFO栈。同局部变量表一样操作数栈的最大深度也在编译的时候就被写入到Code属性的max_stacks数据项之中。操作数栈的每一个元素都可以是包括long和double在内的任意Java类型数据。 帧数据 帧数据主要包含动态链接方法出口异常表的引用。 动态链接 当前类的字节码指令引用了其他类的属性或者方法时需要将符号引用(编号)转换成对应的运行时常量池中的内存地址.动态链接就保存了编号到运行时常量池的内存地址的映射关系 方法出口 当一个方法开始执行后只有两种退出方式。第一种方式是执行引擎遇到任何一个方法返回的字节码指令, 这种退出方式称之为正常调用完成。另一种退出方式是在方法执行过程中出现了异常, 并且这个异常没有得到妥善处理,被程序直接抛出, 这种方式称之为 异常调用完成。 无论采用何种退出方式在方法退出之后都必须返回到最初方法被调用时的位置 程序才能继续运行方法返回时可能需要在栈帧中保存一些信息用来帮助恢复它的上层主调方法的执行状态。一般来说如果是正常退出主调方法的pc计数器的值就可以作为返回地址。而方法异常退出时返回地址需要借助异常处理表来进行确定。 异常处理表 堆 对于Java程序来说 Java堆Java Heap 是虚拟机所管理的内存中占用空间最大的一块。 Java堆是所有线程共享的一块内存区域在虚拟机启动时创建。此内存区域的唯一目的就是用来存放Java实例。 堆空间有三个需要关注的值usedtotal max。 used指的是当前已使用的堆内存、total 是Java虚拟机已经分配的可用堆内存、max是Java虚拟机可以分配的最大堆内存。 堆大小配置 要修改堆的大小可以使用虚拟机参数 –Xmxmax最大值和-Xms (初始的total)。 语法-Xmx值 -Xms值 单位字节默认必须是 1024 的倍数、k或者K(KB)、m或者M(MB)、g或者G(GB) 限制Xmx必须大于 2 MBXms必须大于1MB -Xms6291456 -Xms6144k -Xms6m -Xmx83886080 -Xmx81920k -Xmx80m 方法区 方法区Method Area和堆一样是各个线程共享的一块数据区域。主要包含三部分 类的元信息运行时常量池字符串常量池。 类的元信息 方法区是用来存储每个类的基本信息元信息一般称之为InstanceKlass对象。在类的加载阶段完成。 方法区除了存储类的元信息之外还存放了运行时常量池。常量池中存放的是字节码中的常量池内容。 字节码文件中通过编号查表的方式找到常量这种常量池称为静态常量池。当常量池加载到内存中之后可以通过内存地址快速的定位到常量池中的内容这种常量池称为运行时常量池。 JDK7及之前的版本将方法区存放在堆区域中的永久代空间堆的大小由虚拟机参数来控制。 ⚫ JDK8及之后的版本将方法区存放在元空间中元空间位于操作系统维护的直接内存中默认情况下只要不 超过操作系统承受的上限可以一直分配。 字符串常量池 方法区中除了类的元信息、运行时常量池之外还有一块区域叫字符串常量池(StringTable)。 字符串常量池存储在代码中定义的常量字符串内容。 字符串常量池和运行时常量池的关系 练习题 第一题 false 第二题 intern方法 String.intern()方法是可以手动将字符串放入字符串常量池中。 第三题 JDK6版本中intern () 方法会把第一次遇到的字符串实例复制到永久代的字符串常量池中返回的也是永久代里面这个字符串实例的引用。JVM启动时就会把java加入到常量池中。 JDK7及之后版本中由于字符串常量池在堆上所以intern () 方法会把第一次遇到的字符串的引 用放入字符串常量池。 直接内存 直接内存Direct Memory并不在《Java虚拟机规范》中存在所以并不属于Java运行时的内存区域。 在 JDK 1.4 中引入了 NIO 机制使用了直接内存主要为了解决以下两个问题: 1、Java堆中的对象如果不再使用要回收回收时会影响对象的创建和使用。 2、IO操作比如读文件需要先把文件读入直接内存缓冲区再把数据复制到Java堆中。 现在直接放入直接内存即可同时Java堆上维护直接内存的引用减少了数据复制的开销。写文件也是类似的思路。 总结 以上就是这篇博客的主要内容了,大家多多理解,下一篇博客见!
- 上一篇: 中小型网站站内搜索实现l兰州网站建设
- 下一篇: 中小学智慧校园建设平台网站计算机前端培训
相关文章
-
中小型网站站内搜索实现l兰州网站建设
中小型网站站内搜索实现l兰州网站建设
- 技术栈
- 2026年03月21日
-
中小型网站设计公司贵美商城网站的首页怎么做代码
中小型网站设计公司贵美商城网站的首页怎么做代码
- 技术栈
- 2026年03月21日
-
中小型网站建设与管理总结系部网站建设创新点
中小型网站建设与管理总结系部网站建设创新点
- 技术栈
- 2026年03月21日
-
中小学智慧校园建设平台网站计算机前端培训
中小学智慧校园建设平台网站计算机前端培训
- 技术栈
- 2026年03月21日
-
中心建设投官方网站 软件下载wordpress页脚修改
中心建设投官方网站 软件下载wordpress页脚修改
- 技术栈
- 2026年03月21日
-
中新生态城建设局门户网站网站建设与维护工作内容
中新生态城建设局门户网站网站建设与维护工作内容
- 技术栈
- 2026年03月21日
