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 ...
随机推荐
- java中Logger.getLogger(Test.class),即log4日志的使用
log4的使用方法: log4是具有日志记录功能,主要通过一个配置文件来对程序进行监测有两种配置方式:一种程序配置,一种文件配置有三个主要单元要了解,Logger,appender,layout. l ...
- 知问前端——html+jq+jq_ui+mySql+ajax
**************************************************************************************************** ...
- XML 配置里的 Bean 自动装配
在XML文件中,先看一下下面的代码: <bean id="student" class="com.jeremy.spring.beans.student" ...
- Zabbix监控web,MySQL,TCP状态,Nginx
接上篇Zabbix使用SMTP发送邮件报警并且制定报警内容 Zabbix怎么设置声音告警 web监控 在zabbix server选择web 创建一个监控web的场景 添加后这里有数字1 查看 假如在 ...
- Linux压缩解压缩(unzip,tar)
unzip tar 常用解压缩命令: tar -zxvpf:解压缩 tar -zcvpf: 压缩 # tar [-j|-z] [cv] [-f 建立的檔名] filename... <==打包与 ...
- Spoken English Practice(And I can't walk. Should i just stay home and pout about it?)
绿色:连读: 红色:略读: 蓝色:浊化: 橙色:弱读 下划线_为浊化 口语蜕变(2017/7/12) ...
- 关于Springboot 中注入多个cacheManage 时候 存在报错
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'e ...
- UVA10870—Recurrences(简单矩阵快速幂)
题目链接:https://vjudge.net/problem/UVA-10870 题目意思: 给出a1,a2,a3,a4,a5………………ad,然后算下面这个递推式子,简单的矩阵快速幂,裸题,但是第 ...
- hdu1568&&hdu3117 求斐波那契数前四位和后四位
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1568 题意:如标题所示,求斐波那契数前四位,不足四位直接输出答案 斐波那契数列通式: 当n<=2 ...
- C程序编译过程浅析(转)
前几天看了<程序员的自我修养——链接.装载与库>中的第二章“编译和链接”,主要根据其中的内容简单总结一下C程序编译的过程吧. 我现在一般都是用gcc,所以自然以GCC编译hellworld ...