【黑马程序员】Java虚拟机:Java内存区域及对象.doc

【黑马程序员】Java虚拟机:Java内存区域及对象.doc

ID:62304744

大小:56.50 KB

页数:8页

时间:2021-04-26

【黑马程序员】Java虚拟机:Java内存区域及对象.doc_第1页
【黑马程序员】Java虚拟机:Java内存区域及对象.doc_第2页
【黑马程序员】Java虚拟机:Java内存区域及对象.doc_第3页
【黑马程序员】Java虚拟机:Java内存区域及对象.doc_第4页
【黑马程序员】Java虚拟机:Java内存区域及对象.doc_第5页
资源描述:

《【黑马程序员】Java虚拟机:Java内存区域及对象.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、优选【黑马程序员】Java内存区域及对象  几个计算机的概念为以后写文章考虑,也为巩固自己的知识和一些基本概念,这里要理清楚几个计算机中的概念。1、计算机存储单位从小到大依次为位Bit、字节Byte、千字节KB、兆M、千兆GB、TB,相邻单位之间都是1024倍,1024为2的10次方,即:·1Byte=8bit··1K=1024Byte··1M=1024K··1G=1024M··1T=1024G·8/8优选2、计算机存储元件寄存器:中央处理器CPU的一部分,是计算机中读写速度最快的存储元件,但是容量很少内存:属于独

2、立的一个部件,是和CPU沟通的桥梁,用于存放CPU中的运算数据以及与外部存储器交换的数据。尽管在今天,对内存的读写速度已经很快了,但是由于寄存器是在CPU上的,所以对于内存的读写速度和对于寄存器的读写速度上还是有几个数量级的差距。但是没办法,对于内存的读写I/O操作是很难消除的,寄存器数量有限,不可能通过寄存器来完成所有的运算任务3、内核空间和用户空间连接内存和寄存器的是地址总线,地址总线的宽度影响了物理地址的索引X围,因为总线宽度决定了处理器一次可以从寄存器或内存中获取多少个Bit,同时也决定了处理器最大可以寻址

3、的地址空间。比如32位CPU的系统,可寻址X围为0×00000000~0xFFFFFFFF,即232=4294967296个内存位置,每个内存位置1个字节,即32位CPU系统可以有4GB的内存空间。不过应用程序是不可以完全使用这些地址空间的,因为这些地址空间被划分为了内核空间和用户空间,程序只能使用用户空间的内存。内核空间主要是指操作系统运行时所使用的用于程序调度、虚拟内存的使用或者硬件资源的程序逻辑。区分内核空间和用户空间的目的主要是从系统的稳定性的角度考虑的。Windows32操作系统默认内核空间和用户空间的比

4、例是1:1,即2G内核空间、2G内存空间,32位Linux系统中默认比例则是1:3,即1G内核空间,3G内存空间。4、字长8/8优选CPU的主要技术指标之一,指的是CPU一次能并行处理二进制的位数(Bit)。通常称处理字长为8位数据的CPU为8位CPU,32位CPU就是在同一时间内处理字长为32位的二进制数据。不过目前虽然CPU大多是64位的,但还是以32位字长运行前言说到Java内存区域,可能很多人第一反应是“堆栈”。首先堆栈不是一个概念,而是两个概念,堆和栈是两块不同的内存区域,简单理解的话,堆是用来存放对象而

5、栈是用来执行程序的。其次,堆内存和栈内存的这种划分方式比较粗糙,这种划分方式只能说明大多数程序员最关注的、与对象内存分配关系最密切的内存区域是这两块,Java内存区域的划分实际上远比这复杂。对于Java程序员来说,在虚拟机自动内存管理机制的帮助下,不再需要为每一个new操作去配对delete/free代码,不容易出现内存泄露和内存溢出问题。但是,也正是因为Java把内存控制权交给了虚拟机,一旦出现内存泄露和内存溢出的问题,就难以排查,因此一个好的Java程序员应该去了解虚拟机的内存区域以及会引起内存泄露和内存溢出的

6、场景。运行时数据区域Java虚拟机(JVM)内部定义了程序在运行时需要使用到的内存区域,从images.blogjava.net/blogjava_net/nkjava/jvmstructure.png拷贝一X图下来:8/8优选之所以要划分这么多区域出来是因为这些区域都有自己的用途,以及创建和销毁的时间。有些区域随着虚拟机进程的启动而存在,有的区域则依赖用户线程的启动和结束而销毁和建立。图中绿色部分就是所有线程之间共享的内存区域,而白色部分则是线程运行时独有的数据区域,从这个分类角度来看一下这几个数据区。1、线程独

7、有的内存区域(1)PROGRAMCOUNTERREGISTER,程序计数器这块内存区域很小,它是当前线程所执行的字节码的行号指示器,字节码解释器通过改变这个计数器的值来选取下一条需要执行的字节码指令。Java方法这个计数器才有值,如果执行的是一个Native方法,那这个计数器是空的。(2)JAVASTACK,虚拟机栈8/8优选生命周期和线程相同。每个方法执行的同时都会创建一个栈帧,用于存储局部变量表、操作数栈、动态、方法出口等信息,每一个方法从调用直至执行完毕的过程,就对应着一个栈帧在虚拟机中入栈到出栈的过程。栈的

8、大小和具体JVM的实现有关,通常在256K~756K之间。(3)NATIVEMETHODSTACK,方法栈和虚拟机栈起的作用一样,只不过方法栈为虚拟机使用到的Native方法服务。虚拟机规X并没有对这个区域有什么强制规定,因此我们使用的HotSpot虚拟机,就干脆没有这块区域了,它和虚拟机栈是一起的。2、线程间共享的内存区域(1)HEAP,堆大多数应用,堆都

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。