对象内存管理
一、基本数据类型
1.数值
2.整型:byte、short、int 、long
3.浮点型:float、double
4.字符: char
5.布尔:boolean true/false

二、引用数据类型

1.类

public class User{
 private String name;
 }
 User user = new User();

2. 接口

public interface phone{
 public void call();
 }
 public HuaWei implements phone{
 public void call(){
 }
 }

3.数组

int[] arr = new int[2];
 String[] strArr = new String[];

三、JVM虚拟机如何运行.class程序:

1)运行前:JVM虚拟会向计算机申请初始内存空间

2)运行中:java程序运行之后,java程序会不断向JVM请求内存,一旦JVM使用内存

超过了初始内存,JVM继续向计算机请求更多的内存空

3)内存溢出:当JVM虚拟机向计算机请求的内存超出了预定范围之后,则内存溢出

outOfMemeory


四、JVM虚拟机内内存管理

1)方法区(method area)

2)堆(heap)

3)栈(stack)

java 历史数据权限 java数据管理_加载


五、引用数据类型创建流程

1)在堆区划分一块内存空间存储相应值

2)在栈区划分内存空间指向新创建对象在堆中的地址

六、类的实例对象的创建过程 User user = new User()

1.先检查需要使用类对象的.class文件在方法区是否存在

2.如果不存在,则先加载相应的.class文件

3.加载.class文件流程

(1)静态成员属性及代码块:加载静态方法区(重点:只加载一次)

-》静态代码块:加载.class文件自动执行,并且执行一次

-》非静态代码块:在创建实例对象的时候调用,每次创建都会被调用

(2)非静态成员属性和方法:加载到非静态方法区

4.在堆区划分内存空间,根据类的模板,赋予类的属性初始值

5.调用相应构造函数,给对象属性赋值

6.在栈区划分内存空间保存对象的地址

六、A object = new A()

public class A {
	String name;
	public static int a = 5;
	// 构造方法
	public A() {
		System.out.println("class A");
	}
	// 代码块
	{
		System.out.println("I'm class A");
	}
	// 静态代码块
	static {
		// background = 加载图片操作
		System.out.println("class A static");
	}
	public void show() {
		System.out.println(name);
	}
}

运行流程
第一步:编译A.java ----> A.class
第二步:将A.class 加载到JVM虚拟机方法区
第三步:执行A.class中的静态代码块,即以下代码块

static {
 // background = 加载图片操作
 }


第四步:加载静态属性到静态方法区

public static int a = 5;


第五步:将非静态属性和方法加载非静态方法区

// 代码块
 {
 System.out.println(“I’m class A”);
 }
 String name;
 public void show() {
 System.out.println(name);
 }


第六步:执行类中非静态代码块

// 代码块
 {
 System.out.println(“I’m class A”);
 }


第七步:在堆中划分内存空间,为新建对象进行属性的初始化
第八步:调用构造方法,为对象的属性赋值
第九步:在栈区划分内存空间,保存新建对象的内存地址

A object1 = new A(); // 第一次

A object2 = new A(); // 第二次,直接从第六步开始

java 历史数据权限 java数据管理_java 历史数据权限_02


java 历史数据权限 java数据管理_加载_03


java 历史数据权限 java数据管理_java 历史数据权限_04