1.java程序运行时有6中地方存储数据,分别是:寄存器、栈、堆、静态存储、常量存储、非RAM(随机存储器),主要是堆与栈的存储。 
 2.堆与栈是java用来在RAM中存储数据的地方,java自动管理堆和栈,程序员不能直接设置堆和栈。 
 3.栈的优势是:存取速度比堆要快,仅次于直接位于cpu中的寄存器;栈数据可以共享。   但缺点是:存在栈中数据大小与生命周期必须是确定的,缺乏灵活性。
 4.堆的优势在于可以动态分配内存大小,生存期也不必事先告诉编译器,java的垃圾收集器会自动收走这些不再使用的数据,缺点是由于要在运行时动态分配内存,存取速度较慢。
 5.基本数据类型的存储,java的基本数据类型共有8种:int,short,byte,long,float,double,boolean,(基本数据类型中并没有String的基本类型)。这种类型如int=3的形式来定义,称为自动变量。自动变量存在的是字面值,即不是类的实例,也不是类的引用。a 是一个指向int类型的引用,指向3这个字面值。这些字面值的数据由于大小可知,生存期可知(这些字面值固定定义在某个程序块里面,程序块退了,字段值就消失了),处于追求速度的原因就存在栈中。 
 6.另外栈有一个很重要的特殊性,就是存在栈中的数据可以共享。如 需要定义int a = 3; int b =3;这两个自动变量。编译器先处理int  a=3;首先在栈中创建一个变量为a的引用,然后查找栈有没有字面值为3的引用,没有找到,就开辟一个存放3这个字面值的地址,然后将a指向3的地址。接着处理int b=3;在创建完b这个引用变量后,由于在栈中已经有了3这个字面值,即将b直接指向3的地址。这样,就出现了a和b同事指向3的情况。 定义完a与b后,在令a=4,那么b不会等于4,而是等于3,。在编译器内部,遇到时,它就会中新搜索栈中是否有4这个字面值,如果没有,重新开辟地址存放4的值。如果已经有就直接将a指向这个地址,因此a的值改变不会影响b的值。 
 7.对象的内存模型.创建一个对象包括对象的声明和实例化两步:声明对象的引用和对象的实例化。声明一个对象引用时,将在栈内存为对象的引用变量分配空间;对象实例化是,在堆内存中为类成员变量分配内存,并将其初始化为各数据类型默认值,接着进行显示初始化,最后调用构造方法为成员变量赋值,返回堆内存中对象的引用(相当于首地址)给应用变量,通过引用变量来引用堆内存中的对象。 
 8.包装类数据的存储:基本数据类型的定义都是直接在栈中,如果是包装类型来创建对象,就和普通对象一样。 
 9.string数据类型是一种特殊数据类型,既可以用基本数据类型格式来创建,也可以用普通基本类型来创建。

