课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
java编程开发语言是目前大多数程序员都在学习的一种编程开发语言,而今天我们就一起来了解一下,java编程开发内存模型的概念与类型。
1、方法区:
方法区是线程安全的,各个线程共享该内存区域。
存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。
运行时常量池(RuntimeConstantPool)是方法区的一部分,存储内容主要是编译期生成的各种字面量和符号引用。
方法区的大小不必是固定的,JVM可根据应用需要动态调整。
不需要连续的内存,可以选择固定大小或者可扩展,还可以选择不实现垃圾收集。
方法区也可被垃圾收集,当某个类不在被使用(不可触及)时,JVM将卸载这个类,进行垃圾收集。
当方法区无法满足内存分配需求时,将抛出OutOfMemoryError异常。
2、java堆
线程共享的,存放所有对象实例(包括实例变量)和数组。在虚拟机启动时创建。
生命周期与虚拟机相同,可以不使用连续的内存地址。
垃圾回收的主要区域。根据分代收集算法可以分为新生代和老年代。
如果在堆中没有内存完成实例分配,并且堆也无法再扩展时,将会抛出OutOfMemoryError异常。
3、虚拟机栈(参考文章)
线程私有的,它的生命周期与线程相同。
每个方法被执行的时候都会同时创建一个栈帧(StackFrame)用于存储局部变量表、操作栈、动态链接、方法出口等信息。
栈的大小可以是固定的,或者是动态扩展的。如果请求的栈深度大于大可用深度,则抛出stackOverflowError;如果栈是可动态扩展的,但没有内存空间支持扩展,则抛出OutofMemoryError。
4、栈帧
帧里面存放的是方法的局部变量(方法中的局部变量),操作数栈,动态链接,方法返回地址和一些额外的附加信息组成。
活动线程中,只有栈顶的栈帧是有效的,称为当前栈帧,这个栈帧所关联的方法称为当前方法。执行引擎所运行的所有字节码指令都只针对当前栈帧进行操作。
5、 局部变量表
用于存放方法参数和方法内部定义的局部变量。
基本数据类型、对象引用和returnAddress类型。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。