java高分局之运行时数据区
来源:互联网 发布:手机一玩游戏网络就卡 编辑:程序博客网 时间:2024/06/02 08:44
java高分局之运行时数据区
java虚拟机定义了几种不同的运行时数据区。有些数据局在虚拟机启动的时候创建,在虚拟机退出的时候销毁,另外一些是每个线程的数据区,当线程创建的时候创建,当线程撤销的时候销毁。
PC寄存器
java虚拟机可以支持多个线程同时执行,每个虚拟机线程都有自己的pc寄存器(也叫程序计数器)。在某一个时刻,每个虚拟机线程都会执行单个方法的代码,这个方法我们叫他线程的当前方法。如果这个方法不是本地方法,pc寄存器会记录当前正在执行的指令的地址。如果当前方法是一个本地方法,java虚拟机的pc寄存器的值是undefined。
虚拟机栈
每一个java虚拟机线程都有一个私有的虚拟机栈,当线程创建的时候就会创建这个栈,栈是用来存储栈帧的,每一个方法就对应一个栈帧。java虚拟机栈和传统语言C很相似:存储局部变量和部分结果,并在方法调用和返回时起到重要作用。栈的内存可以是不连续的。
我们可以通过-Xss参数来设置虚拟机栈的大小,默认栈的大小是512K,一般情况128K就够用,我们可以根据自己的需要设置栈的大小。
—-如果一个线程需要的栈的大小大于允许使用的大小虚拟机就会抛出StackOverflowError.
—-如果虚拟机栈的大小允许自动扩展,当扩展时没有足够的内存空间或者没有足够的空间容纳一个线程启动时所占的栈大小就会抛出StackOverflowError
堆
java虚拟机堆是所有线程的共享区域,在这里存储着所有类的实例和数组。堆是在虚拟机启动的时候创建,然后通过垃圾回收器来管理;如果需要的堆空间大于可用的大小那么会抛出OutOfMemoryError.
方法区
方法区是所有线程的共享区域。方法区就像传统语言编译后代码的的存放区域或者操作系统进程中的文本片段。方法区中存放每个类的结构,比如运行时常量池、域和方法数据。
当虚拟机启动的时候就会创建方法区,尽管方法区是堆的一个逻辑部分。但是方法区的实现可以不进行垃圾回收,虚拟机规范并没有强制规定方法区的实现方式。如果方可用的内存不足以容纳方法区数据就会抛出OutOfMemoryError.
运行时常量池
运行时常量池是类和接口的class文件中constant_pool属性的表现。包含了不同种类的常量,从字面值到方法和域的引用。每个常量池都在方法区中分配,每个类和接口的常量池在他们被虚拟机创建的时候创建,通常常量池也会抛出OutOfMemoryError.
本地方法栈
和虚拟机栈类似,只不过执行的是本地方法。
- java高分局之运行时数据区
- java高分局之JVM命令参数大全(高级运行时选项)
- java高分局之jvm指令浅析
- java高分局之永久代何去何从?
- java高分局之垃圾回收浅析
- java高分局之class文件解析
- java高分局之实现本地方法
- java高分局之jstat命令使用
- java高分局之jmap命令使用
- java高分局之jstack命令使用
- java高分局之jstat命令使用
- java高分局之jstat命令使用
- java高分局之jstat命令使用
- java高分局之并行流的缩减操作
- java高分局之寻找JVM中的对象
- java高分局之JVM命令参数大全(概述)
- java高分局之类热加载
- java高分局之JVM命令参数大全(标准选项)
- 【thinkPHP3.1.2】关于文件上传路径
- sscanf 其实很强大
- 跨境电商决战代购蚂蚁军团
- 黑马程序员——Java基础---static关键字
- Android那点事-系列之(一)Parcelable和Serializable的区别与使用
- java高分局之运行时数据区
- iOS:UICollectionView的子类化创建
- Erlang标准数据结构的选择
- java NIO Exception in thread "main" java.nio.charset.MalformedInputException: Input length = 1
- ibatis多表连接的写法,返回一个实体
- iOS图形处理和性能
- python中常用的内建函数
- 使用DefaultAdvisorAutoProxyCreator实现spring的自动代理
- VC 不用具体地址打开仪器