Java的内存分配

java内存分配

A:栈 存储局部变量

B:堆 存储所有new出来的

C:方法区(方法区的内存中)

类加载时 方法信息保存在一块称为方法区的内存中, 并不随你创建对象而随对象保存于堆中;

D:本地方法区(系统相关)

E:寄存器(CPU使用)

注意:
         a:局部变量 在方法定义中或者方法声明上定义的变量。

b:栈内存和堆内存的区别
                栈:数据使用完毕,就消失。------>存储的是值类型

局部变量:在栈中

堆:每一个new出来的东西都有地址 --------->存储的是引用类型

成员变量:在堆中

每一个变量都有默认值
                      byte,short,int,long 0
                      float,double 0.0
                     char ‘\u0000‘
                     boolean false
                     引用类型 null
                     数据使用完毕后,在垃圾回收器空闲的时候回收。

时间: 2024-10-26 06:59:24

Java的内存分配的相关文章

java中内存分配策略及堆和栈的比较

2.1 内存分配策略 按照编译原理的观点,程序运行时的内存分配有三种策略,分别是静态的,栈式的,和堆式的. 静态存储分配是指在编译时就能确定每个数据目标在运行时刻的存储空间需求,因而在编译时就可以给他们分配固定的内存空间.这种分配策略要求程序代码中不允许有可变数据结构(比如可变数组)的存在,也不允许有嵌套或者递归的结构出现,因为它们都会导致编译程序无法计算准确的存储空间需求. 栈式存储分配也可称为动态存储分配,是由一个类似于堆栈的运行栈来实现的.和静态存储分配相反,在栈式存储方案中,程序对数据区

JAVA虚拟机内存分配与回收机制

Java虚拟机(Java Virtual Machine) 简称JVM Java虚拟机是一个想象中的机器,在实际的计算机上通过软件模拟来实现.Java虚拟机有自己想象中的硬件,如处理器.堆栈.寄存器等,还具有相应的指令系统. Java把内存划分成两种:一种是栈内存,一种是堆内存. 在函数中定义的一些基本类型的变量和对象的引用变量都在函数的栈内存中分配. 当在一段代码块定义一个变量时,Java就在栈中为这个变量分配内存空间,当超过变量的作用域后,Java会自动释放掉为该变量所分配的内存空间,该内存

[问题贴]小白请教几个关于Java虚拟机内存分配策略的问题

最近在看周志明所著的<深入理解Java虚拟机>,有几个问题不太明白,希望大家帮我回答一下.先说一下我进行试验的环境: 操作系统:Mac OS X 10.11.6 EI Capitan Java环境: java version "1.8.0_92" Java(TM) SE Runtime Environment (build 1.8.0_92-b14) Java HotSpot(TM) 64-Bit Server VM (build 25.92-b14, mixed mode

Java虚拟机内存分配详解

简介 了解Java虚拟机内存分布的好处 1.了解Java内存管理的细节,有助于程序员编写出性能更好的程序.比如,在新的线程创建时,JVM会为每个线程创建一个专属的栈 (stack),其栈是先进后出的数据结构,这种方式的特点,让程序员编程时,必须特别注意递归方法要尽量少使用,另外栈的大小也有一定的限制,如果过多 的递归,容易导致stack overflow. 2.了解Java内存管理的细节,一旦内存管理出现问题,有助于找到问题的根本原因所在. 3.了解Java内存管理的内幕,有助于优化JVM,从而

java 字符串内存分配的分析与总结

经常在网上各大版块都能看到对于java字符串运行时内存分配的探讨,形如:String a = "123",String b = new String("123"),这两种形式的字符串是存放在什么地方的呢,其实这两种形式的字符串字面值"123"本身在运行时既不是存放在栈上,也不是存放在堆上,他们是存放在方法区中的某个常量区,并且对于相同的字符串字面值在内存中只保留一份.下面我们将以实例来分析. 1.==运算符作用在两个字符串引用比较的两个案例: p

JAVA模拟内存分配与释放——首次适应算法

前言 首次适应算法(FF,first fit)是内存基于顺序搜索的动态分配分区算法,在分配内存时,从链首开始顺序查找,直至找到一个大小能满足要求的空闲分区为止,然后在按照作业的大小从该分区中划出一块内存空间,分配给请求者,余下的空闲分区仍留在空闲链中.若从链首直至链尾都不能找到一个能满足要求的分区,则表明系统中已没有足够大的内存分配给该进程,内存分配失败,返回. 该算法倾向于优先利用内存中低地址部分的空闲分区,从而保留了高地址部分不断被划分.这为以后到达的大作业分配大的的内存空间创造了条件.其缺

Java的内存分配机制

Java程序运行在JVM(Java  Virtual Machine,Java虚拟机)上,可以把JVM理解成Java程序和操作系统之间的桥梁,JVM实现了Java的平台无关性,由此可 见JVM的重要性.所以在学习Java内存分配原理的时候一定要牢记这一切都是在JVM中进行的,JVM是内存分配原理的基础与前提.         一个完整的Java程序运行过程会涉及以下内存区域: 寄存器:JVM内部虚拟寄存器,存取速度非常快,程序不可控制. 栈:保存局部变量的值,包括:a.用来保存基本数据类型的值:

java虚拟机 内存分配

分为以下几个运行时数据区: 程序计数器,java虚拟机栈,本地方法栈,java堆,方法区 程序计数器: 线程私有,记录正在执行的虚拟机字节码指令地址,执行本地方法则为空,是唯一一个java虚拟机内存中没有PutOfMemoryError情况 java虚拟机栈: 线程私有,生命周期也与线程相同,用于支持虚拟机进行方法调用和方法执行.对执行引擎来讲,只有栈顶的栈帧是有效的,称为当前栈帧,关联的方法为当前方法,所有字节指令都只针对当前栈帧操作. 有两种异常情况: 当线程请求的栈帧大于虚拟机所允许的深度

Java中内存分配方式

摘自 Think in java 1.寄存器 这是最快的存储区,它位于处理器的内部,不能人为控制. 2.堆栈     位于RAM,但可以通过堆栈指针从处理器那里获取直接支持.堆栈指针向下移动,就分配新的内存,向上移动,则释放那些内存.这种方式分配内存快速有效,仅次于寄存器. 所以java必须知道存储在堆栈内所有对象的确切生命周期.对象引用 和 基本数据类型会放到堆栈中. 3.堆         一种通过的内存池,也位于RAM.用于存放所有的java对象.堆和堆栈的区别就在于编译器不需要知道数据在