• JVM简单概述


     

    一、内存模型&分区

    Java虚拟机在运行Java程序时,会管理着一块内存区域:运行时数据区

    在运行时数据区里,会根据用途进行划分为以下模块:

    1、Java虚拟机栈

    2、本地方法栈

    3、Java堆

    4、方法区

    5、程序计数器

    二、Java堆

    简介:

    1、定义:即堆内存(Heap),是垃圾收集器管理的主要区域,也称为GC堆。

    2、作用:存放Java对象实例。

    3、特点:在JVM内存中是最大的,是线程共享的区域。

    4、抛出的异常:OutOfMemoryError异常,堆中没有足够的内存完成对象实例的分配、堆无法再扩展。

    注: 1、从内存回收的角度分为:新生代和老年代; 2、从内存分配的角度相当于:多个线程私有的分配缓冲区。

    三、Java虚拟机栈

    简介:

    1、定义:栈内存(Stack),是Stack、java方法执行的内存模型。

    2、作用:存储java方法执行时的局部变量。

    注:以帧栈的形式,含数据型、对象的应用,方法执行结束后释放。

    3、特点:线程私有、生命周期与线程相同。

    4、抛出的异常:OutOfMemoryError异常(虚拟机栈扩展时无法申请到内存空间)、StackOverflowError异常(线程请求栈深度>虚拟机所允许深度)。

    注: 1、每个java方法执行时都会创建一个栈帧; 2、一个java方法从被调用到执行完成等于一个栈帧在虚拟机栈中的入栈到出栈; 3、局部变量表所需内存空间在方法编译时就会完成分配,在方法运行时不会改变大小。

    四、本地方法栈

    简介: 十分类似java虚拟机栈,与java虚拟机栈区别在于:服务对象。java虚拟机栈为执行java方法服务,而本地方法栈为执行native方法服务。

    五、方法区

    简介: 1、定义:堆的一个逻辑部分,为了与java堆区分,又称“非堆”区域(Non-Heap)。

    2、作用:存储已被虚拟机加载的类信息、常量、静态变量等数据。

    3、特点:线程共享。

    4、抛出的异常:OutOfMemoryError异常(当方法区无法满足内存分配需求时抛出)。

    注:该区域的内存回收主要针对运行时常量池和对类的卸载,又称:永久代,回收条件苛刻,很少出现垃圾收集。

    运行时常量池

    • 定义:方法区的一部分。

    • 作用:存放类文件在编译时生成的各种字面量、符号引用。

    • 特点:动态性,即运行时也可添加新的常量,如String类的intern()。

    • 抛出的异常:OutOfMemoryError异常(当场量池无法申请到内存时)。

    六、程序计数器

    简介:

    1、定义:当前线程所执行的字节码的行号指示器。

    2、作用:实现异常处理、线程恢复等基础功能。

    3、原理:通过改变计数器的值来选取下一条执行的字节码指令。

    4、特点:线程私有、内存空间小。

    5、抛出的异常:唯一一个在jvm中无任何OutOfMemoryError的内存区域。

    注:线程私有的内存区域:为了使得线程切换后恢复到正确的执行位置,每个线程都配有一个独立的程序计数器,各线程互不影响,独立存储的内存区域。

     

  • 相关阅读:
    iOS
    2016-北京游线路规划
    OC 组合实现多继承
    如何把项目托管到GitHub
    iOS6和iOS7代码的适配(2)——status bar
    iOS6和iOS7代码的适配(1)
    Xcode ARC需要什么版本的环境支持
    内容页直接输出图集函数及使用方法
    vue-cli如何引入bootstrap工具
    实现Sublime Text3中vue文件高亮显示的最有效的方法
  • 原文地址:https://www.cnblogs.com/typ1805/p/13651293.html
Copyright © 2020-2023  润新知