深入理解JVM(学习过程) (22)

2020年02月15日23:00:50 。 回顾完毕。晚安。

JVM内存 JVM内存空间划分与作用 /** JVM的内存空间划分介绍与堆空间的用途分析:(以下7个空间) 1. 虚拟机栈(栈帧):每一个方法都会生成 Stack Frame 栈帧。属于线程私有的一份空间(伴随着线程的存在而存在)。内含局部变量表,用来存放方法的局部变量。虚拟机栈可能会抛出堆栈溢出错误。 2. 程序计数器(Program Counter):是一块很小的内存空间,主要的作用用来区分当前执行线程的行号与顺序。本身与虚拟机栈类似,是属于线程私有的数据结构。在多线程的环境下,多核,每一个核心也最多执行一个线程,但是可以有多个线程相互切换着执行,此时就需要程序计数器来记录线程执行的行号来区分维护。(它是一定不会出现栈溢出的情况) 3. 本地方法栈:主要用于处理本地方法(native方法,由其他语言写的方法); Oracle的虚拟机把虚拟机栈和本地方法栈合二为一了。 4. 堆(Heap)(重点研究):JVM中最大的一块内存,是一块共享区域(被Java所有的线层所共享的,几乎所有的对象都是在堆上进行分配的),用于存放对象实例。我们一般通过引用来操作对象,而不是直接操作对象。对象引用位于栈当中。堆中发生垃圾回收的概率是最高的。方法区是极少出现垃圾回收的可能。与堆相关的一个重要概念就是垃圾收集器(现在所有的收集器都是采用的分代收集算法,所以堆空间也基于这一点进行了相应的划分:新生代,老年代;Eden空间,From Survivor空间与To Survivor空间)。Java的堆空间在物理上既可以是连续的,也可以是不连续的。 5. 方法区(Method Area):存储元信息。永久代(Permanent Generation)从JDK1.8之后就被废弃了,使用元空间(meta space)来替代。 6. 运行时的常量池:方法区中的一部分内容。 7. 直接内存(Direct Memory):堆外内存(并不是由虚拟机直接管理的内存,在Java虚拟机外开辟的一片空间),与Java NIO密切相关。JVM通过堆上的DirectByteBuffer来操作直接内存。 */

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpfdfy.html