做美缝在哪个网站接单,海口网络科技有限公司,温州论坛官方网,海口h5公司分享一波:程序员赚外快-必看的巅峰干货
据 JVM 规范#xff0c;JVM 内存结构共分为虚拟机栈、堆、方法区、程序计数器、本地方法栈五个部分。这里的java内存结构与前面所述的Java内存模型是两个概念#xff0c;不可以混淆。 堆
java堆是java虚拟机所管理的内存中最大的一块…分享一波:程序员赚外快-必看的巅峰干货
据 JVM 规范JVM 内存结构共分为虚拟机栈、堆、方法区、程序计数器、本地方法栈五个部分。这里的java内存结构与前面所述的Java内存模型是两个概念不可以混淆。 堆
java堆是java虚拟机所管理的内存中最大的一块是被所有线程共享的一块内存区域在虚拟机启动时创建。此内存区域的唯一目的就是存放对象实例这一点在Java虚拟机规范中的描述是所有的对象实例以及数组都要在堆上分配从这一特性上来说数组其实也算是一种对象。
java堆是垃圾收集器管理的主要区域因此也被成为“GC堆”。从内存回收角度来看java堆可分为新生代和老生代。从内存分配的角度看线程共享的Java堆中可能划分出多个线程私有的分配缓冲区。无论怎么划分都与存放内容无关无论哪个区域存储的都是对象实例进一步的划分都是为了更好的回收内存或者更快的分配内存。
根据Java虚拟机规范的规定java堆可以处于物理上不连续的内存空间中。当前主流的虚拟机都是可扩展的通过 -Xmx 和 -Xms 控制。如果堆中没有内存完成实例分配并且堆也无法再扩展时将会抛出OutOfMemoryError异常。 虚拟机栈
java虚拟机也是线程私有的它的生命周期和线程相同。虚拟机栈描述的是Java方法执行的内存模型每个方法在执行的同时都会创建一个栈帧Stack Frame用于存储局部变量表、操作数栈、动态链接、方法出口等信息。
咱们常说的堆内存、栈内存中栈内存指的就是虚拟机栈。局部变量表存放了编译期可知的各种基本数据类型8个基本数据类型、对象引用地址指针、returnAddress类型。
局部变量表所需的内存空间在编译期间完成分配。在运行期间不会改变局部变量表的大小。
这个区域规定了两种异常状态如果线程请求的栈深度大于虚拟机所允许的深度则抛出StackOverflowError异常如果虚拟机栈可以动态扩展在扩展是无法申请到足够的内存就会抛出OutOfMemoryError异常。 本地方法栈
本地方法栈与虚拟机栈所发挥作用非常相似它们之间的区别不过是虚拟机栈为虚拟机执行Java方法也就是字节码服务而本地方法栈则为虚拟机使用到的native方法服务。本地方法栈也是抛出两个异常。 方法区
方法区与java堆一样是各个线程共享的内存区域它用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。它有个别命叫Non-Heap非堆。当方法区无法满足内存分配需求时抛出OutOfMemoryError异常。 运行时常量池
运行时常量池是方法区的一部分。Class文件中除了有类的版本、字段、方法、接口等描述信息外还有一项信息是常量池用于存放编译期生成的各种字面量和符号引用这部分内容将在加载后进入方法区的运行时常量池中存放。 程序计数器
程序计数器是一块较小的内存空间它可以看作是当前线程所执行的字节码的行号指示器。
由于Java虚拟机的多线程是通过线程轮流切换并分配处理器执行时间的方式来实现的一个处理器都只会执行一条线程中的指令。因此为了线程切换后能恢复到正确的执行位置每条线程都有一个独立的程序计数器各个线程之间计数器互不影响独立存储。称之为“线程私有”的内存。程序计数器内存区域是虚拟机中唯一没有规定OutOfMemoryError情况的区域。
*************************************优雅的分割线 **********************************
分享一波:程序员赚外快-必看的巅峰干货
如果以上内容对你觉得有用,并想获取更多的赚钱方式和免费的技术教程
请关注微信公众号:HB荷包 一个能让你学习技术和赚钱方法的公众号,持续更新