2 认识java虚拟机的基本结构
来源:互联网 发布:mac tomcat端口被占用 编辑:程序博客网 时间:2024/05/17 19:58
2 认识java虚拟机的基本结构
类加载子系统负责从文件系统或者网络中加载Class信息,加载的类信息存放于一块称为方法区的内存空间。除了类信息外,方法区还会存放运行时常量池信息,包括字符串字面量和数值常量。
java堆在虚拟机启动时建立,它是java程序中最主要的内存工作区域。几乎所有的java对象实例都存放在java堆中。堆空间是所有线程共享的。
每一个java虚拟机线程都有一个私有的java栈。一个线程的java栈在线程被创建的时候被创建。java栈中保存着帧信息。
PC寄存器也是每个线程的私有的空间,java虚拟机会为每一个java线程创建PC寄存器。在任意时刻,一个java线程中总是在执行一个方法,这个被正在执行的方法称为当前方法。如果当前方法不是本地方法,PC寄存器就会指向当前正在被执行的指令。
设置java虚拟机参数
java [-opitions] class [args]
示例
java -Xmx32m geym.zbase.ch2.SimpleArgs a // 设置系统最大可用堆空间为32m
函数如何调用
在java栈中主要保存的内容就为栈帧。每一次函数调用,都会有一个对应的栈帧被压入java栈。每一个函数调用结束,都会有一个栈帧被弹出java栈。
在一个栈帧中,至少要包含局部变量表,操作数栈和帧数据区几个部分。
局部变量表
局部变量表是栈帧的重要组成部分。它用于保存函数的参数 以及局部变量。局部变量表中的变量只在当前函数调用中有效,当函数调用结束后,随着java栈帧被弹出,局部变量表也会随之销毁。
栈帧中局部变量表的槽位是可以重用的。
实例方法的第一个局部变量都是this引用。
局部变量表中的变量也是重要的垃圾回收根节点,只要局部变量表中直接或者间接引用的对象都不会被回收。
帧数据区
大部分java字节码需要进行常量池访问,在帧数据区中保存着访问常量池的指针。
栈上分配
栈上分配是java虚拟机提供的一项优化技术,基本思想是对于那些线程私有的对象,可以把他们打散分配到栈上。例如,将不可逃逸对象的属性视为独立的局部变量分配到栈上。
分配到栈上的好处是可以在函数调用结束后自行销毁。
方法区
和java堆一样,方法区是一块所有线程共享的内存区域。它用于保存系统的类信息。方法区的大小决定了系统可以保存多少个类。
在jdk1.6和1.7中,方法区可以理解为永久区(Perm)。
在jdk1.8中,永久区已经被彻底移除,取而代之的是元数据区。与永久区的区别是,在默认情况下,虚拟机会耗尽所有可用的系统内存。
- 2 认识java虚拟机的基本结构
- 认识Java虚拟机的基本结构
- java虚拟机的基本结构
- java虚拟机的基本结构
- Java虚拟机的基本结构
- Java虚拟机的基本结构
- Java虚拟机基本结构
- Java 虚拟机基本结构
- 深入JVM-java虚拟机的基本结构
- 深入JVM-java虚拟机的基本结构
- 深入JVM-java虚拟机的基本结构
- 虚拟机的基本结构
- 结构体的基本认识
- Java 虚拟机基本结构介绍
- java虚拟机中的基本结构
- Java 虚拟机,Reference的认识
- 认识html文件的基本结构
- JAVA 虚拟机学习整理 一、基本结构
- 数据结构之链表的实例
- log4j在spring4中的配置
- Retrofit上传头像
- Java: 对象的初始化过程
- leetcode 303. Range Sum Query
- 2 认识java虚拟机的基本结构
- StringBuffer的用法
- get请求与post提交区别的简易理解
- Caffe——Python接口学习:绘制loss和accuracy曲线
- 3 常用java虚拟机参数
- 之江学院第0届校赛决赛 A-qwb与支教(容斥+二分)
- np.where函数
- HTTP中GET与POST方法有什么区别
- 仿支付宝支付键盘