
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
Java虚拟机的学习与应用是每一位Java编程开发程序员都应该熟练掌握的一个编程技术,而本文我们就通过案例分析来简单了解一下,Java虚拟机内存区域类型分享。
1、程序计数器
一块较小的内存空间,是当前线程所执行的字节码的行号指示器,每条线程都要有一个独立的程序计数器,这类内存也称为“线程私有”的内存。
正在执行java方法的话,计数器记录的是虚拟机字节码指令的地址(当前指令的地址)。如果还是Native方法,则为空。
这个内存区域是一个在虚拟机中没有规定任何OutOfMemoryError情况的区域。
2、虚拟机栈
是描述java方法执行的内存模型,每个方法在执行的同时都会创建一个栈帧(StackFrame)用于存储局部变量表、操作数栈、动态链接、
方法出口等信息。每一个方法从调用直至执行完成的过程,就对应着一个栈帧在虚拟机栈中入栈到出栈的过程。
3、本地方法区
本地方法区和JavaStack作用类似,区别是虚拟机栈为执行Java方法服务,而本地方法栈则为Native方法服务,
如果一个VM实现使用C-linkage模型来支持Native调用,那么该栈将会是一个C栈,但HotSpotVM直接就把本地方法栈和虚拟机栈合二为一。
4、堆-运行时数据区
是被线程共享的一块内存区域,创建的对象和数组都保存在Java堆内存中,也是垃圾收集器进行垃圾收集的重要的内存区域。由于现代VM采用分代收集算法,因此Java堆从GC的角度还可以细分为:新生代(Eden区、FromSurvivor(S0)区和ToSurvivor(S1)区)和老年代。
5、方法区
即我们常说的永久代(PermanentGeneration),用于存储被JVM加载的类信息、常量、静态变量、即时编译器编译后的代码等数据.HotSpotVM把GC分代收集扩展至方法区,即使用Java堆的永久代来实现方法区,这样HotSpot的垃圾收集器就可以像管理Java堆一样管理这部分内存,而不必为方法区开发专门的内存管理器(永久带的内存回收的主要目标是针对常量池的回收和类型的卸载,因此收益一般很小)。
运行时常量池(RuntimeConstantPool)是方法区的一部分。Class文件中除了有类的版
本、字段、方法、接口等描述等信息外,还有一项信息是常量池。
【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。