2021-07-12Java的内存模型和生命周期以及JVM相关知识点

java内存模型前置知识

1.操作系统

  • 操作系统(operating system,简称OS)是管理计算机硬件与软件资源的计算机程序。操作系统需要处理如管理与配置内存、决定系统资源供需的优先次序、控制输入设备与输出设备、操作网络与管理文件系统等基本事务。操作系统也提供一个让用户与系统交互的操作界面。

  • 功能

    操作系统主要包括以下几个方面的功能 :
    1.进程管理,其工作主要是进程调度,在单用户单任务的情况下,处理器仅为一个用户的一个任务所独占, 进程管理的工作十分简单。但在多道程序或多用户的情况 下,组织多个作业或任务时,就要解决处理器的调度、 分配和回收等问题 。
    2.存储管理分为几种功能:存储分配、存储共享、存储保护 、存储扩张。
    3.设备管理分有以下功能:设备分配、设备传输控制 、设备独立性。
    4.文件管理:文件存储空间的管理、目录管理 、文件操作管理、文件保护。
    5.作业管理是负责处理用户提交的任何要求。

2.进程

什么是进程?

一个在内存中运行的应用程序。每个进程都有自己独立的一块内存空间,一个进程可以有多个线程,比如在Windows系统中,一个运行的xx.exe就是一个进程。

img

  • 进程是操作系统资源分配的基本单位
  • 每个进程都有独立的代码和数据空间(程序上下文),程序之间的切换会有较大的开销
  • 如果一个进程内有多个线程,则执行过程不是一条线的,而是多条线(线程)共同完成的
  • 进程之间的地址空间和资源是相互独立的
  • 一个进程崩溃后,在保护模式下不会对其他进程产生影响
  • 每个独立的进程有程序运行的入口、顺序执行序列和程序出口

3.线程

什么是线程?

进程中的一个执行任务(控制单元),负责当前进程中程序的执行。一个进程至少有一个线程,一个进程可以运行多个线程,多个线程可共享数据。

与进程不同的是同类的多个线程共享进程的堆和方法区资源,但每个线程有自己的程序计数器、虚拟机栈和本地方法栈,所以系统在产生一个线程,或是在各个线程之间作切换工作时,负担要比进程小得多,也正因为如此,线程也被称为轻量级进程。

  • 线程是处理器任务调度和执行的基本单位
  • 每个线程都有自己独立的运行栈和程序计数器(PC),线程之间切换的开销小。
  • 线程是进程的一部分,所以线程也被称为轻权进程或者轻量级进程。
  • 同一进程的线程共享本进程的地址空间和资源
  • 一个线程崩溃整个进程都死掉。所以多进程要比多线程健壮。
  • 线程不能独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制,两者均可并发执行

多线程提高CPU使用率

img

4.计算机的硬件结构

image-20210718223230588

JVM简析

1.JVM

  • 什么是JVM?

    JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。

  • 引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java语言使用Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。

2.JVM的内存结构

JVM构成

说到JVM内存结构,就不会只是说内存结构的5个分区,而是会延展到整个JVM相关的问题,所以先了解下JVM的构成。

在这里插入图片描述

  • Java源代码编译成Java Class文件后通过类加载器ClassLoader加载到JVM中
    • 类存放在方法区
    • 类创建的对象存放在
    • 堆中对象的调用方法时会使用到虚拟机栈,本地方法栈,程序计数器
    • 方法执行时每行代码由解释器逐行执行
    • 热点代码由JIT编译器即时编译
    • 垃圾回收机制回收堆中资源
    • 和操作系统打交道需要调用本地方法接口

jvm内部执行运行流程图

这里写图片描述

Java内存模型(JMM)

1.什么是Java内存模型

  • 通俗来说,JMM是一套多线程读写共享数据时,对数据的可见性,有序性和原子性的规则

2. JMM的特性

  • 原子性
  • 可见性
  • 可排序性

3. Java内存模型实现原理

3.1 Java 运行时内存区域与硬件内存的关系

JVM 运行时内存区域是分片的,分为栈、堆等,其实这些都是 JVM 定义的逻辑概念。在传统的硬件内存架构中是没有栈和堆这种概念。

img

3.2 Java线程与主内存的关系

img

3.3 线程间的通信

img

java类的生命周期

  • 类从被加载到虚拟机内存中开始, 到卸载出内存为止, 它的整个生命周期包括: 加载
    ( Loading) 、 验证( Verification) 、 准备( Preparation) 、 解析(Resolution) 、 初始化( Initialization) 、 使用( Using) 和卸载( Unloading) 7个阶段。 其中验证、 准备、 解析3个
    部分统称为连接( Linking)
    img

  • 加载、 验证、 准备、 初始化和卸载这5个阶段的顺序是确定的, 类的加载过程
    必须按照这种顺序按部就班地开始, 而解析阶段则不一定: 它在某些情况下可以在初始化阶段之后再开始, 这是为了支持Java语言的运行时绑定( 也称为动态绑定或晚期绑定) 。这些阶段通常都是互相交叉地混合式进行的, 通常会在一个阶段执行的过程中调用、 激活
    另外一个阶段。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值