JVM

一.JVM内存空间

  1. 虚拟机栈:每个方法执行,都会创建一个栈帧,伴随着方法从创建到执行完成。用于存储局部变量表,操作数栈,动态链接和方法出口等。

  2. 程序计数器:当前线程执行位子的计数器,每个线程的计数器独立,只为java方法服务,执行native修饰的方法时,程序计数器的值为空。

  3. 本地方法栈:执行本地方法(native修饰修饰的方法)

  4. :Heap(线程共享):JVM管理的最大内存空间,用于保存创建的对象。堆上的对象不能直接使用,与要通过引用操作(引用一般放在栈上)。堆上存储的对象包含两部分:本身实例数据(成员变量);元数据(所属类的相关信息、常亮、静态变量),元数据存放于堆中的一个单独区域-方法区中,JDK1.8后使用元空间(元空间不在虚拟机中,而是使用本地内存

  5. 运行常量池:方法区的一部分。

  6. 直接内存:不由JVM管辖。由JVM申请,操作系统管辖。

*.其他

    1. 栈帧:栈帧(Stack Frame)-方法执行时的入栈、出栈、局部变量表等。线程每调用一个方法就对应着 JVM Stack 中 Stack Frame 的入栈,方法执行完毕或者异常终止对应着出栈(销毁)。在活动线程中,只有位于栈顶的栈帧才是有效的,称为当前栈帧,与这个栈帧相关联的方法称为当前方法。如果执行的是实例方法,那局部变量表中第 0 位索引的 Slot 默认是用于传递方法所属对象实例的引用(在方法中可以通过关键字 this 来访问到这个隐含的参数)。

    2. Java类从加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括,加载 ,验证 , 准备 , 解析 , 初始化 , 卸载 ,总共七个阶段。其中验证 ,准备 , 解析 统称为连接

    3. native关键字:该关键字修饰的方法叫做本地方法(与运行的平台有关,JVM运行时有专门的本地方法栈。缺点:可移植性降低;优点:native修饰的方法可以被C语言重写-多用于操作底层信息)使用时类似abstract,修饰的方法只有签名没有方法实现。

    4. intern() 方法返回字符串对象的规范化表示形式,通俗讲就是把堆中的String转到常量池中。

原文地址:https://www.cnblogs.com/-Archenemy-/p/13821647.html