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

内存图及其画法

所有的文件都存在硬盘上,首次使用的时候才会进入内存

进程:有自己的Main方法,并且依赖自己Main运行起来的程序。独占一块内存区域,互不干扰。内存中有一个一个的进程。

操作系统只认识c语言。操作系统调度驱动管理硬件,所以卖硬件的时候要配驱动,要不用户不会用,而驱动基本以c语言为主,操作系统直接调动驱动(以驱动为主),所以只认识c语言。

  • java等语言会转成c语言,操作系统在内存上运行他们。
  • 操作系统是内存管理的核心组件,它负责协调和优化内存的使用,以确保计算机系统高效、稳定地运行。

用数组以c语言申请空间。java把内存空间分成五大份如下:

方法区

只写了这两个常量池

Test.java:

package 内存图;public class Test {public static void main(String[] mmm) {Person x1 = new Person();}public static void m1() {        }public static void m2() {}public static void m3() {}public static void m4() {}public static void m5() {}public void m6() {}
}

Person.java:

package 内存图;public class Person{public int age;public String name;public static int flag;public void m1(){  //static--静态修饰}public void m2(){}public static void m3(){}
}

static有无的区别:

静态方法(有颜色的那部分)实际存储在静态常量池,类信息常量池只是指向它的指针

静态的方法可以调用静态的,非静态的可以调用静态的和非静态的。被static方法修饰的可以直接被调用。解释如下:

静态的相当于被创造出来了,可以直接调用。非静态的没有被造出来,不能直接调用,但是同级别的都在图纸上,非静态之间可以互相被调用。

栈,堆

方法被调用是拷贝一份入栈,方法执行完毕之后就会出栈。

package 内存图;public class Test {public static void main(String[] mmm) {        Person x1 = new Person();//基本类型的值和句柄在一块int a = 9;//引用类型,无法预估大小,b是个变量,没办法在栈中申请空间,它的句柄(变量)与值没有在一块String b = "asd";m1();m2();int c = 20;if(a < c) {int k = 12;if(k > a)//作用域的内部原理:(超作用域就不能操作了)//在此范围内新声明变量的句柄要被消掉,找对应的括号,执行完之后在他里面声明的变量都要被摧毁{String w = b;}}}public static void m1() {m3();}public static void m2() {m4();}public static void m3() {m5();}public static void m4() {//静态被创造出来了,不再创造了,所以要创造非静态的。调动方法的话也是调动创造出来的方法(白色的:非静态的),拷贝这个创造出来的方法入栈//静态的方法或属性在方法区的静态常量池里面只有一份,非静态的方法在每个对象里面都有一份Person xx = new Person(); // Person类型的,底层是指针 *xx = (*)maolloc(); 申请空间xx.m1();Person xx2 = new Person();xx2.m2();xx.m2();//静态的可以通过类或对象来调用(指针可以直接调用静态常量池里面的),非静态的只能通过对象来调用。Person.m3();                                                             }public static void m5() {}public void m6() {}
}
  • 基本类型的值和句柄在一块;
  • 引用类型,无法预估大小,b是个变量,没办法在栈中申请空间,它的句柄(变量)与值没有在一块,与 c语言的指针一模一样。

调用一个方法之后,该方法入栈之后要运行,此时其他方法都停止运行。只有最上面的方法才会运行,变成最上面了就会恢复运行。运行完毕会出去。一个方法下面的方法就是调动它的方法。

//静态被创造出来了,不再创造了,所以要创造非静态的。调动方法的话也是调动创造出来的方法(右边白色的:非静态的),拷贝这个创造出来的方法入栈

//静态的方法或属性在方法区的静态常量池里面只有一份,非静态的方法在每个对象里面都有一份。其他语言也是如此。

里面实际是这样的(指针的大小通常是4字节(在32位系统上)或8字节(在64位系统上))

下面的二进制每次都是读一部分

c语言中要自己写free()回收内存,java中有垃圾回收机制,没人指向的话就会自动回收。

  • 堆中常量池中生成的没人指向不会被销毁,除非常量池内存不够了;其他地方生成的没人指向会被回收。

进程的组成单位是线程(以上的所有过程),线程---依托栈结构完成了一条线的方法的调用,线程的组成单位是方法。

程序计数器:配合栈使用,记录方法的开始结束、变量的有效范围等

本地方法栈:操作系统本身,进行同步翻译(把自定义的c语言转换成操作系统所带的c语言)

任何程序的运行都需要硬件来实现,对硬件的操控需要驱动,操作系统内核来调度驱动(不能同时驱动)

java变成c语言(java自定义c),把自定义的c语言方法翻译成操作系统内的c(通过本地方法栈)

一个程序的地址的长度都是固定的(32bit / 64bit)

  • 指针赋值 (a = "123"):a是一个指向字符的指针。表达式a = "123"意味着将指针a指向一个字符串常量"123"的首地址。改变了指针a的地址,使其指向了新字符串的起始位置。a现在指向了"123"这个字符串。
  • 解引用赋值 *a = "123" 改变指针所指向地址的值,但不能将字符串常量直接赋值给*a。

值不变:

a,b的指向通过w互换了,x1,x2没有受到影响

方法出栈后,可看到x1,x2没有受到影响

对别人产生影响:改变它的指向;改变指向区域的值

值传递

传的是数字或值的地址 new Person();也是值(对象的地址)

传这边的地址:

不同方法中的对象可以指向同一个值

方法1中的对象调用其他方法,调用完成后该方法1中的值、指向没有改变

C语言,java等

引用传递

传x1,x2的地址(句柄的地址)

c++中&a传的是引用

Sring类型的数组和二维数组

String[] arr3 = {"aa","cc",new String("mmm"),"aaa"};

String类型(引用类型)不能在原地存,存的是它的地址

int[] arr1 = {1,2,3,4}; //引用类型 基本类型:byte short int long float double char boolean
arr1 = new  int[] {2,2,3,1,3}; //不管长短,不管占不占满,都新生成一个内存页,不能在原地改
int[] arr2 = arr1;
String[] arr3 = {"aa","cc",new String("mmm"),"aaa"};
arr3[0] = "aaa";
arr3[1] = "aaaa";
Person aa = new Person();
Person[] arr4  = {new Person(), new Person(),aa};

变量不赋值默认都是0

package neicun;
public class test{public static void main(String[] nnn){int[][] arr={{1,2},{2,2},{3},{1,1,4}};int[][] arr2 = new int[3][2];// 3个一维数组,每个数组里面有两个数字,里面默认都是0arr2[1]=new int[] {3,4,5,6};String[][] arr3 = {{"aa","vv"}, {"cc","ww","ff"}, {new String("xxx")}};int[][][] arr5 = {{ {1},{2,2} },{ {3,4},{1} }};}
}

相关文章:

内存图及其画法

所有的文件都存在硬盘上&#xff0c;首次使用的时候才会进入内存 进程&#xff1a;有自己的Main方法&#xff0c;并且依赖自己Main运行起来的程序。独占一块内存区域&#xff0c;互不干扰。内存中有一个一个的进程。 操作系统只认识c语言。操作系统调度驱动管理硬件&#xff0…...

Ansys Maxwell:Qi 无线充电组件

Qi 无线充电采用感应充电技术&#xff0c;无需物理连接器或电缆&#xff0c;即可将电力从充电站传输到兼容设备。由 WPC 管理的 Qi 标准确保了不同无线充电产品之间的互操作性。以下是 Qi v1.3 标准的核心功能&#xff1a; Qi v1.3 标准的主要特点 身份验证&#xff1a;确保充…...

【Shell 脚本实现 HTTP 请求的接收、解析、处理逻辑】

以下是一个实现客户端对 Shell HTTP 服务发起 POST 请求并传入 JSON 参数的完整示例。Shell 服务会解析收到的 JSON 数据&#xff0c;根据内容执行操作。 服务端脚本&#xff1a;http_server.sh 以下脚本使用 netcat (nc) 来监听 HTTP 请求&#xff0c;并通过 jq 工具解析 JSO…...

【北京迅为】iTOP-4412全能版使用手册-第六十七章 USB鼠标驱动详解

iTOP-4412全能版采用四核Cortex-A9&#xff0c;主频为1.4GHz-1.6GHz&#xff0c;配备S5M8767 电源管理&#xff0c;集成USB HUB,选用高品质板对板连接器稳定可靠&#xff0c;大厂生产&#xff0c;做工精良。接口一应俱全&#xff0c;开发更简单,搭载全网通4G、支持WIFI、蓝牙、…...

【青牛科技】拥有两个独立的、高增益、内部相位补偿的双运算放大器,可适用于单电源或双电源工作——D4558

概述&#xff1a; D4558内部包括有两个独立的、高增益、内部相位补偿的双运算放大器&#xff0c;可适用于单电源或双电源工作。该电路具有电压增益高、噪声低等特点。主要应用于音频信号放大&#xff0c;有源滤波器等场合。 D4558采用DIP8、SOP8的封装形式 主要特点&#xff…...

Kafka 数据写入问题

目录标题 分析思路1. **生产者配置问题**&#xff1a;Kafka生产者的配置参数生产者和消费者的处理确定并优化 2. **网络问题**&#xff1a;3. **Kafka 集群配置问题**&#xff1a;unclean.leader.election.enable 4. **Zookeeper 配置问题**&#xff1a;5. **JVM 参数调优**&am…...

实战ansible-playbook(九)-profile配置- 确保 CUDA 和 MPI 环境变量正确设置并立即生效

Playbook 分析 --- - name: 确保 CUDA 和 MPI 环境变量正确设置并立即生效hosts: pod2 # 指定目标主机组或具体主机名become: yes # 使用特权提升(sudo),以root权限执行某些需要权限的任务remote_user: canopy # 远程连接使用的用户名vars: # 定义全局变量,用于Playbo…...

气膜馆:科技与环保融合的未来建筑新选择—轻空间

在全球城市化进程不断加快的背景下&#xff0c;传统建筑方式面临着越来越多的挑战。如何在有限的土地和资源条件下&#xff0c;快速、高效、环保地搭建符合多功能需求的建筑&#xff0c;成为现代建筑行业亟待解决的重要课题。而随着科技的进步与建筑材料的创新&#xff0c;一种…...

git回退到某个版本git checkout和git reset命令的区别

文章目录 1. git checkout <commit>2. git reset --hard <commit>两者的区别总结推荐使用场景* 在使用 Git 回退到某个版本时&#xff0c; git checkout <commit> 和 git reset --hard <commit> 是两种常见的方式&#xff0c;但它们的用途和影响有很…...

Preprocess

Preprocess数据预处理 文本 使用Tokenizer将文本转换为标记序列&#xff0c;创建标记的数值表示&#xff0c;并将它们组装成张量。 预处理文本数据的主要工具是标记器。标记器根据一组规则将文本拆分为标记。标记被转换为数字&#xff0c;然后转换为张量&#xff0c;这些张量…...

stm32 spi接口传输asm330l速率优化(及cpu和dma方式对比)

最近一段时间做了一个mems的项目&#xff0c;项目的方案是stm32g071做主控&#xff0c;读写3颗asm330l的硬件形态。最初是想放置4颗imu芯片&#xff0c;因为pcb空间布局的问题&#xff0c;改放了3颗。但对于软件方案来说无所谓&#xff0c;关键是如何优化spi的传输速率&#xf…...

数字时代的文化宝库:存储技术与精神生活

文章目录 1. 文学经典的数字传承2. 音乐的无限可能3. 影视艺术的数字化存储4. 结语 数字时代的文化宝库&#xff1a;存储技术与精神生活 在数字化的浪潮中&#xff0c;存储技术如同一座桥梁&#xff0c;连接着过去与未来&#xff0c;承载着人类文明的瑰宝。随着存储容量的不断增…...

flex: 1 display:flex 导致的宽度失效问题

flex: 1 & display:flex 导致的宽度失效问题 问题复现 有这样的一个业务场景&#xff0c;详情项每行三项分别占33%宽度&#xff0c;每项有label字数不固定所以宽度不固定&#xff0c;还有content 占满标签剩余宽度&#xff0c;文字过多显示省略号&#xff0c; 鼠标划入展示…...

Hive 窗口函数与分析函数深度解析:开启大数据分析的新维度

Hive 窗口函数与分析函数深度解析&#xff1a;开启大数据分析的新维度 在当今大数据蓬勃发展的时代&#xff0c;Hive 作为一款强大的数据仓库工具&#xff0c;其窗口函数和分析函数犹如一把把精巧的手术刀&#xff0c;助力数据分析师们精准地剖析海量数据&#xff0c;挖掘出深…...

前端工程 Node 版本如何选择

1. Node 与 Npm 版本对应 这是一个必知必会的问题&#xff0c;尤其是对于维护那些老掉牙、一坨坨、非常大的有着长期历史的老破大工程。 1.1. package-lock.json 版本 首先你要会看项目的 package-lock.json 文件中的 lockfileVersion 版本号&#xff0c;这对于 NPM 安装来说…...

推荐在线Sql运行

SQL Fiddle 1、网址&#xff1a;SQL Fiddle - Online SQL Compiler for learning & practiceDiscover our free online SQL editor enhanced with AI to chat, explain, and generate code. Support SQL Server, MySQL, MariaDB, PostgreSQL, and SQLite.http://www.sqlfi…...

【数据结构】【线性表】特殊的线性表-字符串

目录 字符串的基本概念 字符串的三要素 字符串的基本概念 串的编码 串的实现及基本运算 顺序串的实现 串的静态数组实现 串的动态数组的实现 顺序存储的四种方案 链式串的实现 基本运算 方案三 方案一 字符串的基本概念 数据结构千千万&#xff0c…...

app-1 App 逆向环境准备(mumu模拟器+magisk+LSPosed+算法助手+抓包(socksDroid+charles)+Frida环境搭建

一、前言 本篇是基于 mumu模拟器 进行环境配置记录。&#xff08;真机的后面博客记录&#xff09; 二、mumu模拟器magiskLSPosed算法助手 2.1、mumu模拟器 选择 mumu 模拟器&#xff0c;下载地址&#xff1a;https://mumu.163.com 安装完成后打开&#xff0c;找到设置中心进…...

在米尔FPGA开发板上实现Tiny YOLO V4,助力AIoT应用

学习如何在 MYIR 的 ZU3EG FPGA 开发板上部署 Tiny YOLO v4&#xff0c;对比 FPGA、GPU、CPU 的性能&#xff0c;助力 AIoT 边缘计算应用。 一、 为什么选择 FPGA&#xff1a;应对 7nm 制程与 AI 限制 在全球半导体制程限制和高端 GPU 受限的大环境下&#xff0c;FPGA 成为了中…...

【IT】测试用例模版(含示例)

这里写目录标题 一、测试用例模版二、怎么用模版示例如何使用这个模板 一、测试用例模版 一个相对标准的测试用例模板通常包含以下部分&#xff1a; 测试用例ID&#xff1a;唯一标识符&#xff0c;用于追踪测试用例。测试用例标题&#xff1a;简短描述测试用例的目的。测试用…...

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)

文章目录 1.什么是Redis&#xff1f;2.为什么要使用redis作为mysql的缓存&#xff1f;3.什么是缓存雪崩、缓存穿透、缓存击穿&#xff1f;3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...

YSYX学习记录(八)

C语言&#xff0c;练习0&#xff1a; 先创建一个文件夹&#xff0c;我用的是物理机&#xff1a; 安装build-essential 练习1&#xff1a; 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件&#xff0c;随机修改或删除一部分&#xff0c;之后…...

《通信之道——从微积分到 5G》读书总结

第1章 绪 论 1.1 这是一本什么样的书 通信技术&#xff0c;说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号&#xff08;调制&#xff09; 把信息从信号中抽取出来&am…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明

AI 领域的快速发展正在催生一个新时代&#xff0c;智能代理&#xff08;agents&#xff09;不再是孤立的个体&#xff0c;而是能够像一个数字团队一样协作。然而&#xff0c;当前 AI 生态系统的碎片化阻碍了这一愿景的实现&#xff0c;导致了“AI 巴别塔问题”——不同代理之间…...

【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具

第2章 虚拟机性能监控&#xff0c;故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令&#xff1a;jps [options] [hostid] 功能&#xff1a;本地虚拟机进程显示进程ID&#xff08;与ps相同&#xff09;&#xff0c;可同时显示主类&#x…...

如何理解 IP 数据报中的 TTL?

目录 前言理解 前言 面试灵魂一问&#xff1a;说说对 IP 数据报中 TTL 的理解&#xff1f;我们都知道&#xff0c;IP 数据报由首部和数据两部分组成&#xff0c;首部又分为两部分&#xff1a;固定部分和可变部分&#xff0c;共占 20 字节&#xff0c;而即将讨论的 TTL 就位于首…...

springboot整合VUE之在线教育管理系统简介

可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生&#xff0c;小白用户&#xff0c;想学习知识的 有点基础&#xff0c;想要通过项…...

Go语言多线程问题

打印零与奇偶数&#xff08;leetcode 1116&#xff09; 方法1&#xff1a;使用互斥锁和条件变量 package mainimport ("fmt""sync" )type ZeroEvenOdd struct {n intzeroMutex sync.MutexevenMutex sync.MutexoddMutex sync.Mutexcurrent int…...

C++ 设计模式 《小明的奶茶加料风波》

&#x1f468;‍&#x1f393; 模式名称&#xff1a;装饰器模式&#xff08;Decorator Pattern&#xff09; &#x1f466; 小明最近上线了校园奶茶配送功能&#xff0c;业务火爆&#xff0c;大家都在加料&#xff1a; 有的同学要加波霸 &#x1f7e4;&#xff0c;有的要加椰果…...