1、java内存分析
2.2、面向对象内存分析
Java虚拟机的内存可以分为三个区域:栈(stack)、堆(heap)、方法区(method area);
2.2.1、栈
栈的特点如下:
1、栈描述的是方法的内存模型。每个方法被调用都会创建一个栈帧(存储局部变量、操作数、方法出口等);
2、JVM为每个线程创建一个栈,用于存放该线程执行方法的信息(实际参数、局部变量等);
3、栈属于线程私有,不能实现线程键的共享;
4、栈的存储特性是:先进先出,后进后出;
5、栈是有系统自动分配,速度快;栈是一个连续的内存空间;
2.2.3、堆
堆的特点如下:
1、堆用于存储创建好的对象和数组(数组也是对象);
2、JVM只有一个堆,被所有线程共享;
3、堆是一个不连续的内存空间,分配灵活,速度慢;
2.2.4、方法区
方法区特点如下:
1、JVM只有一个方法区,被所有线程共享;
2、方法区实际也是堆,只是用于存储类、常量相关的信息;
3、用来存放程序中永远是不变或唯一的内容。(类信息【Class对象】、静态变量、字符串常量等);
public class SxtStu { int id; String sname; int age; Computer comp;//计算机 void study(){ System.out.println("我在认真学习,使用电脑:"+comp.brand); } void play(){ System.out.println("我在玩游戏:王者农药!"); } SxtStu(){ } public static void main(String[]args){ SxtStu stu=new SxtStu(); stu.id=1001; stu.sname="小明"; stu.age=18; Computer c1=new Computer(); c1.brand="联想"; stu.comp=c1; stu.play(); stu.study(); } } class Computer{ String brand; }