运行时数据区

本文详细介绍了Java虚拟机(JVM)的运行时数据区,包括虚拟机栈和堆的结构,强调了线程栈帧的工作原理。同时,讨论了JVM中的系统线程,如垃圾收集、编译和信号处理线程。此外,还提到了Runtime类在Java运行时环境中的角色及其常用方法。通过对栈溢出和内存不足错误的解释,加深了对JVM内存管理的理解。
摘要由CSDN通过智能技术生成

运行时数据区

在这里插入图片描述

在这里插入图片描述

线程中的栈结构和JVM的堆结构

在这里插入图片描述

虚拟机栈
Java的指令是基于栈的架构,栈是运行时单位,而堆是存储单位
作用:​ 主管JAVA程序的运行,它保存方法的局部变量,部分结果,并参与方法的调用和返回。

JVM对栈的操作只有出栈和压栈。且允许Java栈的大小是动态的或是固定不变的。设置栈大小命令:-Xss

栈可能的异常

  1. StackOverFlowError:
    当固定栈的容量时,线程请求分配的栈容量超过Java虚拟机栈允许的最大容量。
  2. OutofMemoryError:
    ​ 虚拟机的栈容量是可变时,尝试扩展内存但无法申请额外内存。

栈内部的存储单位
每个线程都有自己的栈,栈中的数据都是以栈帧的形式存在。在线程上执行的每个方法都对应着一个栈帧
栈运行原理
​ 1. 不同线程中所包含的栈帧是不允许存在相互引用的,即不能在一个栈帧中引用另一个线程的栈帧。
​ 2. Java方法有两种返回方式:一种是正常的return 返回,一种是抛出异常。这两种都会导致方法栈帧被弹出

JVM 系统线程

在这里插入图片描述
主要的后台系统线程在Hotspot JVM 里主要是以下几个:
虚拟机线程:这种线程的操作需要JVM达到安全点才出现,这些操作必须在不同线程中发生的原因是他们都需要JVM达到安全点,这样堆才不会变化。这种线程的执行类型包括“stop-the-world”的垃圾收集、线程栈收集、线程挂起以及偏向锁撤销。

周期任务线程:这种线程是周期事件的体现(比如中断),他们一般用于周期性操作的调度执行。
GC线程:这种线程对在JVM里不同种类的垃圾收集行为提供支持。
编译线程:在运行时会将字节码编译成本地代码。
信号调度线程:这种线程接收信号并发给JVM,在它内部通过调用适当方法进行处理。

JVM中的Runtime类(运行时环境)

每个JVM只有一个Runtime实例,即为运行时环境。线程是一个程序里的运行单元,JVM允许一个应用有多个线程并行的执行。

RunTime类常用的方法:

  • getRuntime():该方法用于返回当前应用程序的运行环境对象。
  • exec(String command):该方法用于根据指定的路径执行对应的可执行文件。
  • freeMemory():该方法用于返回Java虚拟机中的空闲内存量,以字节为单位。
  • maxMemory():该方法用于返回Java虚拟机试图使用的最大内存量。
  • totalMemory():该方法用于返回Java虚拟机中的内存总量。
  • availableProcessors()方法 返回Java虚拟机可用的处理器数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值