首页 > 编程语言 > 详细

Java学习笔记-内存分析

时间:2020-04-04 20:29:27      阅读:60      评论:0      收藏:0      [点我收藏+]

一般方法调用的内存图像

例子

//只要是类名就一定是标识符
//方法调用时,参数传递是‘值传递’
public class Test{
	public static void main(String[] args){
		int a = 10;
		int b = 20;
		int retValue = sumInt(a,b);
		System.out.println("retValue: " + retValue);
	}
	public static int sumInt(int a,int b){
		int result = a + b;
		int num = 3;
		int retValue = divide(result, num);
		return retValue
	}
	public static int divide(int x,int y){
		int z = x / y;
		return z;		
	}
}

技术分享图片

类创建时的内存图像

概述

1.类体 = 属性 + 方法

  • 属性描述的是 : 状态
  • 方法描述的是 : 行为动作
    2.各种变量的含义
  • 由于变量定义在类体当中,方法体之外,这种变量称为成员变量
  • 类似于学生序号这样的成员变量,必须通过创建对象去访问,所以这种成员变量有称为实例变量
  • 对象又称为实例,实例变量又被称为对象变量【对象级别的变量 】
  • 实例变量存在在java对象的内部,创建一个对象就有一份,100个就有100份
  • 想要访问实例变量,必须要有对象,不能通过"类名"的方式访问
    3.java运算符 -new
  • 实例化对象的语法:new 类名()
  • new运算符的作用是创建对象,在JVM堆内存中开辟新的内存空间
  • 方法区内存:在类加载的时候,class字节码代码片段被加载到该内存空间中
  • 栈内存:方法代码片段执行的时候,会给该方法分配内存空间,在栈内存中压栈
  • 堆内存:new的对象在堆内存中存储

例子

public class Students{
	int age;
	boolean sex;
    //姓名
    //Sting是一种引用数据类型,代表字符串
	//name是一个实例变量
	//name是一个引用
	String name;

	//家庭住址
	//Address是一种引用数据类型,代表家庭住址
	//addr是一个实例变量
	//addr是一个引用
	Address addr;
	
}
public class Address{
	String city;
	Stirng Street;
}
public static void Test(Stirng[] atgs){
	Students s1 = new Students("Zhang San",20,true);
	
}

技术分享图片

java语言中的三大变量

JVM主要包括三块内存空间,分别是:栈内存、堆内存、方法区内存

  1. 堆内存和方法区内存各有1个,一个线程一个栈内存

  2. 方法的代码片段以及整个类的代码片段都被存储到方法区内存中,在在类加载的是时候这些代码片段会载入

  3. 方法调用的时候,该方法所需要的内存空间在栈内存中分配。在该方法执行结束之后,该方法所属的内存空间释放

  4. 栈中主要存储的是方法体当中的局部变量

  5. 在程序执行过程中使用new运算符创建的java对象,存储在堆内存当中,对象内部有实例变量,所以实例变量存储在堆内存中

  6. 变量分类:

  • 局部变量 【方法体中声明】
  • 成员变量 【方法体外声明】
    • 实例变量 【不加static】
    • 静态变量 【加static】
  1. 静态变量存储在方法区内存
  2. 三块内存中变化最频繁的是栈内存,最先有数据的是方法区内存,垃圾回收器主要针对的是堆内存
  3. 垃圾回收器【自动垃圾回收机制,GC机制】什么时候会考虑将某个java对象的内存回收呢?
  • 当堆内存当中的java对象成为垃圾数据的时候,会被垃圾回收器回收
  • 什么时候堆内存中的java对象会变成垃圾呢?
    • 没有更多的引用指向它的时候
    • 这个对象无法被访问,因为访问对象只能通过引用的方式访问

例子

public class Chinese{
	String idCard;
	String name;
	Static String country = "中国";
	
	public Chinese(String idCard, String name){
		this.idCard = idCard;
		this.name = name;
	}
}
public static void main(String[] args){
	Chinese c1 = new Chinese("1243434353","张三");
	Chinese c2 = new Chinese("7423983949","李四");
}

技术分享图片

关键字 -this的内存图像

  1. this是一个变量,是一个引用。this保存当前对象的内存地址,指向自身。
  2. this存储在当前对象的堆内存中
  3. this可以使用在实例方法中,也可以使用在构造方法中,不能使用在静态方法中
  4. this()这种语法只能出现在构造方法的第一行,表示当前构造方法调用本类中其他的构造方法
    • 目的:代码复用

技术分享图片

Java学习笔记-内存分析

原文:https://www.cnblogs.com/zy200128/p/12633581.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!