zoukankan      html  css  js  c++  java
  • java的内存管理机制

    1、内存区域的分类

    栈内存:基本类型变量和对象的引用,优势在于存取速度快

    堆内存:new创建的对象和数组以及对象的实例化变量,优势在于动态分配内存,但是存取速度相对较慢

    2、不同类型的内存分配

    (1)基本数据类型:类似int,char,double之类的数据类型

             当使用int a;来定义的时候,会在栈空间分配一个空间来存a(此时为空);当使用int a=2;来定义的时候,会在栈空间分配一个空间来存a,同时去找有没有值为2的内存空间,如果有就把a的地址空间指向2的地址空间,如果没有就创建值为2的地址空间,把a的地址空间指向那个地址空间。

    (2)对象

             对对象的内存分配主要是在栈空间存放对象的地址(对应的堆空间的地址),在堆空间存放对象

    (3)String

             String其实就是一个类,但是有比较特殊的地方。

             String s = new String(“Hello,World!”); 和 String s = “Hello,World!”; 是不一样的:

             前者和普通类是一样的,后者与基本类型类似,会先去找有没有”Hello,World!”,如果没有才会去创建一个值为”Hello,World!”的对象,然后栈空间存放这个对象的在堆中的地址(记这个栈空间的地址为X,X不是对象在堆中的地址),s在栈空间的值是X。

    (4)数组

             栈中存放数组在堆中的首地址,堆中分配数组。

    (5)方法调用时的内存分配

             实例变量和对象在堆中,局部变量在栈中(方法执行完成之后就会被回收)

    3、垃圾回收机制

    (1)方式

             JVM自己回收或者是system.gc();请求回收。

    (2)对象

             1)空引用:String s = null;此时s就会被回收

             2)没有引用:String s = “a”;s = “b”;那么a就变成“无主孤魂”就会被回收

             3)过期:方法运行完成后,方法中的局部变量就会被回收

             4)互相引用:对象A引用了对象B,B直接或者间接引用了对象A,而且A和B都不被其他对象所引用,这样也会被回收

    (3)垃圾回收算法

             http://speed847.iteye.com/blog/373278

  • 相关阅读:
    Java基础知识总结(绝对经典)
    mybatis注解详解
    div行内样式style常用属性
    php中json_decode()和json_encode()的使用方法
    java调用javascript :js引擎rhino
    DeleteDC() 与 ReleaseDC() 的区别 [转]
    non-manifold Mesh(非流形网格)
    C++静态成员函数小结 [转]
    C++ 类的静态成员详细讲解[转]
    CString 转 char*; wstring 转 string
  • 原文地址:https://www.cnblogs.com/songxh-scse/p/5887977.html
Copyright © 2011-2022 走看看