- 浏览: 92626 次
- 性别:
- 来自: 无锡
文章分类
最新评论
java的内存分为两类 :
堆内存 heap
栈内存 stack
stack 是指程序进入一个方法时, 会为这个方法单独分配一块私属存储空间, 用于存储这个方法内部的局部变量, 当这个方法结束时, 分配给这个方法的栈会释放, 这个栈中的变量也将随之释放.
heap 一般用于存放不放在当前方法栈中的那些数据, 例如, 使用 new 创建的对象都放在堆里, 所以, 它不会随方法的结束而消失. 方法中的局部变量使用 final 修饰后, 放在堆中, 而不是栈中.
首先说明,"java中的基本数据类型一定存储在栈中的吗?”这句话肯定是错误的。
下面让我们一起来分析一下原因:
基本数据类型是放在栈中还是放在堆中,这取决于基本类型在何处声明,下面对数据类型在内存中的存储问题来解释一下:
一:在方法中声明的变量,即该变量是局部变量,每当程序调用方法时,系统都会为该方法建立一个方法栈,其所在方法中声明的变量就放在方法栈中,当方法结束系统会释放方法栈,其对应在该方法中声明的变量随着栈的销毁而结束,这就局部变量只能在方法中有效的原因
在方法中声明的变量可以是基本类型的变量,也可以是引用类型的变量。
(1)当声明是基本类型的变量的时,其变量名及值(变量名及值是两个概念)是放在JAVA虚拟机栈中
(2)当声明的是引用变量时,所声明的变量(该变量实际上是在方法中存储的是内存地址值)是放在JAVA虚拟机的栈中,该变量所指向的对象是放在堆类存中的。
二:在类中声明的变量是成员变量,也叫全局变量,放在堆中的(因为全局变量不会随着某个方法执行结束而销毁)。
同样在类中声明的变量即可是基本类型的变量 也可是引用类型的变量
(1)当声明的是基本类型的变量其变量名及其值放在堆内存中的
(2)引用类型时,其声明的变量仍然会存储一个内存地址值,该内存地址值指向所引用的对象。引用变量名和对应的对象仍然存储在相应的堆中.
此外,为了反驳观点" Java的基本数据类型都是存储在栈的 ",我们也可以随便举出一个反例,例如:
int[] array=new int[]{1,2};
由于new了一个对象,所以new int[]{1,2}这个对象时存储在堆中的,也就是说1,2这两个基本数据类型是存储在堆中,
这也就很有效的反驳了基本数据类型一定是存储在栈中~~
堆内存 heap
栈内存 stack
stack 是指程序进入一个方法时, 会为这个方法单独分配一块私属存储空间, 用于存储这个方法内部的局部变量, 当这个方法结束时, 分配给这个方法的栈会释放, 这个栈中的变量也将随之释放.
heap 一般用于存放不放在当前方法栈中的那些数据, 例如, 使用 new 创建的对象都放在堆里, 所以, 它不会随方法的结束而消失. 方法中的局部变量使用 final 修饰后, 放在堆中, 而不是栈中.
首先说明,"java中的基本数据类型一定存储在栈中的吗?”这句话肯定是错误的。
下面让我们一起来分析一下原因:
基本数据类型是放在栈中还是放在堆中,这取决于基本类型在何处声明,下面对数据类型在内存中的存储问题来解释一下:
一:在方法中声明的变量,即该变量是局部变量,每当程序调用方法时,系统都会为该方法建立一个方法栈,其所在方法中声明的变量就放在方法栈中,当方法结束系统会释放方法栈,其对应在该方法中声明的变量随着栈的销毁而结束,这就局部变量只能在方法中有效的原因
在方法中声明的变量可以是基本类型的变量,也可以是引用类型的变量。
(1)当声明是基本类型的变量的时,其变量名及值(变量名及值是两个概念)是放在JAVA虚拟机栈中
(2)当声明的是引用变量时,所声明的变量(该变量实际上是在方法中存储的是内存地址值)是放在JAVA虚拟机的栈中,该变量所指向的对象是放在堆类存中的。
二:在类中声明的变量是成员变量,也叫全局变量,放在堆中的(因为全局变量不会随着某个方法执行结束而销毁)。
同样在类中声明的变量即可是基本类型的变量 也可是引用类型的变量
(1)当声明的是基本类型的变量其变量名及其值放在堆内存中的
(2)引用类型时,其声明的变量仍然会存储一个内存地址值,该内存地址值指向所引用的对象。引用变量名和对应的对象仍然存储在相应的堆中.
此外,为了反驳观点" Java的基本数据类型都是存储在栈的 ",我们也可以随便举出一个反例,例如:
int[] array=new int[]{1,2};
由于new了一个对象,所以new int[]{1,2}这个对象时存储在堆中的,也就是说1,2这两个基本数据类型是存储在堆中,
这也就很有效的反驳了基本数据类型一定是存储在栈中~~
发表评论
-
初始化ArrayList, 默认长度10
2018-07-10 17:54 1804// 在初始化ArrayList的时候没有指定初始化长度的话 ... -
Java判断Long类型相等问题
2018-03-13 15:05 2298// Long类型判断相等时,比如Long a = 10L ... -
循环往list中add对象却总是add的是一个对象
2017-11-11 16:53 18981. 在new 一个对象的时候,对象的ID是唯一确定的;将对象 ... -
变量定义的初始化顺序
2017-11-04 18:05 439//#java编程思想P94 //在类的内部, 定义变量 ... -
JavaBean解释
2017-09-07 15:05 431Spring如何知道setter方法?如何将值注入进去的呢?其 ... -
log4j2配置
2017-08-31 18:22 390//lib log4j-core-xx.jar lo ... -
java为什么不需要sizeof()
2017-07-21 13:51 335在C和C++中,sizeof()操作符可以告诉你为数据项分配的 ... -
回车换行 \r\n
2017-07-06 16:15 360\r就是"回到行首",\n就是" ... -
基本类型直接存储“值”,置于堆栈中。 new将对象存储在“堆”中。
2017-07-04 19:07 637基本类型置于堆栈中,更加高效。 其他java对象存储在堆中 -
Java中如何遍历Map对象的4种方法
2017-05-26 16:42 417http://blog.csdn.net/tjcyjd/art ... -
初始化List泛型时,list为null还是为空?应该是空(size()=0)
2017-04-13 17:29 656List<Object> list = new A ... -
String的拼接
2017-03-21 11:01 422当使用+拼接字符串时,会生成新的String对象,而不是向原有 ... -
判断两个参数的值是否相同
2017-02-06 17:00 496private boolean isValueSame(Obj ... -
检查数组中是否包含特定值(Check if an array contains a certain value)
2017-01-10 10:19 297String[] stringArray = { " ... -
JSP中java代码引用map类
2016-11-04 12:14 468<% java.util.Map m = new ja ... -
批量命名变量名(无法确定字符串数组长度)
2016-11-04 12:00 437String a = "a b c"; ... -
null和""以及==与equals的区别
2016-08-11 17:59 364String str1 = null; str引用为空 ... -
String、StringBuffer与StringBuilder详解
2016-08-18 14:20 4191.三者在执行速度方面的比较:StringBuilder &g ... -
java生成当前日期格式设置
2016-08-03 14:04 471package com.grace.test; ... -
Eclipse/Myeclipse生成serialVersionUID方法
2016-08-03 13:54 550serialVersionUID作用: 序列化时为了保持 ...
相关推荐
java堆栈信息dump文件
java堆栈详解
打印JAVA堆栈的方法
本人学习Java时苦找的内存分析我把它整理成WORD文档供大家学习Java堆栈内存分析笔记。
Java 把内存分成两种,一种叫做栈内存,一种叫做堆内存 在函数中定义的 一些基本类型的变量和对象的引用变量都是在函数 的栈内存中分配。当在一段代码块中定义一个变量时,java 就在栈中 为这个变量分配内存空间...
Java堆栈分析操作详细说明,找到内从泄露原因
java 堆栈的演示程序 jsp程序 源代码设计 下载 欢迎您的下载
堆和栈是两个不同的概念 堆和栈的区别 一、预备知识—程序的内存分配 一个由c/C++编译的程序占用的内存分为以下几个...虽然堆栈,堆栈的说法是连起来叫,但是他们还是有很大区别的,连着叫只是由于历史的原因。
文章介绍了使用Java编程语言实现了基于数组的Java堆栈,并实现了一些基本的堆栈方法
React-material-ui 拥有一个纯Java堆栈
本程序是java堆栈的应用,实现中缀表达式转换成后缀表达式以及结果计算。
java dump 堆栈 dumpAnalyzer 分析,在日常工作中,经常会遇到,系统跑着跑着就会出现性能问题,CPU居高不下。这个时候我们就需要对系统的堆栈信息进行分析。这里就介绍如何使用IBM内存检测工具(dumpAnalyzer)。
用 Java 实现数据结构中的堆栈 用 Java 实现数据结构中的堆栈
清楚的介绍了java中基本数据类型和引用数据类型在内存中的分配
如何调优JVM - 优化Java 虚拟机(大全+ 实例) 堆设置 -Xmx3550m :设置JVM 最大堆内存为3550M 。 -Xms3550m :设置JVM 初始堆内存为3550M。此值可以设置与-Xmx 相同,以避免每次垃 圾回收完成后JVM 重新分配内存。 ...
堆栈实现的java 计算器 + - * / % ()
java中stack的使用方法,堆栈是一种"后进先出"(LIFO) 的数据结构, 只能在一端进行插入(称为"压栈") 或删除 (称为"出栈")数据的操作,下面看示例吧
这是教学的ppt 可用于大学本专课件 也可用于自学
堆栈实现的计算器-数据结构课程设计,应用字符优先级
hadoop快速入门,hadoop安装及hadoop配置