欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

Java内存机制,

来源: javaer 分享于  点击 29664 次 点评:80

Java内存机制,



露从今夜白,月是故乡明。 -----杜甫的《月夜忆舍弟》


1.寄存器:最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制.

  1. 栈:存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量池中(对象可能在常量池里)(字符串常量对象存放在常量池中。)
  2. 堆:存放所有new出来的对象。
  3. 静态域:存放静态成员(static定义的)
  4. 常量池:存放字符串常量和基本类型常量(public static final)。有时,在嵌入式系统中,常量本身会和其他部分分割离开(由于版权等其他原因),所以在这种情况下,可以选择将其放在ROM中 。
  5. 非RAM存储:硬盘等永久存储空间
    其他资料:http://blog.csdn.net/clam_clam/article/details/6829960

栈内存

在函数中定义的一些基本类型的变量对象的引用变量都是在函数的栈内存中分配,当在一段代码块定义一个变量时,Java 就在栈中为这个变量分配内存空间,当超过变量的作用域后,Java 会自动释放掉为该变量分配的内存空间,该内存空间可以立即被另作它用。

堆内存

堆内存用来存放由 new 创建的对象和数组,在堆中分配的内存,由 Java 虚拟机的自动垃圾回收器来管理。

示例1

class Person{
    String name;
    int age;
    public void tell(){
        System.out.println("姓名:"+name+",年龄:"+age);
    }
}

public class Test03{
    public static void main(String[] args) {
        Person per1=new Person();
        Person per2=per1;
        
        per1.name="张三";
        per1.age=30;
        per2.age=33;
        
        per1.tell();
        per2.tell();
    }
}

示例2

class Person{
    String name;
    int age;
    public void tell(){
        System.out.println("姓名:"+name+",年龄:"+age);
    }
}

public class Test04 {
    public static void main(String[] args) {
        Person per1=new Person();
        Person per2=new Person();

        per1.name="张三";
        per1.age=30;
        per2.name="李四";
        per2.age=33;
        per2=per1;
        
        per1.tell();
        per2.tell();
    }
}

1.Java本身提供垃圾收集机制(Garbage Collection,GC),会不定期施放不用的内存空间,只要对象不用了,就会等待GC释放空间,如上面堆内存中的name=“李四”;age=33。

  1. 一个栈内存只能指向一个对内存空间,如果要想再指向其他的堆内存空间,则必须先断开已有的指向才能分配新的指向。

内存溢出

https://www.cnblogs.com/xrq730/p/4833713.html

相关文章

    暂无相关文章
相关栏目:

用户点评