• JVM自动内存管理:内存区域基础概念


    1.课程概要

    1Java虚拟机和Java内存区域概述

    2Java虚拟机栈和本地方法栈

    3Java

    4)方法区和运行时常量池

    5)直接内存

    2.Java虚拟机运行时数据区

    运行时数据区的划分(5):

    1Java虚拟机栈

    2)本地方法栈

    3)程序计数器

    4Java

    5)方法区(包含运行时常量池)

     

    程序计数器(Program counter Register

    1.是一块较小的内存空间,它的作用可以看作是当前线程所执行的字节码的行号指示器

    2.如果线程正在执行的是一个java方法,这个计数器记录的是正在执行的虚拟机字节码指令的地址;

    如果正在执行的是Native方法,这个计数器值则为空

    3.此内存区域是唯一一个在Java虚拟机规范中没有规定任何OutOfMemoreyError情况的区域

    Java虚拟机栈和本地方法栈

    Java虚拟机栈的概念和特征

    1)线程私有

    2)后进先出栈

    3)存储栈帧,支持java方法的调用、执行和退出

    4)可能出现OutOfMemoryError异常和StackOverflowError异常、

    栈帧的概念和特征

    1Java虚拟机栈中存储的内容,它被用来存储数据和部分过程的数据结构,

    同事也被用来处理动态连接,方法返回值和异常分派

    2)一个完整的栈帧包含:局部变量表、操作数栈、动态连接信息、方法正常完成和

    异常完成信息

    局部变量表概念和特征

    1)由若该个Slot组成,长度由编译期决定

    2)单个Slot可以存储一个类型为booleanbytecharshortfloatreference

    returnAddress 的数据,两个Slot可以存储一个类型为long或者double的数据

    3)局部变量表用于方法间参数传递,以及方法执行过程中存放基础数据类型的值

    和对象的引用

    操作数栈的概念和特征

    1)是一个后进先出栈,由若干个Entry组成,长度由编译期决定

    2)单个Entry即可以存储一个Java虚拟机中国定义的任意数据类型的值,包括

    longdouble类型,但是存储longdouble类型的Entry深度为2,其他类型的深度为1

    3)在方法执行过程中,栈帧用于存储计算阐述和计算结果;在方法调用时,操作数栈用来准备调用方法的参数以及接收方法返回结果

     

    本地方法栈的概念和特征

    1)线程私有

    2)作用是支撑Native方法的调用、执行和退出

    3)后进先出栈

    4)可能出现OutOfMemoryError异常和StackOverflowError异常

    5)有一些虚拟机(如HotSpot)将Java虚拟栈和本地方法栈合并实现

    Java

    Java堆的特征

    1.给所有线程共享的内存区域

    2.通常是Java虚拟机中最大的一块内存区域

    3.作用是作为Java对象的主要存储区域

    4.JVMS明确要求该区域需要实现自动内存管理,即常说的GC,但是不限制采用哪种算法和技术去实现

    (新生代,老年代,永久代)分带算法

    5.可能出现OutOfMemoryError异常

    从栈到堆的关联过程

     

    方法区(永久代)和运行时常量池

    方法区的特点

    1.全局共享

    2.作用是存取Java类的结构信息(常量,静态变量,方法,字段等)

    3.JVMS不要求该区域实现自动内存管理,但是商用Java虚拟机都能够自动管理该区域的内存

    4.可能出现OutOfMemoryError

    运行时常量池的特征(是方法区中的一部分)

    1.全局共享

    2.是方法区的一部分

    3.作用是存取Java类文件常量池中的符号信息

    4.可能出现OutOfMemoryError异常

    HotSpot方法区实现的变迁

    永久代与方法区

    1.JDK1.2~JDK6HotSpot使用永久代实现方法区

    2.JDK7开始,HotSpot开始了移除永久代的计划

      1)符号表被移动到Native Heap

      2)字符创常量和类的静态引用被移动到Java Heap

    3.JDK8开始,永久代已经被元空间(Metaspace)所代替

    直接内存

    直接内存的概念和特征

    1.并非JVMS定义的标准Java运行时内存区域

    2.JDK1.4中加入NIO被引入,目的是背面在Java堆和Native堆中来回复制数据带来的性能损耗

    3.全局共享

    4.能被自动管理,但是在检测手段上可能会有一些简陋

    5.可能出现OutOfMemoryError异常

  • 相关阅读:
    Flask 学习7. make_response() 自定义响应内容 上海
    Flask 学习5.请求对象Request 上海
    Flask 学习3.设置 HTTP 请求 方法(get/post) 上海
    Flask 学习2.url访问地址(路由配置) 上海
    Flask 学习9. 开启调试模式(debug模式)的2种方法 上海
    modelmapper 简单智能的对象映射工具
    使用jsch 实现ssh tunnel
    jimfs java 内存文件系统实现
    基于commonsdiscovery 开发简单的插件化java系统
    dremio 20 版本可以下载体验了
  • 原文地址:https://www.cnblogs.com/chengxuyuanzhilu/p/6869541.html
Copyright © 2020-2023  润新知