Java--- 内存分析简述
程序员文章站
2022-06-03 13:27:37
...
这里简单说一下,一家之言。
在内存区域存在一个堆区和一个栈区(后进先出规则),用于存放不同的信息。
栈 --->连续的空间,自动分配,存放局部变量,通过new关键字实例化的对象放在这里面;
堆 --->不连续的空间,我理解大概分为两个部分,一个部分叫方法区,存放1.类信息 2.static变量(类变量) 3.常量池(Final常量,String字符串常量);另一部分放按照类信息建立的对象(以类的形式组织代码,以对象的形式封装数据),栈里面的局部变量通过操作堆里面对象地址(4个位,如2233aabb)来操作这些对象。
举个例子
/**
* 内存分析示例
* @author Administrator
*
*/
public class Student1 {
//一般属性
private int id;
private String name;
//静态属性
private static int age;
//常量
private final int MAX_AGE = 15;
//一般方法
public void speak(String name){
this.name = name;
System.out.println(name+"say hello");
}
//静态方法
public static void run(){
System.out.println("run");
}
public static void main(String[] args) {
//建立局部变量stu,并初始化
Student1 stu = new Student1();
//调用一般方法
stu.speak("小明");
//调用静态方法
run();
System.out.println(stu.id);
System.out.println(stu.MAX_AGE);
}
}
还有一些其他的问题,以后再补充
1)为什么String类要被放在常量池
String被final修饰,是不可变字符序列,对String重新赋值实际上是创建一个新的对象,原对象保持不变,所以放在常量池,因为对应这个地址的值是不变的
上一篇: 你知道大姨妈来了不能吃什么吗?
下一篇: 八大排序算法的Python实现总结