当前位置: 首页 > news >正文

JVM内存模型概述

565fd2d3d17d4449a9fe53215c67ee02.gif这里主要分为五大块,分别是:本地方法栈、方法区、java堆、程序计数器和java栈。其中重点是方法区、java堆和java栈。

 

 

下面就把各个区域的性质总结一下:(说明,下面的只是结论,没有详细的对各个内存块进行详细深入的介绍,有兴趣的可以看一下《深入理解java虚拟机》(周志明著)深入研究一下。)

 

方法区:

  方法区是线程安全的,各个线程共享该内存区域。

  存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。

  运行时常量池(Runtime Constant Pool)是方法区的一部分,存储内容主要是编译期生成的各种字面量和符号引用。

  方法区的大小不必是固定的,JVM可根据应用需要动态调整。

  不需要连续的内存,可以选择固定大小或者可扩展,还可以选择不实现垃圾收集。

  方法区也可被垃圾收集,当某个类不在被使用(不可触及)时,JVM将卸载这个类,进行垃圾收集。

  当方法区无法满足内存分配需求时,将抛出OutOfMemoryError异常。

 

 

java堆

  线程共享的,存放所有对象实例(包括实例变量)和数组。在虚拟机启动时创建。

  生命周期与虚拟机相同,可以不使用连续的内存地址。

  垃圾回收的主要区域。根据分代收集算法可以分为新生代和老年代。

  如果在堆中没有内存完成实例分配,并且堆也无法再扩展时,将会抛出OutOfMemoryError 异常。

 

虚拟机栈(参考文章)

  线程私有的,它的生命周期与线程相同。

  每个方法被执行的时候都会同时创建一个栈帧(Stack Frame)用于存储局部变量表、操作栈、动态链接、方法出口等信息。

  栈的大小可以是固定的,或者是动态扩展的。如果请求的栈深度大于最大可用深度,则抛出stackOverflowError;如果栈是可动态扩展的,但没有内存空间支持扩展,则抛出OutofMemoryError。

  栈帧

    帧里面存放的是方法的局部变量(方法中的局部变量),操作数栈,动态链接,方法返回地址和一些额外的附加信息组成。

    活动线程中,只有栈顶的栈帧是有效的,称为当前栈帧,这个栈帧所关联的方法称为当前方法。执行引擎所运行的所有字节码指令都只针对当前栈帧进行操作。

  局部变量表

    用于存放方法参数和方法内部定义的局部变量。

    基本数据类型、对象引用和returnAddress 类型。

  操作数栈

    存储程序执行过程中的具体数据。

  动态连接

  返回地址

 

对于java Stack有必要深入说一下,特别是栈帧的结构。

 

  

 

 

 

本地方法栈

  为虚拟机使用到的Native 方法服务。

程序计数器

  每个线程有要有一个独立的程序计数器,记录下一条要运行的指令。

  线程私有的内存区域。如果执行的是JAVA方法,计数器记录正在执行的java字节码地址,如果执行的是native方法,则计数器为空。

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

相关文章:

JVM内存模型概述

