1,在栈中存放的是基本类型变量和对象的引用变量,当一段代码定义一个变量时,java

就在栈内为这个变量分配内存空间,当超过变量的作用域时,java会自动回收分配的内存。

局部变量在栈内存

2,堆内存放的是new创建的对象和数组,有java jvm的垃圾回收器来管理。同时会在栈内

定义一个特殊变量,让这个变量的取值等于数组或对象在堆内的首地址,这个特殊变量就成了引用变量。

成员变量在堆内存

参考:http://www.cnblogs.com/perfy/p/3820594.html

public static void main(String[] args) {
int a1 = 10;
int a2 = a1;
a1 = 1000;
System.out.println("a1=: " + a1);
System.out.println("a2=: " + a2);
String a3 = new String("10");
String a4 = new String(a3);
a3 = "1000";
System.out.println("a3=: " + a3);
System.out.println("a4=: " + a4);
} 运行结果:
a1=: 1000
a2=: 10
a3=: 1000
a4=: 10
public class Test {
public static void main(String[] args) {
Test t = new Test();
Test.Dog d1 = t.new Dog(1);//若看不懂,只需看成创建了一个Dog类一个实例变量
Test.Dog d2 = d1;//把d1赋值个d2,此时d2的age是不是1?
d1.age = 10;//重新为d1的age属性赋值成10
//打印结果
System.out.println("dog1's age = " + d1.age);
System.out.println("dog2's age = " + d2.age);
} //为了节省空间能一眼看完,此处写成内部类
class Dog {
//为了方便把属性定义为public,实际中最好不要
public int age;
public Dog(int age) {
this.age = age;
} }
} 运行结果:都是10
参考:http://www.cnblogs.com/wangjunxiao/p/5860454.html
http://www.360doc.com/content/08/0829/08/59141_1587076.shtml

java 堆和栈的区别的更多相关文章

  1. Java堆和栈的区别和介绍,JVM的堆和栈

    一.Java的堆内存和栈内存 Java把内存划分成两种:一种是堆内存,一种是栈内存.   堆:主要用于存储实例化的对象,数组.由JVM动态分配内存空间.一个JVM只有一个堆内存,线程是可以共享数据的. ...

  2. java 堆与栈的区别

    1. 堆与栈的区别? 1-1. 数据存放位置:   数据都存放于RAM (Random Access Memory). 1-2. 存放数据的类型:stack栈中保存方法中的基本数据类型(int, do ...

  3. java堆和栈的区别

    java 的内存分为两类,一类是栈内存,一类是堆内存.栈内存是指程序进入一个方法时,会为这个方法单独分配一块私属存储空间,用于存储这个方法内部的局部变量,当这个方法结束时,分配给这个方法的栈会释放,这 ...

  4. JAVA堆,栈的区别,用AarrayList、LinkedList自定义栈

    大家都知道java模拟机在运行时要开辟空间所以它有特定的五个内存划分: 1.寄存器:    2.本地方法区:    3.方法区:    4.栈内存:    5.堆内存: 但是我们今天来注重讲一下栈和堆 ...

  5. 【转】Java运行时数据区简介及堆与栈的区别

    理解JVM运行时的数据区是Java编程中的进阶部分.我们在开发中都遇到过一个很头疼的问题就是OutOfMemoryError(内存溢出错误),但是如果我们了解JVM的内部实现和其运行时的数据区的工作机 ...

  6. Java中堆和栈的区别(转)

    栈与堆都是Java用来在Ram中存放数据的地方.与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆.      Java的堆是一个运行时数据区,类的对象从中分配空间.这些对象通过new. ...

  7. Java中的堆和栈的区别

    当一个人开始学习Java或者其他编程语言的时候,会接触到堆和栈,由于一开始没有明确清晰的说明解释,很多人会产生很多疑问,什么是堆,什么是栈,堆和栈有什么区别?更糟糕的是,Java中存在栈这样一个后进先 ...

  8. Java堆、栈和常量池以及相关String的详细讲解(经典中的经典) (转)

    原文链接 : http://www.cnblogs.com/xiohao/p/4296088.html 一:在JAVA中,有六个不同的地方可以存储数据: 1. 寄存器(register). 这是最快的 ...

  9. JVM堆和栈的区别

    物理地址 堆的物理地址分配对对象是不连续的.因此性能慢些.在GC的时候也要考虑到不连续的分配,所以有各种算法.比如,标记-消除,复制,标记-压缩,分代(即新生代使用复制算法,老年代使用标记--压缩) ...

随机推荐

  1. U盘kali系统安装

      正言: 起初先百度了一下U盘安装Kali的资料,有很多版本和方法,当然还是以百度经验为例开始操作https://jingyan.baidu.com/article/cdddd41ca1027e53 ...

  2. JVM基础知识及拓展

    我们可以吧JVM的基本结构分为四块:类加载器.执行引擎.运行时数据区和本地接口.一般来说Java程序在JVM中的执行流程如下: ①.首先我们会利用javac命令将我们所编写的.java源代码文件变异成 ...

  3. 对于微信小程序登录的理解图

    有两种获取用户信息的方案. 1.不包含敏感信息openId 的json对象(包含:nickname.avatarUrl等基本信息) 2.包含敏感信息openId的基本信息. 第一种获取方案 1.首先调 ...

  4. FpSpread基本句法

    1,   在调用的.aspx页面开头注册:     "FarPoint.Web.Spread"   Assembly="FarPoint.Web.SpreadJ,   V ...

  5. c++ 重载运算与类型转换

    1. 基础概念 重载的运算符是具有特殊名字的函数:(重载运算符函数,运算符函数.重载运算符) 依次包含返回类型,函数名(operator=),参数列表,函数体. 只有重载的函数调用运算符operato ...

  6. springBoot -webSocket 基于STOMP协议交互

    浅谈WebSocket WebSocket是在HTML5基础上单个TCP连接上进行全双工通讯的协议,只要浏览器和服务器进行一次握手,就可以建立一条快速通道,两者就可以实现数据互传了.说白了,就是打破了 ...

  7. mongdb数据迁移导出与导入

    导出: mongoexport --host localhost --port --username un1 --password pwd1 --db db1 --collection col1 -- ...

  8. apache+php开发环境搭建步骤

    apache 卸载apache服务命令:sc delete apache 1.在D盘下面新建文件夹php7 2.解压apache到php7文件夹下面 3.修改配置文件 4.安装apache服务C:\w ...

  9. python函数参数默认值及重要警告

    最有用的形式是对一个或多个参数指定一个默认值.这样创建的函数,可以用比定义时允许的更少的参数调用,比如: def ask_ok(prompt, retries=4, reminder='Please ...

  10. Spark mlib的本地向量

    Spark mlib的本地向量有两种: DenseVctor :稠密向量 其创建方式 Vector.dense(数据) SparseVector :稀疏向量 其创建方式有两种: 方法一:Vector. ...