扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
这期内容当中的小编将会给大家带来有关JVM的内存数据区域的讲解,以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。
创新互联主营猇亭网站建设的网络公司,主营网站建设方案,手机APP定制开发,猇亭h5微信小程序定制开发搭建,猇亭网站营销推广欢迎猇亭等地区企业咨询JAVA程序运行于虚拟机之上,运行时需要内存空间。虚拟机执行JAVA程序的过程中会把它管理的内存划分为不同的数据区域方便管理。虚拟机管理内存数据区域划分如下图:
一、程序计数器(Program Counter Register)
行号指示器,字节码指令的分支、循环、跳转、异常处理、线程恢复(CPU切换),每条线程都需要一个独立的计数器,线程私有内存互不影响,该区域不会发生内存溢出异常。
二、虚拟机栈(VM Stack)
虚拟机栈(VM Stack)是线程私有的,声明周期与线程相同,虚拟机栈是Java方法执行的内存模型,每个方法被执行时都会创建一个栈帧,即方法运行期间的基础数据结构。
栈帧用于存储:局部变量表、操作数栈、动态链接、方法出口等,每个方法执行中都对应虚拟机栈帧从入栈到处栈的过程。是一种数据结构,是虚拟机中的局部变量表,对应物理层之上的程序数据模型。
局部变量表,是一种程序运行数据模型,存放了编译期可知的各种数据类型例如:
Boolean、byte、char、short、int、float、long、double、对象引用类型(对象内存地址变量,指针或句柄)。程序运行时,根据局部变量表分配栈帧空间大小。在运行中,大小是不变的异常类型:stackOverFlowError 线程请求栈深度大于虚拟机允许深度 OutOfMemory
内存空间耗尽无法进行扩展。
三、本地方法栈(Native Method Stack)
与虚拟机栈类似,虚拟机栈为Java程序服务,本地方法栈支持虚拟机的运行服务,具体实现由虚拟机厂商决定,也会抛出 stackOverFlowError
、OutOfMemory
异常。
四、堆(Heap)
堆(Heap)是虚拟机管理内存中大的一部分,被所有线程共享,用于存放对象实例(对象、数组),物理上不连续的内存空间,由于GC收集器,分代收集,所以划分为:新生代 Eden、From SurVivor空间、To SurVivor空间,allot buffer(分配空间),可能会划分出多个线程私有的缓冲区,老年代。
五、方法区(Method Area)
方法区(Method Area)与堆区一样属于线程共享的内存区域,用于存储虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码(动态加载OSGI)等数据。理论上属于java虚拟机的一部分,为了区分开来叫做 Non-Heap非堆。
这个区域可以选择不进行垃圾回收,该区域回收目的主要是常量池的回收,及类型的卸载class,内存区不足时会抛出OutOfMemory异常。
运行时常量池:方法区的一部分,Class的版本、字段、接口、方法等,及编译期生成的各种字面量、符号引用,编译类加载后存放在该区域。会抛出OutOfMemory异常。
六、直接内存(Direct Memory)
直接内存(Direct Memory)不属于虚拟内存区域,是一种基于通道与缓冲区的IO方式,可以使用本地函数直接分配堆外内存,在堆中存储引用的外部内存地址,通过引用完成对直接引用内存的操作,1.4之后提供的NIO显著提高效率,避免了堆内存与Native内存的来回复制操作,不受虚拟机内存控制,会抛出OUTOfMemory异常。
上述就是小编为大家分享的JVM的内存数据区域,如果您也有类似的疑惑,不妨碍参照上述分析进行理解。如果想了解更多相关内容,请关注创新互联成都网站设计公司行业资讯。
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流