java内存解析
ass BirthDate{
private int day;
private int month;
private int year;
public BirthDate(int d;int m,int y){
day = d;
}
public void setDay( int d){
day = d;
}
public void setMoth(int m){
month = m;
}
public void setYear(int y){
year = y;
}
public int getDay(){
return day;
}
public int getMonth(){
return month;
}
public int getYear(){
return year;
}
public void display(){
System.out.println(day+"-"+month+"-"+year);
}
}
public class Test{
public static void main(String args[]){
Test test = new Test();
int date=9;
BirthDate d1 = new BirthDate(7,7,1970);
BirthDate d1 = new BirthDate(1,1,2000);
test.change1(d1);
test.change2(d2);
System.out.println("adte="+date);
d1.display();
d2.display();
}
public void change1(int i){
i = 1234;
}
public void change2(BirthDate b){
b = new BirthDate(22,2,2004);
}
public void change3(BirthDate b){
b.setDay(22);
}
}
执行Test test = new Test();的时候调用Test的构造方法,int date = 9;在占内存里分配一个变量date等于9, 执行这句话的时候BirthDate d1= new BirthDate(7,7,1970);在占内存里分配一个变量叫d1:xxx指向堆内存里new出来的的一块内存,内存如图:

当执行完BirthDate d1= new BirthDate(7,7,1970);之后,方法完成之后为这个方法分配的局部变量消失所以内存图变成如下图所示:

BirthDate d2= new BirthDate(1,1,2000); 同上述一样;
当执行test.change1(date);这句话时,在调用change1这个方法,这时的i=9;之后,i变成 了1234,当方法执行完毕之后,分配给这个方法的局部变量消失,所以这个方法相当于白调用,栈内存变化如图:
   
   
当执行这句话时,test.change2(d1);在堆内存里分配new 出来的一块内存 b这个BirthDay的类型指向new 出来的对象之后,执行完方法之后,为这个方法分配的局部变量消失,没有一个变量指向new出来的新的对象,最后由java的垃圾回收机制回收掉;
当执行test.change3(d2);这段代码时,调用change3这个方法,BirthDay的变量b指向的是d2的setDay这个方法,并且在占内存里有一个变量d ,d的值为22,将22赋值给day,方法完成之后,堆内存里的day由1变成了22,最后方法执行完成之后,d这个变量消失最终的内存图为

java内存解析的更多相关文章
- Java内存解析   程序的执行过程
		
Java内存解析 栈.堆.常量池等虽同属Java内存分配时操作的区域,但其适用范围和功用却大不相同.本文将深入Java核心,简单讲解Java内存分配方面的知识. 首先我们先来讲解一下内存中的各个区域. ...
 - Java进阶(一)Java内存解析
		
栈.堆.常量池等虽同属Java内存分配时操作的区域,但其适用范围和功用却大不相同.本文将深入Java核心,简单讲解Java内存分配方面的知识. 首先我们先来讲解一下内存中的各个区域. stack(栈) ...
 - java内存分配和String类型的深度解析
		
[尊重原创文章出自:http://my.oschina.net/xiaohui249/blog/170013] 摘要 从整体上介绍java内存的概念.构成以及分配机制,在此基础上深度解析java中的S ...
 - Java当中的内存分配以及值传递问题内存解析
		
首先必须说明作为Java程序员对于内存只要有大致的了解就可以了,如果你对Java当中的某一个知识点在不需要分析内存分配过程的情况下可以掌握,那就大可不必去研究内存.如果你对知识点已经掌握,那么你应该把 ...
 - 【转】java内存分配和String类型的深度解析
		
一.引题 在java语言的所有数据类型中,String类型是比较特殊的一种类型,同时也是面试的时候经常被问到的一个知识点,本文结合java内存分配深度分析关于String的许多令人迷惑的问题.下面是本 ...
 - 【搞定Jvm面试】 Java 内存区域揭秘附常见面试题解析
		
本文已经收录自笔者开源的 JavaGuide: https://github.com/Snailclimb ([Java学习+面试指南] 一份涵盖大部分Java程序员所需要掌握的核心知识)如果觉得不错 ...
 - JAVA内存溢出解析(转)
		
JAVA内存溢出解析(转) 核心提示:原因有很多种,比如: 1.数据量过于庞大:死循环 :静态变量和静态方法过多:递归:无法确定是否被引用的对象: 2.虚拟机不回收内存(内存泄漏): 说白了就是程序运 ...
 - 议题解析与复现--《Java内存攻击技术漫谈》(一)
		
解析与复现议题 Java内存攻击技术漫谈 https://mp.weixin.qq.com/s/JIjBjULjFnKDjEhzVAtxhw allowAttachSelf绕过 在Java9及以后的版 ...
 - Java内存模型深度解析:final--转
		
原文地址:http://www.codeceo.com/article/java-memory-6.html 与前面介绍的锁和Volatile相比较,对final域的读和写更像是普通的变量访问.对于f ...
 
随机推荐
- Linux Centos 开启防火墙   FirewallD is not running
			
转载自:http://www.z4zr.com/page/1006.html CentOS7用firewall命令“替代”了iptables.在这里我们需要区分“iptables服务”和“iptabl ...
 - Incompatible integer to pointer conversion assigning to 'NSInteger *' (aka 'int *') from 'NSInteger' (aka 'int')
			
遇到这样的问题: integer to pointer conversion assigning to 'NSInteger *' (aka 'int *') from 'NSInteger' (ak ...
 - 小程序 wx.navigateTo传值总结
			
wx.navigateTo(Object object) 保留当前页面,跳转到应用内的某个页面.但是不能跳到 tabbar 页面.使用 wx.navigateBack 可以返回到原页面.小程序中页面栈 ...
 - golang函数学习笔记
			
golang函数特点: a.不支持重载,一个包不能有两个名字一样的函数 b.函数是一等公民,函数也是一种类型,一个函数可以赋值给变量 c.匿名函数 d.多返回值 例子1 func add(a, b ...
 - 4.1 - FTP文件上传下载
			
题目:开发一个支持多用户同时在线的FTP程序要求:1.用户加密认证2.允许同时多用户登录3.每个用户有自己的家目录,且只能访问自己的家目录4.对用户进行磁盘配额,每个用户的可用空间不同5.允许用户在f ...
 - 剑指Offer——数组中的逆序对
			
题目描述: 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数P.并将P对1000000007取模的结果输出. 即输出P%100 ...
 - 解决MySQL数据库同步1236错误
			
1.报错如下: Got fatal error from master when reading data from binary log: 'The slave is connecting usin ...
 - SharePoint 2013 附加内容数据库后出现404错误
			
本文讲述怎样解决SharePoint 2013 加内容数据库(Content DataBase)后出现404错误. 笔者依照http://technet.microsoft.com/en-us/lib ...
 - python 学习笔记(十四)有依赖关系的接口开发
			
接口开发中存在很多有依赖关系的接口,例如:BBS中发帖的时候就需要进行校验用户是否登录,那么此时发帖的接口就与用户登录接口有依赖关系.在发帖时就需要先获取用户的session,与当前登录用户进行校验对 ...
 - [golang note] 数组切片
			
数组 √ golang数组包含的每个数据称为数组元素(element),数组包含的元素个数被称为数组长度(length). √ golang数组的长度在定义后不可更改,并且在声明时可以是一个常量或常量 ...