[发明专利]管理内存的方法和设备无效
| 申请号: | 200710107716.1 | 申请日: | 2007-04-28 |
| 公开(公告)号: | CN101169739A | 公开(公告)日: | 2008-04-30 |
| 发明(设计)人: | 权子根 | 申请(专利权)人: | 三星电子株式会社 |
| 主分类号: | G06F9/50 | 分类号: | G06F9/50;G06F12/02 |
| 代理公司: | 北京铭硕知识产权代理有限公司 | 代理人: | 韩明星;刘奕晴 |
| 地址: | 韩国京畿*** | 国省代码: | 韩国;KR |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | 管理 内存 方法 设备 | ||
本申请要求于2006年10月27日提交到韩国知识产权局的第10-2006-0105271号韩国专利申请的优先权,该申请公开于此以资参考。
技术领域
根据本发明的设备和方法涉及管理内存,更具体地讲,涉及通过有效地执行无用单元收集(garbage collection)来管理内存。
背景技术
在动态地管理内存的系统中,每当预定程序运行时,应该分配和收集内存。为程序中所使用的对象分配内存以进行存储和访问,而已经结束使用的对象被去除以确保内存。因此,在传统的C语言中,程序员使用诸如“malloc”或“free”的指令来分配内存和收集内存。
然而,与传统的C语言不同,在Java中,不需要程序员来分配和收集内存。通过Java虚拟机中包括的无用单元收集器(garbage collector)来执行内存管理。一旦预定程序运行,Java虚拟机就首先分配运行所述预定程序所需的存储区。这被称为堆(heap)。运行该程序所需的对象被存储在堆中以被访问。无用单元收集器删除存储在堆中的对象中的没有被使用的对象并进行紧凑处理,以便有效地管理内存。
无用单元收集器确定对象是否被引用以确定该对象是否被使用,并且仅从内存中去除没有被使用的对象。因此,当仅使用无用单元收集器来管理内存时,使用的对象不被去除,从而不会发生引用内存中不存在的对象的虚引用(dangling reference)。
然而,与Java实时规范(real-time specification for Java)相似,在一些编程语言中,可由程序员单独指定将使用的存储区,因此可能发生问题。
图1是解释根据Java实时规范管理内存的现有技术的方法的框图。参照图1,使用Java实时规范中的两种方法来管理内存。
一个程序可由多个线程组成。例如,在聊天程序的情况下,分别存在将用户输入的文本发送给另一用户的线程以及接收由另一用户输入的文本的线程。
一个程序中存在的多个线程可根据它们的特性被划分为实时线程15和普通线程16。实时线程15必须在固定的时间优先于普通线程16而运行。因此,抢占实时调度器11调整线程的优先级以将实时线程15调度为优先于普通线程16运行。
当运行普通线程16时,运行该线程所需的对象被存储在堆13中,并且访问所述对象以运行线程。这里,无用单元收集器12管理内存并确定存储在堆13中的对象是否被使用。然后,在确定对象没有被使用之后,从内存中去除确定没有被使用的对象,并使剩余对象紧凑。
当运行实时线程15时,独立于堆13设置多个存储区14,运行所述线程所需的对象被存储在存储区14中以被访问。存储区14的每一个都可被一个或多个实时线程15引用。当引用的线程全部结束时,存储区14连同其包括的对象一起被去除。
如图1中所示,当内存管理被二元化为堆13和存储区14时,可能产生下面的问题。
将堆13当作对象而对堆13执行的无用单元收集花费很长时间。已开发了进行无用单元收集的各种算法。然而,它们需要花费很长时间(例如,最多长达几秒钟)。
因此,不管运行实时线程15的调度如何,如果首先进行无用单元收集,则实时线程15的运行被延迟,延迟的时间不能被估计。抢占实时调度器11仅调整实时线程15和普通线程16之间的优先级,因此不能防止这样的问题。
当已经进行无用单元收集,而需要运行实时线程15时,也会发生问题。如果实时线程15的运行应该等待,直到无用单元收集结束,则实时线程15不能正常运行,在固定的时间运行实时线程15应该是最重要的任务。
此外,每个存储区14具有不同的寿命。因此,包括在具有长寿命的存储区中的对象引用包括在具有相对短的寿命的存储区中的对象。当具有短寿命的存储区被去除时,可能发生虚引用。
这将参照图2更全面地进行描述。
图2示出由实时线程15引用存储区14的现有技术的方法。
参照图2,线程A引用依次从存储区1至存储区3的多个存储区。在Java实时规范中,从存储区栈中首先删除最后引用的存储区(后入先出)。在图2中,存储区3在存储区2或存储区1被删除之前被删除。因此,如果这些存储区的每一个没有被除了线程A之外的线程引用,则存储区3的寿命比存储区1的寿命短。
如果存储区3被删除,而包括在存储区1中的对象仍引用包括在存储区3中的对象,则包括在存储区1中的对象引用了不存在的内存中的对象。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于三星电子株式会社,未经三星电子株式会社许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/200710107716.1/2.html,转载请声明来源钻瓜专利网。