Java基本数据类型内存分配的更多相关文章

  1. java程序的内存分配

    java程序的内存分配 JAVA 文件编译执行与虚拟机(JVM)介绍 Java 虚拟机(JVM)是可运行Java代码的假想计算机.只要根据JVM规格描述将解释器移植到特定的计算机上,就能保证经过编译的 ...

  2. java程序的内存分配(一)

      首 页 阅览室 馆友 我的图书馆 帐号 java程序的内存分配(一) 收藏  JAVA 文件编译执行与虚拟机(JVM)介绍  Java 虚拟机(JVM)是可运行Java代码的假想计算机.只要根据J ...

  3. Java数组以及内存分配

    Java数组以及内存分配 什么数组(简) 数组初始化 动态初始化 静态初始化 内存分配问题(重) 数组操作的两个常见小问题 什么是数组: 定义格式: 数组类型 [] 数组名 ; 如:常用格式,其他方式 ...

  4. Java当中的内存分配以及值传递问题内存解析

    首先必须说明作为Java程序员对于内存只要有大致的了解就可以了,如果你对Java当中的某一个知识点在不需要分析内存分配过程的情况下可以掌握,那就大可不必去研究内存.如果你对知识点已经掌握,那么你应该把 ...

  5. Java基础-Java中的内存分配与回收机制

    Java基础-Java中的内存分配与回收机制 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一. 二.

  6. 灵魂拷问:Java对象的内存分配过程是如何保证线程安全的?(阿里面试)

    JVM内存结构,是很重要的知识,相信每一个静心准备过面试的程序员都可以清楚的把堆.栈.方法区等介绍的比较清楚. 上图,是一张在作者根据<Java虚拟机规范(Java SE 8)>中描述的J ...

  7. JAVA | Java对象的内存分配过程是如何保证线程安全的?

    JAVA | Java对象的内存分配过程是如何保证线程安全的? 专注于Java领域优质技术,欢迎关注 作者 l Hollis 来源 l Hollis(ID:hollischuang) JVM内存结构, ...

  8. Java变量以及内存分配

    Java变量以及内存分配(非常重要) 堆栈 静态存储区域 一个由C/C++编译的程序占用的内存分为以下几个部分 1.栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等.其操 ...

  9. 论 Java 中的内存分配

    Java内存分配主要包括以下几个区域: 1. 寄存器:我们在程序中无法控制 2. 栈:存放基本类型的数据和对象的引用,但对象本身不存放在栈中,而是存放在堆中 3. 堆:存放用new产生的数据 4. 静 ...

随机推荐

  1. debain8 安装mysql8

    一.下载apt源 https://dev.mysql.com/downloads/repo/apt/ 二.更新apt sudo apt-get update 三.安装mysql sudo apt-ge ...

  2. 两台centos,用yum install 安装,一台成功,一台失败

    记录一下问题: 两台centos,用yum install 安装软件,一台成功,一台失败 第一步:查看yum源  yum repolist enabled 疑问:centos安装的方法一致,但yum源 ...

  3. 如何学习 websocket ?

    如何学习 websocket ? 使用 HTML https://github.com/phoboslab/jsmpeg MPEG1 进行播放 https://w3c.github.io/media- ...

  4. linux查看进程数

    命令行: $ ps -ef | wc -l 如果想匹配某个关键词的话,加上grep,下面命令是匹配关键词 “XXX”,并统计含有该关键词的进程数 $ ps -ef | grep XXX | wc -l

  5. 初识NuGet

    因为想查一查opencvsharp的东西,然后发觉这个包可以再NuGet上面可以直接下载.我也经常在很多地方都可以看到NuGet,所以我想写下来,记录下来. NuGet是一个免费的并且开源的包管理器在 ...

  6. Linux就该这么学06学习笔记

    参考链接:https://www.linuxprobe.com/chapter-06.html 1.一切从“/”开始 Linux系统中的一切文件都是从“根(/)”目录开始的,并按照文件系统层次化标准( ...

  7. linux篇之Nginx web服务器简单部署

    一.安装部署nginx 1. 部署前先对nginx介绍下别嫌BB: 如果你听说或使用过Apache软件,那么很快就会熟悉Nginx软件,与Apache软件类似, Nginx(“engine x”)是一 ...

  8. 洛谷P1446/BZOJ1004 Cards Burnside引理+01背包

    题意:有n张牌,有R+G+B=n的3种颜色及其数量,要求用这三种颜色去染n张牌.n张牌有m中洗牌方式,问在不同洗牌方式下本质相同的染色方案数. 解法:这道题非常有意思,题解参考Hzwer学长的.我这里 ...

  9. Object.assign()遇到的问题分析

    概念 Object.assign() 方法可以把任意多个的源对象自身的可枚举属性拷贝给目标对象,然后返回目标对象.语法如下: Object.assign(target, ...sources) Obj ...

  10. javascript中数组元素删除方法splice,用在for循环中巨坑

    一.demo splice: 该方法会改变自动原始数组长度 实例: var array = ["aa","dd","cc","aa ...