这里主要分为五大块,分别是:本地方法栈、方法区、java堆、程序计数器和java栈。其中重点是方法区、java堆和java栈。 下面就把各个区域的性质总结一下:(说明,下面的只是结论,没有详细的对各个内存块进行详细…...

【JavaEE】CAS -- 多线程篇(7)

CAS 1. 什么是 CAS2. CAS 伪代码3. CAS 是怎么实现的4. CAS的应用4.1 实现原子类4.2 实现自旋锁 5. CAS 的 ABA 问题 1. 什么是 CAS CAS: 全称Compare and swap,字面意思:”比较并交换“能够比较和交换 某个寄存器中的值和内存中的值, 看是否相等, 如果相等, 则把另…...

18-spring 事务

文章目录 1. xml和注解配置方式的对象2.spring事务传播特性3. 注解事务的初始化流程4. 创建事务信息流程图5. 事务回滚流程图 1. xml和注解配置方式的对象 2.spring事务传播特性 事务传播行为类型说明PROPAGATION_REQUIRED如果当前没有事务,就新建一个事务&#xf…...

Qt窗体设计的布局

本文介绍Qt窗体的布局。 Qt窗体的布局分为手动布局和自动布局,手动布局即靠手工排布各控件的位置。而自动布局则是根据选择的布局类型自动按此类型排布各控件的位置,使用起来比较方便,本文主要介绍Qt的自动布局。 1.垂直布局 垂直布局就是…...

分布式锁 - 理论篇

一、为什么需要分布式锁 二、分布式锁实现 1.分布式锁演进 - 基本原理 我们可以同时去一个地方“占坑”,如果占到,就执行逻辑。否则就必须等待,直到释放锁。“占坑”可以去redis,可以去数据库,可以去任何大家都能访…...

复杂的菱形继承及菱形虚拟继承(详解)

复杂的菱形继承及菱形虚拟继承 复杂的菱形继承及菱形虚拟继承虚拟继承解决数据冗余和二义性的原理笔试面试题 复杂的菱形继承及菱形虚拟继承 单继承:一个子类只有一个直接父类时称这个继承关系为单继承 多继承:一个子类有两个或以上直接父类时称这个继…...

【快捷测试模型是否可以跑通】设置一张图片的张量形式,送入自己写的模型进行测试

文章目录 1. 1. import torch.nn as nn import torch from einops import rearrange, repeat from einops.layers.torch import Rearrange import torch.nn.functional as Fclass PreNorm(nn.Module):def __init__(self, dim, fn):super().__init__()self.norm nn.LayerNorm(…...

软考系列(系统架构师)- 2019年系统架构师软考案例分析考点

试题一 软件架构(架构风格、质量属性) 【问题1】(13分) 针对用户级别与折扣规则管理功能的架构设计问题,李工建议采用面向对象的架构风格,而王工则建议采用基于规则的架构风格。请指出该系统更适合采用哪种…...

安防视频监控系统EasyCVR视频汇聚存储平台定制化开发:新增kafka配置

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。平台可拓展性强、…...

C++设计模式_08_Factory Method工厂方法模式

文章目录 1. “对象创建模式”模式1.1 典型模式 2. 动机(Motivation)3. 代码演示Factory Method工厂方法模式3.1 常规方法3.2 面向接口的编程3.2.1 FileSplitter1.cpp3.2.2 MainForm1.cpp 3.3 Factory Method工厂方法3.3.1 ISplitterFactory.cpp3.3.2 Ma…...

【TensorFlow1.X】系列学习笔记【基础一】

【TensorFlow1.X】系列学习笔记【基础一】 大量经典论文的算法均采用 TF 1.x 实现, 为了阅读方便, 同时加深对实现细节的理解, 需要 TF 1.x 的知识 文章目录 【TensorFlow1.X】系列学习笔记【基础一】前言线性回归非线性回归逻辑回归总结 前言 本篇博主将用最简洁的代码由浅入…...

Linux 基础操作手记三(内存篇)

Linux 基础操作手记三 释放内存虚拟机彻底无网络测试网速设置虚拟内存交换空间未使用虚拟机设置虚拟内存无法开机问题GParted - 分配内存系统盘扩容自己 释放内存 sync && echo 3 > /proc/sys/vm/drop_caches 虚拟机彻底无网络 还原默认设置,静静的等待…...

NodeJS的初使用,以及引入第三方插件和安装淘宝镜像的教程

NodeJs 命令 npm init -y 生成package.json文件npm i jquery --save–dev 开发依赖(jQuery后面还可以跟模块,可以有多个)npm i jquery --save 生产依赖npm i jquery --D 开发依赖npm uninstall jquery 卸载删除npm i 把删掉的模块,全部重新加载回来 1.介绍 1.什么是NodeJs?…...

Java读取文件的N种方法

1.概述 在这篇文章里, 我们将探索不同的方式从文件中读取数据。 首先, 学习通过标准的的Java类,从classpath、URL或者Jar中加载文件。 然后,学习通用BufferedReader, Scanner, StreamTokenizer, DataInputStream, SequenceInput…...

子类的构造与析构过程

一、简介 父类,也称基类,其构造方法和析构方法不能被继承; 子类,也称派生类,继承父类的方法和属性,但要加入新的构造和析构函数。 二、构造与析构过程 构造:先调用父类——>再调用子类 析构&…...

位运算相关笔记

位运算 Part 1:基础 左移:左移一位,相当于某数乘以 2 2 2。左移 x x x位,相当于该数乘以 2 x 2^x 2x。 右移:右移一位,相当于某数除以 2 2 2。右移 x x x位,相当于该数除以 2 x 2^x 2x。 与运算&…...

uniapp 安装 u-view 组件库

u-view 组件库安装教程:https://uviewui.com/components/install.html 注:以下使用 HBuilderx 安装 u-view 2.0 版本,不适用于其它版本。 1.安装 u-view 组件库 2、注册并登录 HBuilderx 账号,点击下载 u-view 组件库。 3、点击…...

Go 语言的成功案例:谁在使用 Go?

Go 语言,也被称为 Golang,是一门由Google开发的开源编程语言。自从2009年首次亮相以来,它在编程社区中崭露头角,并吸引了越来越多的开发者和组织。Go 以其高效的并发性、出色的性能和简单易懂的语法而闻名。在本文中,我…...

UG\NX二次开发 实时查看 NX 日志文件

文章作者:里海 来源网站:王牌飞行员_里海_里海NX二次开发3000例,里海BlockUI专栏,C\C++-CSDN博客 感谢粉丝订阅 感谢 a18037198459 订阅本专栏,非常感谢。 简介 实时查看 NX 日志文件,有助于分析保存时间等。打开WindowsPowerShell并实时获取日志文件内容的小功能。 效果 代…...

ZooKeeper+HBase分布式集群环境搭建

安装版本:hadoop-2.10.1、zookeeper-3.4.12、hbase-2.3.1 一、zookeeper集群搭建与配置 1.下载zookeeper安装包 2.解压移动zookeeper 3.修改配置文件(创建文件夹) 4.进入conf/ 5.修改zoo.cfg文件 6.进入/usr/local/zookeeper-3.4.12/zkdata…...

别再手动传源码包了!Maven的maven-source-plugin插件配置详解(附3.0.1版本避坑指南)

告别手动源码包:Maven-source-plugin高效配置全解析 每次团队协作时,你是否经历过这样的场景:同事更新了工具库的代码,你满怀期待地拉取最新依赖,却发现IDE里点不开源码,只能对着二进制文件发呆&#xff1f…...

探索ComfyUI-FramePackWrapper:基于FP8优化的高效视频生成架构

探索ComfyUI-FramePackWrapper:基于FP8优化的高效视频生成架构 【免费下载链接】ComfyUI-FramePackWrapper 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI-FramePackWrapper 在AI视频生成领域,ComfyUI-FramePackWrapper作为lllyasviel F…...

Spring Boot启动报BeanInstantiationException?别慌,这可能是你的构造方法在‘抢跑’

Spring Boot启动时报BeanInstantiationException?构造方法时序问题深度解析 当你满怀期待地启动Spring Boot项目时,控制台突然抛出BeanInstantiationException,紧接着是一串令人窒息的NullPointerException堆栈信息——这种场景对中级开发者来…...

别再只会Merge了!用IDEA的Cherry-Pick功能,优雅管理你的个人实验分支

别再只会Merge了!用IDEA的Cherry-Pick功能,优雅管理你的个人实验分支 在独立开发或小团队协作中,我们常常会维护一个长期存在的实验性分支(比如feature-experiment),用于尝试新功能或修复复杂bug。传统做法…...

告别系统休眠困扰:MouseJiggler鼠标模拟工具全解析

告别系统休眠困扰:MouseJiggler鼠标模拟工具全解析 【免费下载链接】mousejiggler Mouse Jiggler is a very simple piece of software whose sole function is to "fake" mouse input to Windows, and jiggle the mouse pointer back and forth. 项目地…...

别再只盯着Grad-CAM了!用OpenCV的applyColorMap函数,5分钟搞定PyTorch模型的特征图可视化

5分钟实现PyTorch特征图可视化:OpenCV高阶玩法全解析 在调试深度学习模型时,我们常常需要确认模型是否真正"看"到了图像的关键区域。传统方法如Grad-CAM虽然功能强大,但对于快速验证和日常调试来说,往往显得过于笨重。今…...

AI Agent Harness Engineering 与大模型微调:如何让智能体更适配特定行业场景

AI Agent Harness Engineering 与大模型微调:如何让智能体更适配金融、医疗等强约束特定行业场景第一部分:引言与基础 (Introduction & Foundation) 1. 引人注目的标题 主标题:AI Agent Harness Engineering 领域微调:破解强…...

智慧树视频学习自动化:如何用浏览器插件实现高效学习?

智慧树视频学习自动化:如何用浏览器插件实现高效学习? 【免费下载链接】zhihuishu 智慧树刷课插件,自动播放下一集、1.5倍速度、无声 项目地址: https://gitcode.com/gh_mirrors/zh/zhihuishu 还在为智慧树平台上的重复性操作而烦恼吗…...

软件开发的架构设计中 分包、分模块的目的

分包与分模块的核心目的在于实现业务功能的解耦、优化与复用,以应对软件系统日益增长的复杂性。 目的与价值 职责分离与专注度提升:将庞大复杂的业务系统拆分为独立模块(如商品模块、订单模块、用户中心模块),使每个模…...

三步快速安装Fast-GitHub:彻底解决国内GitHub访问难题的终极指南

三步快速安装Fast-GitHub:彻底解决国内GitHub访问难题的终极指南 【免费下载链接】Fast-GitHub 国内Github下载很慢,用上了这个插件后,下载速度嗖嗖嗖的~! 项目地址: https://gitcode.com/gh_mirrors/fa/Fast-GitHub 你是否…...