一,数组与内存控制

一,数组的初始化

1,数组初始化之后,长度不变,且数组初始化后才可以使用,所谓得初始化,就是为数组对象得元素分配内存空间,并且指定初始值。

2,初始化的两种方式:静态初始化,初始化时显式指定每个数组元素的初始值,由系统决定数组长度。

动态初始化,初始化时,只是指定数组长度,有系统为数组元素分配初始值。

3,java数组变量时引用类型变量,不是数组本身,它时只想堆内存中的数组对象。

例如:

int arr[]

arr=new int[]{1,2,3}

执行int arr[]之后,这是在main()方法栈中定义了一个arr数组变量,是一个引用类型变量,但是并没有指向实际的数

组对象,所以此时还没有使用该数组对象。

当执行第二句以后,系统会根据我们制定的元素决定数组的长度,切长度不可变,在堆内存中创建内容。

所有局部变量都保存在栈内存中,不管是基本类型的变量还是引用类型的变量,都是存储在各自的方法栈中,但是引用类型的变量所引用的对象(包括数组,普通的java对象)则总是储存在堆内存中。

堆内存中的对象通常不容许直接访问,为了访问堆内存中的对象,通常只能通过引用变量。引用变量实际上是一个指针,只要不访问变量的属性,或者调用引用变量来调用方法。使用该对象也是不会出现问题的。

http://www.cnblogs.com/hmiinyu/archive/2012/10/22/2732781.html(数组以及引用类型内存分配)

时间: 2024-10-12 16:11:33

一,数组与内存控制的相关文章

Java数组与内存控制

一.Java数组初始化 Java数组是静态的,即当数组被初始化之后,该数组的长度是不可变的.Java数组使用之前必须先对数组对象进行初始化,所谓初始化,就是为数组的所有元素分配内存空间,并为每个数组元素指定初始值.(文章来源于李刚老师的<突破java程序员的16课>) 1:基本类型数组的两种初始化方式 静态初始化:初始化时由程序员显式指定每个数组元素的初始值,由系统决定数组长度. 动态初始化:初始化时程序员只指定数组长度,由系统为数组元素分配初始值. 不要同时使用静态初始化和动态初始化,也就是

数组及其内存控制

作者:禅楼望月(http://www.cnblogs.com/yaoyinglong/) 静态的Java数组 Java语言是典型的静态语言,因而,数组也是静态的,即当该数组被初始化之后,该数组的长度是不可变的. java 语言的数组变量是引用类型,什么意思呢?意思就是,数组变量并不是数组本身,它只是指向堆内存中的数组对象.如: 这3个变量以及各自引用的数组在内存中的分配如图: 我们平时可以通过改变数组变量的指向,让它指向的堆内存中的其他数组对象(前提是他们的编译类型是兼容的),从表面上看起来好像

Java细节整理——数组与内存控制

重点:使用Java数组之前,必须对数组对象进行初始化. 当数组的所有元素都被分配了合适的内存空间,并指定了初始值时,数组的初始化完成.程序以后将不能重新改变数组对象在内存中的位置和大小. 知识点整理: 1.数组的初始化有以下两种方式: 1)静态初始化:初始化时由程序员显示指定每个数组元素的初始值,由系统决定数组的长度. 2)动态初始化:初始化时程序员只指定数组的长度,由系统为数组元素分配初始值. 不管使用哪种方式初始化Java数组,一旦初始化完成,该数组的长度就不可改变. 代码示例: publi

程序员的基本功之数组与内存控制

1.数组初始化 Java的数组是静态的,既数组一旦初始化之后,该数组的长度就不可变,Java的数组需要初始化才能使用 数组的初始化就是为数组对象在堆内存中分配一段数组长度的连续的内存空间,并设定初始值(注意并不是数组变量初始化,而是数组对象) 初始化的方式有两种: 1)静态初始化:程序员显示的指定每个数组元素的初始值,并由系统决定数组的长度 2)动态初始化:初始化时只指定数组的长度,由系统为数组元素分配初始值 数组变量本身是引用类型,存储在栈内存中,而数组对象存储在堆内存中 int[] arr1

java 基础概念 -- 数组与内存控制

问题1: Java在声明数组的过程中,是怎样分配内存的? 在栈内存中 建一个数组变量,再在堆内存中 建一个 数组对象.至于详细的内存分配细节,还得看 该初始化是 数组动态初始化 还是 数组静态初始化. 问题2: Java数组的初始化方式 有哪几种? 两种:动态初始化 和 静态初始化.动态初始化 指的是 仅仅指定数组的长度,不指明每个数组的元素.  静态初始化 指的是 详细指定数组的每个元素. 问题3: Java 的基本类型数组 和 应用类型数组 之间,在初始化时的内存分配机制有什么差别? Jav

【JAVA基础教程】-浅谈数组及其内存控制

在用JAVA数据前我们都知道必须要先对数组对象进行初始化.当数组的所有元素都被分配合适的内存空间,当制定了初始值时,数组初始化完成.程序以后将不能重新改变数组对象在内存中的位置和大小.那么: 1.JAVA数组为静态,即一旦初始化后,其长度是不可改变的. 2. 数组变量是引用变量,并不是数组对象本身. 3. 两种初始化方式: 动态初始化:指定数组的长度,初始值自动生成. 静态初始化:指定初始值,长度自动生成. 4. JAVA中,引用变量本身无需初始化,引用变量所引用的对象是需要初始化的. 5. 所

【Java学习笔记之八】java二维数组及其多维数组的内存应用拓展延伸

多维数组声明 数据类型[][] 数组名称; 数据类型[] 数组名称[]; 数据类型数组名称[][]; 以上三种语法在声明二维数组时的功能是等价的.同理,声明三维数组时需要三对中括号,中括号的位置可以在数据类型的后面,也可以在数组名称的后面,其它的依次类推. 例如: int[][] map; char c[][]; 和一维数组一样,数组声明以后在内存中没有分配具体的存储空间,也没有设定数组的长度.  -------------------------------------------------

RabbitMQ 内存控制 硬盘控制

一.内存控制: vm_memory_high_watermark 该值为内存阈值,默认为0.4.意思为物理内存的40%.40%的内存并不是内存的最大的限制,它是一个发布的节制,当达到40%时Erlang会做GC.最坏的情况是使用内存80%.如果把该值配置为0,将关闭所有的publishing . rabbitmqctl set_vm_memory_high_watermark 0 Paging 内存阈值,该值为默认为0.5,该值为vm_memory_high_watermark的20%时,将把内

深入浅出NodeJS——内存控制

基于无阻塞.事件驱动建立的Node服务,具有内存消耗低的优点,非常适合处理海量的网络请求. V8的垃圾回收机制与内存限制 Javascript和Java类似,由垃圾回收机制来进行自动内存管理,而Node是构建在V8虚拟机基础上,所以其内存回收和V8运行机制息息相关. V8的内存限制:64位系统约为1.4GB.32位系统约为0.7GB process.memoryUsage(),返回值包括heapTotal代表已申请到的堆内存,heapUsed当前使用的内存,rss(resident set si