Java内存管理机制

来源:互联网 发布:中科院软件所招聘 编辑:程序博客网 时间:2024/06/01 10:38


内存管理的目的:

Java语言的性能极大程度上依赖于其运行的硬件环境,而内存又是硬件环境资源的一部分。如果Java开发人员开发的应用没能合理、有效地使用系统内存,那么这个应用就不可能具备高的性能,甚至会导致系统运行期间崩溃。

 

谈及Java内存管理,首先应该清楚两个概念:Java对象的生命周期和垃圾回收机制(Garbage Collection ,GC)。


   Java对象生命周期

 

      Java对象的生命周期是指对象从创建到回收的整个生命历程,共包括7个阶段,创建阶段(create)、应用阶段(using)、不可视阶段(invsiable)、不可达阶段(unreachable)、可搜集阶段(collection)、终结阶段(finalized)、释放阶段(free)

  1. 创建阶段。在创建阶段,系统会经历以下5个步骤:

     1)为对象分配存储空间

     2)开始构造对象

     3)递归调用其超类的构造方法

     4)进行对象实例初始化及变量初始化

     5)执行构造方法体

  2以上是系统处于创建阶段时,系统所做的一些工作。其中有些过程与应用的性能密切相关。创建对象时的关键应用规则:

     1)避免在循环体中声明创建对象;(这样会在内存中产生大量的对象应用)

     2)尽量及时使对象符合垃圾回收标准

     3)不要采用过深的继承层 

     4) 访问本地变量由于访问类的变量

  3、应用阶段。对象的“价值存在期”,这一时期对象具有以下特征:

     1)系统至少维护着对象的一个强引用;

     2)所有对该对象的引用全部是强引用

  4、不可视阶段。在应用阶段之后便是不可视阶段,说明我们在其他区域的代码中已经不可以在引用它,其强引用已经消失。

  5、不可达阶段。处于不可达阶段的对象,在虚拟机所管理的对象引用根集合中在也找不到直接或间接的强引用,这些对象通常是指所有线程栈中的临时变量,所有已装载类的静态变量或者对本地代码接口(JNI)的引用。

  6、可收集阶段、终结阶段与释放阶段

     当对象处于这个阶段可能处于下面三种情况:

     1)回收器发现该对象不可达;

     2finalize方法已经被执行

     3)对象空间已被重用


    垃圾回收机制


      Java虚拟机的内存管理机制叫做垃圾回收机制(GC)。

   Java中垃圾对象的定义:

    一个对象创建后被放置在JVM的堆内存中,当永远不再引用这个对象时,它将被JVM在堆内存中回收。被创建的对象不能再生,同时也没有办法通过程序语句释放他们。


   另一个定义:

   当对象在JAVA运行空间中无法通过根集合(root set)到达时,这个对象就被称为垃圾对象。根集合是由类中的静态引用域与本地引用域组成的,JVM通过根集合索引对象。



  在做Java应用开发时,经常会用到由JVM管理的两种类型的内存:堆内存(heap)和栈内存(stack)。

    堆内存主要用来存储程序在运行时创建或实例化的对象和变量。

    堆内存在JVM启动时就被创建,是JVM内存管理中非常关键的一个内存管理区域。堆内存中所存储的对象可以被JVM自动回收,不能通过其他外部手段回收。堆内存通常分为两个区域:新对象区域和老对象区域。

    新对象区域又可以分为三个小区域:Eden区域、From区域、To区域。Eden区域用来保存新创建的对象,当Eden区域的对象满了之后,JVM将要做可到达性测试,主要任务是检查哪些对象由根集合出发不可到达。这些对象就可以被JVM回收,并且将所有的活动对象从Eden区域拷到To区域,此时一些对象将发生状态交换,有些对象就从To区域转移到From区域,此时From区域就有了对象。整个的对象迁移过程是由JVM控制完成的。这一过程会严重影响应用的性能。

    老对象区域,在老对象区域的对象仍有一个较长的生命周期,大多数的JVM系统中的垃圾对象,都来自于短命对象,经过一段时间被转入老对象区域的对象,就变成了垃圾对象。

    栈内存主要用来存储程序代码中声明为静态或非静态的方法。

    垃圾回收与对象的生命周期,密的联系在一起。



0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 喂母乳母亲奶头裂开怎么办 给宝宝吃奶被吃到奶头裂开怎么办 宝宝吃奶奶头裂开了怎么办 小孩吃奶奶头裂开了怎么办 站久坐久腰酸痛怎么办 孕39周胎儿头小怎么办 怀孕腰两侧长肉怎么办 怀孕四个月半月吃点就饱怎么办啊 怀孕四个月睡眠不好怎么办 二胎七个月肚子太大怎么办 上火牙疼牙龈肿怎么办 孕30周乳房胀痛怎么办 怀孕长妊娠纹了怎么办 坐久了肚子胀疼怎么办 怀孕后胖的太快怎么办 怀孕牙齿全坏了怎么办 怀孕脸胖了好多怎么办 孕晚期不爱吃肉怎么办 怀孕期间胖了怎么办啊 孕期长得太胖怎么办 狗吃马肉脸肿了怎么办 狗过敏了脸肿了怎么办 孕初期外阴很痒怎么办 怀孕了吃了田鸡怎么办 孕妇睡眠质量差怎么办吃什么 39周2天了还不生怎么办 孕中期体重猛长怎么办 4个半月胎位不正怎么办 41周不产生宫缩怎么办 生完孩子胎盘没有脱落怎么办 39周还是臀位怎么办 怀孕7个月胎位不正怎么办 怀孕六个多月胎位不正怎么办 怀孕七个月了胎位不正怎么办 怀孕七个月胎位不正怎么办 怀孕肚子上有妊娠纹怎么办 怀孕九个月肚子长痱子怎么办 怀孕前体重偏胖怎么办 怀孕打胰岛素血糖控制不好怎么办 孕后期憋的难受怎么办 怀孕6个月不想生怎么办