Java的内存机制

来源:互联网 发布:php 直播功能如何实现 编辑:程序博客网 时间:2024/06/17 13:14

         Java的内存机制分析


    今天学习了关于Java的运行时内存机制,收益很多,写下来,一共日后参考。


      J的内存机制,主要是运用堆栈和栈的相互配合使用。
   

   1,栈的速度快,
    

   主要运用与存储对象的引用,常用的基础数据类型之类的,在程序中定义了一个局部变量时,虚拟机就会在栈中为这个变量分配出一块内存,当这个变量的使用超出了它的作用范围之后,虚拟机就会销毁掉这个内存,例如在程序中调用了一个方法,那么虚拟机就会为这个方法所需要的一些参数变量去分配一块内存,当这个方法执行结束之后,虚拟机就会立刻将这个内存销毁。


  2,堆内存,

    相对于栈来说,堆的速度就会慢上一些,堆主要是用于存放通过new出来的对象还有数组,例如 P p=new P(1);此时,虚拟机就会为这个对象去分配出一块内存,用于存放这个对象,而在此之前,虚拟机还会在栈中为p这个引用变量创建一块内存,而这个变量的值就是对象的地址,换句话来说就是栈中的引用指向了堆中的实际的对象,这就是Java中的指针



  3,关于内存回收

   栈内的空间,在变量超出了作用域之后就会立刻被回收掉,但是堆中就不同,堆中所存放的实例需要通过虚拟机的垃圾回收装置进行回收,当一个对象被创创建出来的时候,如果内存栈中所指向它的引用被销毁了,此时再没有任何引用去指向这个对象的时候,通常来说,在此后的某一个时间,记住,是某一个时间,
垃圾回收器就会来把堆中的这个没有任何引用指向它的对象给回收掉,而不是立刻回收。栈和堆的对比栈比堆要快,而且数据是可以共享的,但是缺点是不够灵活,成员变量在堆内存中存放,因为成员变量是属于对象的,只有当对象被创建出来的时候,成员变量才会被创建,所以成员变量和对象一样是在堆内存中存放的。局部变量是在栈中存放的,因为只有在某一个方法在被调用的时候,才会为其中的局部变量分配空间。



  本文尚有许多不完善的地方,希望各位能多指点一下,大家一同进步。
原创粉丝点击