中国废品网 - 废品行业门户网站 !

商业资讯: 国内焦点 | 市场动态 | 废金属 | 废塑料 | 废纸橡胶 | 综合其它废料 | 国际观察 | 政治法规 | 低碳环保 | 废旧生意经

你现在的位置: 首页 > 商业资讯 > 经济观察 > Java垃圾回收机制浅谈
7.biz | 商业搜索

Java垃圾回收机制浅谈

信息来源:china-waste.com   时间: 2013-10-18  浏览次数:995

    关于堆栈与栈
     在了解Java的垃圾回收机制前,我认为有必要简单地了解JVM的一点小知识:一般程序在启动时,JVM会将内存分成几个部分:数据区、堆栈(stack)、堆(heap)等等,而在此处我们重点了解堆栈(stack)和堆(heap),一般我们可以认为JVM内存可分成栈内存和堆内存两种。                                                                                                     

    堆(stack):是一个运行时的数据区,类的对象就是存储在此,即那些通过new、newarray等指令所建立起来的对象所占用的内存是由堆内存分配而来,由于是在运行时动态分配内存的,所以存取速度相对比较慢。

     栈(heap): 是一个静态数据区,主要用于存放一些基本数据类型(int,short,long,byte,float,double,boolean,char)和对象句柄(即对象引用),由于栈中的数据在编译器就可确定,所以存取速度比堆要快,仅次于寄存器,栈数据可以共享。

    举个例子:

    String a = new String("zbx");该式中a为对象句柄,存放于堆栈中,而通过new关键字所新建的字符串对象”zbx”则存放于堆中。

    什么是垃圾回收
    众所周知,Java中提供了GC(Garbage Collection)机制,即垃圾回收机制。那么究竟何为垃圾回收呢?在Java中,没有被对象句柄所引用的对象和长时间没有被使用过的对象均可被视为”垃圾”,如在上述代码下再加上一句:

String a = new String("zbx");
a = null;则此时右边的对象便没有对象句柄指向它,理所当然它便成了”垃圾”,而垃圾会由Java所提供的
    垃圾回收器
    自动回收,这便是所谓的垃圾回收。同时,我们可以发现,垃圾回收只存在于堆空间中,而栈中不存在垃圾回收。

    垃圾回收的意义
    在c/c++中,程序员要想使用内存,必须自己手动调用malloc()函数来分配存储空间,而使用完后必须手动通过free()函数来释放空间,然而却有很多粗心的程序员忽略了这一重要步骤,导致这块被分配的空间站着茅坑不拉屎,自己不再使用,也不让别人用,当存在太多这样的”无用空间”时,便会出现我们常说的内存泄漏的现象。

    在这种情况下,垃圾回收的作用则显得非常重要,因为它不需要程序员手动释放所占用的”无用”内存,它会自动检测内存中存在哪些不再使用的内存,并采取回收的措施,我认为这样的好处就是提高了编程的效率,降低了编程的负担。但任何事物都必有两面性,垃圾回收也不例外,因为该过程是自动执行的,所以会有一定的系统开销,会在一定的程度上影响性能。

 

    ——本信息真实性未经中国废品网证实,仅供您参考