深入理解Java虚拟机学习笔记(1)--Java内存区域的划分和相应的用途

1.运行时数据区

根据《Java虚拟机规范》的规定Java虚拟机所管理的内存将会包括以下几部分,方法区,堆,虚拟机栈,本地方法栈,程序计数器。其中方法区和堆是线程共享区域,虚拟机栈,本地方法栈,程序计数器是线程隔离的数据区。

1.1 程序计数器

程序计数器是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器。字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支,循环,跳转,异常处理,线程恢复等基础功能都需要依赖这个计数器来实现。
为了线程切换后能恢复到正确的执行位置,每条线程都需要一个独立的程序计数器,各条线程之间的计数器互不影响。如果线程执行的是一个Java方法,这个计数器记录的是正在执行的虚拟机字节码指令的地址,如果正在执行的是Native方法,这个计数器值为空。此内存区域在Java虚拟机中没有规定任何OutoufMemoryError情况。

1.2 Java虚拟机栈

虚拟机栈描述Java方法执行的内存模型,每个方法在执行的同时都会创建一个栈帧用于存储局部变量表,操作数栈,动态链接,方法出口等信息,每一个方法从调用知道执行完成的过程,就对应一个栈帧在虚拟机栈中入栈到出站的过程。
局部变量表存放了编译器可知的各种基本数据类型,包括boolean, byte, char,short,int,float,long,double,对象引用(reference 类型,他一般是一个指向对象其实地址的引用指针)和returnAddress类型。其中64位长度的long和double类型的数据会占用2个局部变量空间,其余的数据类型只占用一个。
操作数栈可理解为java虚拟机栈中的一个用于计算临时数据存储区,通过出栈和入栈来访问。
动态链接与静态链接相对,静态链接是指在编译期将所有类加载并找到他们的直接引用,不论是否使用到。Java程序在编译之后,会得到程序中每一个类或者接口的独立的class文件。虽然独立看上去毫无关联,但是他们之间通过接口(harbor)符号互相联系,或者与Java API的class文件相联系。在Java虚拟机中提供了5条方法调用字节码指令,其中invokestatic和invokespecial 指令调用的方法,都可以在解析阶段中确定唯一的调用版本,符合这个条件的有静态方法、私有方法、实例构造器、父类方法。它们在类加载的时候就会把符号引用解析为该方法的直接引用,因此这些方法也被称为非虚方法(包括final方法),与之相反的称为虚方法。在Class文件中的常量持中存有大量的符号引用。字节码中的方法调用指令就以常量池中指向方法的符号引用作为参数。这些符号引用一部分在类的加载阶段(解析)或第一次使用的时候就转化为了直接引用(指向数据所存地址的指针或句柄等),这种转化称为静态链接。而相反的,另一部分在运行期间转化为直接引用,就称为动态链接。
方法出口

在Java虚拟机栈中,对这个区域规定了两种异常情况,如果线程请求的栈深度大于虚拟机所允许的深度,将抛出StackOverFlowError异常,如果虚拟机栈可以动态扩展但扩展是无法申请到足够的内存,就回抛出OutOfMemoryError异常。

1.3本地方法栈

本地方法栈与虚拟机栈所发挥的作用是非常相似的,他们之间的区别不过是虚拟机栈为虚拟机执行的Java方法,而本地方法栈执行的是虚拟机所使用的Native方法服务。

1.4Java堆

一般来说Java堆是Java虚拟机所管理的内存中最大的一块,Java堆是被所有线程共享的一块内存区域,几乎所有的内存示例都在这里分配内存,Java堆可以细分为新生代和老年代,新生代可以细分为Eden空间,From Survivor空间,ToSurvivor空间。当对中没有完成实例分配,而且对也无法在扩展时,将会抛出OutOfMemoryError异常

1.5方法区

方法区与Java堆一样,是各个线程共享的内存区域,它用于存储已经配虚拟机加载的类信息,常量,静态变量,即时编译器编译后的代码等数据。当方法区无法满足内存分配需求时,将抛出OutOfMemoryError异常。

1.6运行时常量池

运行时常量池是方法区的一部分,Class文件中除了有类的版本,字段,方法,接口等描述信息外,还有一项信息是常量池,用于存放编译器生成的各种字面量和符号引用,这部分内容将在类加载后进入方法区的运行时常量池中存放。

2.直接内存

直接内存不是虚拟机运行时数据区的一部分,是由于Java1.4中加入和NIO类,引入了一种基于通道与缓冲区的I/O方式,它可以使用Native函数库直接分配堆外内存,然后通过一个存储在Java堆中的DirectByteBuffer对象作为这块内存的引用进行操作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
校园失物招领系统管理系统按照操作主体分为管理员和用户。管理员的功能包括字典管理、论坛管理、公告信息管理、失物招领管理、失物认领管理、寻物启示管理、寻物认领管理、用户管理、管理员管理。用户的功能等。该系统采用了Mysql数据库,Java语言,Spring Boot框架等技术进行编程实现。 校园失物招领系统管理系统可以提高校园失物招领系统信息管理问题的解决效率,优化校园失物招领系统信息处理流程,保证校园失物招领系统信息数据的安全,它是一个非常可靠,非常安全的应用程序。 ,管理员权限操作的功能包括管理公告,管理校园失物招领系统信息,包括失物招领管理,培训管理,寻物启事管理,薪资管理等,可以管理公告。 失物招领管理界面,管理员在失物招领管理界面中可以对界面中显示,可以对失物招领信息的失物招领状态进行查看,可以添加新的失物招领信息等。寻物启事管理界面,管理员在寻物启事管理界面中查看寻物启事种类信息,寻物启事描述信息,新增寻物启事信息等。公告管理界面,管理员在公告管理界面中新增公告,可以删除公告。公告类型管理界面,管理员在公告类型管理界面查看公告的工作状态,可以对公告的数据进行导出,可以添加新公告的信息,可以编辑公告信息,删除公告信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值