静态区(Static) 静态区用于存放全局变量、静态变量(static关键字修饰的变量)和静态成员变量。这些变量在程序开始时分配内存,并在程序结束时释放,具有全局的生命周期。...常量区(Read-Only or Constant Section) 常量区用于存放程序中不可修改的常量数据。...编译器决定存储的常量数据:编译器可能将某些不变的常量数据(如浮点数、整型常量等)放在常量区。 特点: 只读:程序无法修改常量区的内容,通常对这些区域的写操作会导致运行时错误。...数据段(静态区) 静态全局变量(staticGlobalVar)也是在数据段(静态区)分配内存。 staticVar在哪里? 选项:C....数据段(静态区) 静态局部变量(staticVar)在数据段(静态区)分配内存,并且生命周期贯穿整个程序执行。 localVar在哪里? 选项:A.
注意它与数据结构中的堆是两回事,分配方式倒是类似于链表 全局区(静态区)(static): 全局变量和静态变量的存储是放在一块的,程序结束后由系统释放。...初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 文字常量区:常量字符串就是放在这里的。程序结束后由系统释放 程序代码区:存放函数体的二进制代码。.../栈 char s[] = "abc";//栈 char *p2 = "123456";//"123456"在常量区,p2在栈上 static int c = 0;//全局静态区...strcpy(p1, "123456");//123456在常量区,编译器可能将它与p1所指向123456优化为一个地方 } 堆和栈的理论知识 申请方式 栈由系统自动分配,速度较快,是一块连续的内存区域...栈空间分静态分配和动态分配两种。静态分配是编译器完成的,比如自动变量(auto)的分配。动态分配由alloca函数完成。栈的动态分配无需释放(是自动),也就没有释放函数。
方法区总共就分了10m,在oom的时候,也就使用了7m多,说明这个常量池,在jdk1.7的时候,确实被安排到了堆Java heap里面了。 上面的说明加起来,使得下面这个理论得到了验证。...JAVA的三种常量池 此外,Java有三种常量池,即字符串常量池(又叫全局字符串池)、class文件常量池、运行时常量池。 1....*字面量就是我们所说的常量概念,如文本字符串、被声明为final的常量值等。 按照这个分析的话, 运行时常量池和静态常量池存放在元空间中,而字符串常量池依然存放在堆中。...方法区包括类信息、常量、静态变量等,是JVM规范。 方法区是jvm规范里面的概念。 1.7之前方法区的实现就是永久代。 1.7 把常量池和静态变量放入了堆中,也就是方法区由永久代和堆实现。...1.8 把永久代删除使用元空间,也就是方法区由元空间(类信息)和堆实现(常量池、静态变量)。
局部变量 函数形参 栈区 栈溢出——stckoverflow动态开辟的内存 如malloc calloc 堆区全局变量 static修饰的变量 静态区#include int main
全局变量保存在内存的全局存储区中,占用静态的存储单元;局部变量保存在栈中,只有在所在函数被调用时才动态地为变量分配存储单元。...全局变量 1.1 全局变量 函数外面声明 可以跨文件访问 可以在声明时赋上初始值 如果没有赋初始值,系统自动赋值为0 存储位置:既非堆,也非栈,而是专门的【全局(静态)存储区static】!...(静态)存储区static】!...堆区(heap):一般由程序员分配和释放,若程序员不释放,程序结束时可能由操作系统回收。与数据结构中的堆是两码事,分配方式类似于链表。 全局区(static):全局变量和静态变量存放在此。...文字常量区:常量字符串放在此,程序结束后由系统释放。 程序代码区:存放函数体的二进制代码。 5.
C++ 在程序执行时,将内存大致分为代码区,全局区,栈区和堆区四个区域。不同的区域存储不同的数据,赋予不同的生命周期,能够更灵活地进行编程。...代码区:存放函数体的二进制代码,由操作系统管理创建,代码区时共享的,对于频繁被执行的程序,只需要存有一份代码即可; 全局区:存放全局变量和静态变量以及常量,在程序结束后由操作系统释放; 栈区:由编译其自动分配释放...,存放函数的参数值以及局部变量等; 堆区:一般由程序员通过 new 开辟空间,进行分配和释放,若程序员不释放,则程序结束时由操作系统回收 下面通过一个例子对全局区,栈区,堆区的数据声明周期进行说明: /...<< "a 的地址为:\t" << int(&a) << endl; cout << "b 的地址为:\t" << int(&b) << endl; // 创建静态变量,属于全局区 static...同理,a,b 都属于栈区,d_a,d_b 都属于堆区。
美团2017校园招聘 Android 静态变量存储在__区 A 全局区 B 堆 C 栈 D 常量区 2017年3月21日19:00开始笔试,选项凭回忆打的,未全匹配。...本人参考答案:A 知识点 内存到底分几个区? 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。...2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由os回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。...3、全局区(静态区)(static)—全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。程序结束后有系统释放。...4、文字常量区 —常量字符串就是放在这里的。 程序结束后由系统释放。 5、程序代码区—存放函数体的二进制代码。
分区规范 首先要明确,JVM规范中并没有常量池这一说法,都是各种不同的jvm实现为了便于处理加以区分的。在JVM规范中统一称呼为方法区(JDK7之后这样说也不准确,有些数据常量数据又迁移到堆中)。...下面的常量池主要以Java8自带的HotSpot为例,其他版本的Jvm会有各种区别。...(但实际处理还是有很多差异,大部分以前放置在永生代数据被迁移到堆中,而元数据区仅存放引用。...在jvm启动时,这些信息会被加载到class常量池中,当一个类要被编译加载之前这些符号和字符串会经过JVM的加载器将其实例化成为一个常量值(Class对象的实例)存在在运行时常量区。...运行时常量池 运行时常量池(Runtime Constant Pool)主要用于存放jvm在运行时所有静态量。参考"深入理解java虚拟机"一书2.2.6对其的描述:运行时常量池是方法区的一部分。
1:方法区(Method Area)存储的静态变量 静态变量又称为类变量,类中被static修饰的成员变量都是静态变量(类变量) 静态变量之所以又称为类变量,是因为静态变量和类关联在一起,随着类的加载而存在于方法区...(而不是堆中) 八种基本数据类型(byte、short、int、long、float、double、char、boolean)的静态变量会在方法区开辟空间,并将对应的值存储在方法方法区,对于引用类型的静态变量如果未用...new关键字为引用类型的静态变量分配对象(如:static Object obj;)那么对象的引用obj会存储在方法区中,并为其指定默认值null;若,对于引用类型的静态变量如果用new关键字为引用类型的静态变量分配对象...(如:static Person person = new Person();),那么对象的引用person 会存储在方法区中,并且该对象在堆中的地址也会存储在方法区中(注意此时静态变量只存储了对象的堆地址...)时执行,静态代码块(静态初始化块)只执行一次 为啥需要静态初始化块?
1.简介 Java NIO 相关类在 JDK 1.4 中被引入,用于提高 I/O 的效率。Java NIO 包含了很多东西,但核心的东西不外乎 Buffer、Channel 和 Selector。...5.总结 Buffer 是 Java NIO 中一个重要的辅助类,使用比较频繁。在不熟悉 Buffer 的情况下,有时候很容易因为忘记调用 flip 或其他方法导致程序出错。
at java.nio.Buffer.nextGetIndex(Buffer.java:506) at java.nio.HeapByteBuffer.getInt(HeapByteBuffer.java...() 方法 , 可以返回一个只读缓冲区 , 该缓冲区 , 只能读取 , 不能写入 ; ② 实际类型 : 只读缓冲区的类型是 HeapByteBufferR ; ③ 只读缓冲区写入数据异常 : 该 只读缓冲区....java:28) 2 ....//buffer.getInt(); //向只读缓冲区中存放数据抛 java.nio.ReadOnlyBufferException 异常 //readOnlyBuffer.putShort...代码示例 : package kim.hsl.nio; import java.io.IOException; import java.io.RandomAccessFile; import java.nio.MappedByteBuffer
本文将解析和讨论Go语言缓冲区的动态和静态管理方式。这类技术在高性能计算和资源优化方面特别有价值。 1....技术讨论:静态与动态缓冲区 此代码段展示了静态和动态内存管理的结合使用: 静态分配:通过声明一个固定大小的数组buf,在编译时分配内存。...优点分析 静态和动态内存管理各有优缺点,合理的结合使用可以提升程序的性能和效率: 性能:静态分配减少了运行时的内存分配调用,从而降低了延迟。 安全性:预分配的静态数组避免了运行时内存不足的风险。...在这些场景下,数据包的大小可能不断变化,使用静态加动态的内存管理策略可以优化性能和资源利用率。 5....通过结合使用静态和动态方法,开发者可以在保证性能的同时,应对各种运行时的内存需求变化。
工作区和暂存区 Git和其他版本控制系统如SVN的一个不同之处就是有暂存区的概念。 先来看名词解释。...你可以简单理解为,需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。 俗话说,实践出真知。...小结 暂存区是Git非常重要的概念,弄明白了暂存区,就弄明白了Git的很多操作到底干了什么。...Git管理的文件分为:工作区,版本库,版本库又分为暂存区stage和暂存区分支master(仓库) 工作区>>>>暂存区>>>>仓库 git add把文件从工作区>>>>暂存区,git commit...把文件从暂存区>>>>仓库, git diff查看工作区和暂存区差异
今天说一说Java常量池(静态常量池与运行时常量池)[通俗易懂],希望能够帮助大家进步!!! 1、什么是常量 用final修饰的成员变量表示常量,值一旦给定就无法改变!...final修饰的变量有三种:静态变量、实例变量和局部变量,分别表示三种类型的常量。 Java中的常量池,实际上分为两种形态:静态常量池和运行时常量池。...1)所谓静态常量池,即*.class文件中的常量池,class文件中的常量池不仅仅包含字符串(数字)字面量,还包含类、方法的信息,占用class文件绝大部分空间。...2)而运行时常量池,则是jvm虚拟机在完成类装载操作后,将class文件中的常量池载入到内存中,并保存在方法区中,我们常说的常量池,就是指方法区中的运行时常量池。...3、方法区中的运行时常量池 运行时常量池是方法区的一部分。
Java文件被编译成 Class文件,Class文件中除了包含类的版本、字段、方法、接口等描述信息外,还有一项就是常量池,常量池是当Class文件被Java虚拟机加载进来后存放在方法区 各种字面量 (Literal...如下 2.运行时常量池 2.1运行时常量池的简介 运行时常量池是方法区的一部分。...博主一定会在第一时间参与讨论 4.1常量池和字符串常量池的版本变化 在JDK1.7之前运行时常量池逻辑包含字符串常量池存放在方法区, 此时hotspot虚拟机对方法区的实现为永久代 在JDK1.7...字符串常量池被从方法区拿到了堆中, 这里没有提到运行时常量池,也就是说 字符串常量池被单独拿到堆,运行时常量池剩下的东西还在方法区, 也就是hotspot中的永久代 在JDK1.8 hotspot移除了永久代用元空间...(Metaspace)取而代之, 这时候字符串常量池还在堆, 运行时常量池还在方法区, 只不过方法区的实现从永久代变成了元空间(Metaspace) 4.2String.intern在JDK6和JDK7
java1.8之前内存区域分为方法区、堆内存、虚拟机栈、本地方法栈、程序计数器。...下图所示: 方法区(Method Area)与Java堆一样,是各个线程共享的内存区域,它用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。...虽然Java虚拟机规范把方法区描述为堆的一个逻辑部分,但是它却有一个别名叫做Non-Heap(非堆),目的应该是与Java堆区分开来。...很多人都更愿意把方法区称为“永久代”(Permanent Generation)。...从jdk1.7已经开始准备“去永久代”的规划,jdk1.7的HotSpot中,已经把原本放在方法区中的静态变量、字符串常量池等移到堆内存中。
JVM运行时数据区-方法区 方法区和Java堆一样,是各个线程共享的内存区域,它用于存储已被虚拟机加载的类信息、域信息、方法信息、常量、静态变量、即时编译器编译后的代码等数据。...虽然Java虚拟机规范把方法区描述为堆的一个逻辑部分,但是它却有一个别名叫做Non-Heap(非堆),目的应该是与Java堆区分开来。...从jdk1.7已经开始准备“去永久代”的规划,jdk1.7的HotSpot中,已经把原本放在方法区中的静态变量、字符串常量池等移到堆内存中。...方法区的大小决定了系统可以保存多少个类,如果系统定义了太多的类,导致方法区溢出,虚拟机同样会抛出内存溢出错误:java.lang.OutofMemoryError:PermGen space 或者java.lang.OutOfMemoryError...方法区的垃圾收集主要回收两部分内容:常量池中废弃的常量和不再使用的类型。 当俩个线程需要加载一个类型时,只会有一个请求classloader,另一个等待。
基本概念 工作区 在电脑中能看到的目录 工作区.jpg 此处的 initialize 文件夹可被看作为工作区 暂存区 一般存放在 .git 目录下的 index 文件中,也将暂存区称作索引 未提交的文件修改通通放在暂存区中...暂存区.jpg 版本库 工作区中的 .git 目录(.git 为隐藏目录) 版本库.jpg 添加文件到版本库中 把文件添加到暂存区中 把暂存区的所有内容提交到当前分支 添加暂存区 将工作区中的文件添加到暂存区...语法 git add 文件名 添加暂存区.jpg 添加完成之后查看本地库状态 添加完成查看.jpg 删除暂存区中的文件 只是将文件从暂存区中删除,工作区中的文件不受影响 语法 git rm --cached...文件名 删除暂存区中的文件.jpg 提交本地库 将暂存区中的文件提交到本地库 语法 git commit -m “日志信息” 文件名 提交本地库.jpg 查看日志信息 语法 git reflog 查看引用日志信息...提交暂存区.jpg 查看状态 查看状态2.jpg 提交本地库 提交本地库2.jpg 查看版本信息 查看版本信息.jpg 历史版本 查看版本信息 语法 git reflog // 查看精简版本信息 git
复制缓冲区 复制一个缓冲区会创建一个新的 Buffer 对象,但并不复制数据。原始缓冲区和副本都会操作同样的数据元素。...如果原始的缓冲区为只读,或者为直接缓冲区,新的缓冲区将继承这些属性。...System.out.println(charbuffer2); charbuffer2.put("d"); } 输出: abc abc Exception in thread "main" java.nio.ReadOnlyBufferException...at java.nio.CharBuffer.put(Unknown Source) at java.nio.CharBuffer.put(Unknown Source) at com.sxt.nio.Demo02....main(Demo02.java:14) slice 分割缓冲区与复制相似,但slice()创建一个从原始缓冲区的当前位置开始的新缓冲区,并且其容量是原始缓冲区的剩余元素数量(limit-position
) 直接内存(Direct Memory) 一、方法区(Method Area) 方法区的概念 方法区又叫静态区,存放的是已加载的类的基本信息、常量、静态变量等。...比方说我们在写 Java 代码时,每个线程度可以访问同一个类的静态变量对象。由于使用反射机制的原因,虚拟机很难推测哪那个类信息不再使用,因此这块区域的回收很难。 静态块和非静态块有什么区别?...为什么静态块中不能使用 this、super 关键字? 为什么 java 的静态方法可以直接用类名调用?...方法区的特点 线程间共享区域 方法区的异常 对这块区域主要是针对常量池回收,值得注意的是 JDK1.7 已经把常量池转移到堆里面了。...这是因为,JVM 中内部在加载类的时候,就已经有”java”这个字符串,不符合“首次出现”的原则,因此返回 false。 方法区的作用 方法区存放的是类信息、常量、静态变量等,是各个线程共享区域。
领取专属 10元无门槛券
手把手带您无忧上云