欢迎来到天天文库
浏览记录
ID:59148848
大小:18.21 KB
页数:4页
时间:2020-09-11
《深入理解java虚拟机.docx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Java虚拟机基本结构Java虚拟机基本结构1.类加载子系统负责从文件系统或者网络中加载Class信息,加载的类信息存放在一块叫方法区的内存空间。除了类的信息外,方法区可能还存放常量池信息。2.Java堆在虚拟机启动时候建立,他是java程序最主要的内存工作区域,几乎所有的对象实例都保存在这,堆是所有线程共享的。3.Java的NIO库允许java程序直接使用内存,直接内存是java堆外的,直接像系统申请内存空间。4.垃圾回收系统是java虚拟机重要的组成部分,垃圾回收系统主要对方法区,java堆,直接内存进行回收,其中java堆是垃圾回收的主要场合。5.每一个
2、java虚拟机线程都有一个私有的java栈,一个线程在创建的时候就建立了一个java栈,java栈中保存着帧信息,局部变量,方法参数,和java方法的调用返回密切关系。6.本地方法栈和java栈类似,最大的不同在于java栈用于java方法的调用,本地方法栈用于本地方法的调用。7.PC寄存器也是每个线程的私有空间,java虚拟机会为每个java线程创建一个PC寄存器,在任意时刻,每个java线程都在执行一个方法,这个正在被执行的方法被称为当前方法,如果当前方法不是本地方法,那么PC寄存器会指向当前正在被执行的指令,否则(本地方法),PC寄存器值就是undefi
3、ned。8.执行引擎是java虚拟机最核心组件之一,他主要负责执行虚拟机字节码。Java堆Java堆是和java应用程序关系最为密切的内存空间,几乎所有的java对象实例存储在堆中,并且java堆完全是自动管理,通过垃圾回收制度,垃圾对象会被自动清理,不需要显示释放。根据垃圾回收机制的不同,java堆有可能会被分为不同的结构,最常见的一种,就是将java堆分成新生代和老年代,新生代新对象和存放年龄不大的对象,老年代存放老年对象,新生代有可能又被分为eden区,s0区,s1区。S0,s1又被称为from区和to区,它们是两块大小相同的内存空间。大多数情况下对象首
4、先被分到eden区,再一次新生代垃圾回收后,如果对象还活着,则进入s0或者s1区,之后每经过一次新生代垃圾回收,存活的对象的年龄加一,到了一定年龄后,则被定义为老年对象,进入老年代。java栈1.出入java栈Java栈是一块线程私有的内存空间,如果说java堆和程序数据密切相关,那么java栈就和线程执行密切相关,线程执行的基本就是函数调用,每次函数调用的数据都是通过java栈传递。Java栈与数据结构上的栈有着类似的含义,它是一块先进后出的数据结构,只支持出栈和入栈两种操作,在java栈中主要保存的是桢栈,每一次函数调用,就会有一个对应的桢栈压入java栈
5、,每一次函数调用结束,就会又一个桢栈被弹出java栈,当前所正在运行的函数就是当前桢(位于栈顶),它保存着当前函数的局部变量表,中间运算结果等数据。2.局部变量表局部变量表是桢栈重要组成部分,它保存着函数的参数以及局部变量,局部变量表中的变量只在当前函数中有效,当函数调用完成后,随着函数桢栈销毁3.操作数栈操作数栈也是桢栈重要组成部分,他主要保存计算过程中的中间结果,同时作为计算过程中变量的临时保存空间,他也是一个先进后出的数据结构。4.桢栈数据5.栈上分配栈上分配是java虚拟机提供的一项优化技术,基本思想是,对于线程私有的对象,可以将他们打散分配在栈上,而
6、不是分配在堆上,分配在栈上的好处是可以在函数调用结束后自行销毁,而不需要垃圾回收器的介入,从而提高性能。方法区和java堆一样,方法区也是一块所以线程共享的一块内存区域,它用于保存系统的类信息,比如类的字段,方法,常量池等.(方法区也可以理解为永久区),方法区的大小决定了系统可以保存多少个类垃圾回收认识垃圾回收如果不及时对内存中不会再被使用的对象进行垃圾回收,那么这些垃圾对象所占用的内存空间会一直保留到应用程序结束,而这些被保留的空间不被其他对象使用,如果大量不被使用的对象一直占据着内存,当需要内存空间时,无法使用这些被占据的内存,有可能导致内存溢出,所以要进
7、行垃圾回收垃圾回收算法1.引用计数法给任何一个对象添加一个引用计数器,对于一个对象,只要有对象引用了他,那么就在他的引用计数器上加一,当引用失效时候,就减一,当引用计数器为0时,那么对象就不再被使用。2.标记清除法这个方法将垃圾回收分成2个阶段,第一个阶段标记阶段,首先通过根节点,标记所有从根节点的可达对象,所以,未被标记的对象就是未被引用的垃圾对象。接着第二个阶段清除阶段,清除所有未被标记的对象,这个方法可能产生的问题是,执行完垃圾回收后,会有许多不连续的内存空间。当大对象需要连续内存空间是,不连续的内存空间的效率低于连续的内存空间。3.复制算法将原有的内存
8、空间分成大小相同的两块内存,每次只使用
此文档下载收益归作者所有