zoukankan      html  css  js  c++  java
  • 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的内存区域。

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

     

  • 相关阅读:
    1144 The Missing Number (20分)
    1145 Hashing
    1146 Topological Order (25分)
    1147 Heaps (30分)
    1148 Werewolf
    1149 Dangerous Goods Packaging (25分)
    TypeReference
    Supervisor安装与配置()二
    谷粒商城ES调用(十九)
    Found interface org.elasticsearch.common.bytes.BytesReference, but class was expected
  • 原文地址:https://www.cnblogs.com/typ1805/p/13651293.html
Copyright © 2011-2022 走看看