美文网首页android面试录
Java虚拟机结构、内存管理相关基础知识(1)

Java虚拟机结构、内存管理相关基础知识(1)

作者: fengcz | 来源:发表于2018-11-15 22:53 被阅读1次

JVM结构体系

jvm由`类加载器子系统`、`运行时数据区`(内存空间)、`执行引擎`及`本地方法接口`等组成
`运行时数据区:`由方法区、堆、java 栈、PC寄存器、本地方法栈组成

在内存空间中方法区是所有java线程共享的,而java栈本地方法栈PC寄存器则有每个线程私有

程序计数器(program counter register)

它是当前线程所执行的字节码的行号指示器
字节码解释器通过改变程序计数器的值来选择下一条需要执行的字节码指令,分支、跳转、循环等基础功能都需要依赖它来实现,所以程序计数器是线程私有的,各线程间的计数器互不影响
当线程在执行一个java方法时(非本地方法),该计数器记录的是正在执行的虚拟机字节码指令的地址,当线程在执行的是native方法时,该计数器的值为空。唯一在java虚拟机规范中没有OOM的区域

Java虚拟机栈(java stacks)

线程私有,保证线程安全,生命周期与线程相同
java栈由栈帧组成,每个方法被执行的时候都会同时创建一个栈帧,调用方法时压入栈帧,方法返回时弹出栈帧并抛弃
先进后出
对于执行引擎来说,活动线程中只有栈顶的栈帧是有效的,执行引擎所运行的所有字节码指令都只针对当前栈帧进行操作
java栈的主要任务是储存方法参数、局部变量、中间运算结果,并且提供部分其他模块工作需要的数据

在编译程序代码时,栈帧中需要多大的局部变量表、多深的操作数栈都已经完全确定来,并且写入了方法表的code属性之中所以程序运行期变量数据不会影响栈帧内存大小,仅仅取决于具体的虚拟机实现。
在java虚拟机规范中,栈会抛出2种异常情况

  • 1、如果线程请求的栈深度大于虚拟机所允许的深度,将抛出StackOverFlowerError异常
  • 2、如果虚拟机在动态扩展栈无法申请到足够的内存空间,则抛出OutOfMemoryError异常

本地方法栈(native method stacks)

与java栈作用类似,java栈为虚拟机执行java方法服务,本地方法栈则为使用到的本地操作系统(native)方法服务

Java堆(Heap)

所有线程共享的一块内存区域。几乎所有的对象实例数组都在这类分配内存
java堆可以处理在物理上不连续的内存空间 中 ,只要是逻辑上是连续就可以
如果在堆中没有内存可分配时,并且堆也无法扩展时,将会抛出OutOfMemoryError异常

方法区(method area)

各个线程共享的内存区域
用于存储已经被虚拟机加载的类信息、常量、静态常量 ,即时编译器编译后的代码等数据。和java heap一样不需要连续的内存,可以选择固定大小或可扩展
虚拟机规范允许该区域可以选择不实现垃圾回收
根据java虚拟机规范,当方法区无法满足内存分配需求时,将抛出OutOfMemoryError异常

类加载机制

类的整个生命周期包括:加载、验证、准备、解析、初始化、使用和卸载七个阶段
类加载的过程包括了:加载->验证->准备 ->解析-> 初始化
顺序开始,而不是按顺序进行完成,通常都是互相交叉地混合进行,在一个阶段执行的过程中调用激活另一个阶段

相关文章

  • 好好看,好好学

    Java部分 面向对象 java 内存JVM:图文解析 Java内存结构Java虚拟机内存管理——内存空间划分Ja...

  • JVM学习笔记与调优实战(一):JVM内存结构

    标签:JVM 1、JVM内存结构根据《Java虚拟机规范(Java SE 7版)》规定,Java虚拟机内存结构可划...

  • Java虚拟机结构、内存管理相关基础知识(1)

    JVM结构体系 在内存空间中方法区和堆是所有java线程共享的,而java栈、本地方法栈、PC寄存器则有每个线程私...

  • Java 内存基础知识

    主要介绍 Java 内存相关的基础知识,为 LeakCanary 原理分析做准备。 JVM 内存结构 JVM 在运...

  • JVM基础面试题及原理讲解

    本文从 JVM 结构入手,介绍了 Java 内存管理、对象创建、常量池等基础知识,对面试中 JVM 相关的基础题目...

  • JVM基础面试题及原理讲解

    本文从 JVM 结构入手,介绍了 Java 内存管理、对象创建、常量池等基础知识,对面试中 JVM 相关的基础题目...

  • JVM基础面试题及原理讲解

    本文从 JVM 结构入手,介绍了 Java 内存管理、对象创建、常量池等基础知识,对面试中 JVM 相关的基础题目...

  • JVM基础面试题及原理讲解

    本文从 JVM 结构入手,介绍了 Java 内存管理、对象创建、常量池等基础知识,对面试中 JVM 相关的基础题...

  • Android面试题4

    1 Java基础知识。线程,java虚拟机,内存模型等。2 Android基础知识。官方API,常用控件源码,自定...

  • 学习笔记2020-05-20

    1、JAVA内存模型 2、结构型模式概述,代理模式 1、JAVA内存模型 Java 虚拟机 我们都知道 Java ...

网友评论

    本文标题:Java虚拟机结构、内存管理相关基础知识(1)

    本文链接:https://www.haomeiwen.com/subject/yzbufqtx.html