KR20080037948A - 메모리를 관리하는 방법 및 장치 - Google Patents
메모리를 관리하는 방법 및 장치 Download PDFInfo
- Publication number
- KR20080037948A KR20080037948A KR1020060105271A KR20060105271A KR20080037948A KR 20080037948 A KR20080037948 A KR 20080037948A KR 1020060105271 A KR1020060105271 A KR 1020060105271A KR 20060105271 A KR20060105271 A KR 20060105271A KR 20080037948 A KR20080037948 A KR 20080037948A
- Authority
- KR
- South Korea
- Prior art keywords
- memory area
- memory
- real
- garbage collection
- thread
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0253—Garbage collection, i.e. reclamation of unreferenced memory
- G06F12/0269—Incremental or concurrent garbage collection, e.g. in real-time systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Memory System (AREA)
- Devices For Executing Special Programs (AREA)
- Debugging And Monitoring (AREA)
Abstract
본 발명은 메모리를 관리하는 방법에 관한 것으로, 본 발명에 따르면 메모리 상의 소정의 힙(heap)에 대하여 수행 중 또는 수행 예정인 가비지 컬렉션(garbage collection)이 실시간 스레드(real-time thread)가 실행된 이후에 수행될 수 있도록 스케쥴링한 후에 스케쥴에 따라 가비지 컬렉션을 수행하고, 실시간 스레드를 실행하기 위해 할당된 메모리 영역(memory area)을 힙 안에서 관리함으로써 실시간 스레드의 실행이 가비지 컬렉션에 의해 지연되지 않게 되며, 허상 참조(dangling reference)를 방지할 수 있어 스레드 실행의 안정성을 보장할 수 있게 된다.
가비지 컬렉션, 메모리, 힙, 스레드, 메모리 영역, 실시간 시스템
Description
도 1은 종래 기술에 따른 메모리를 관리하는 장치를 설명하기 위한 블록 다이어그램이다.
도 2는 실시간 스레드(real-time thread)가 메모리 영역(memory area)들을 참조하는 방법을 도시한다.
도 3은 본 발명의 일 실시예에 따른 메모리를 관리하는 장치를 설명하기 위한 블록 다이어그램이다.
도 4는 본 발명의 일 실시예에 따른 메모리를 관리하는 방법의 흐름도이다.
도 5는 본 발명의 일 실시예에 따른 가비지 컬렉션(garbage collection) 방법의 흐름도이다.
도 6a 내지 6 b는 본 발명의 일 실시예에 따른 메모리 영역을 컴팩션(compaction)하는 방법을 설명하기 위한 블록 다이어그램이다.
도 7은 본 발명의 또 다른 실시예에 따른 가비지 컬렉션 방법의 흐름도이다.
도 8은 본 발명에 일 실시예에 따른 예외(exception) 처리의 예를 도시한다.
본 발명은 메모리를 관리하는 방법 및 장치에 관한 것이고, 보다 상세히는 가비지 컬렉션(garbage collection)을 효율적으로 수행하여 메모리를 관리하기 위한 방법 및 장치에 관한 것이다. 이와 더불어 메모리 영역을 통해 실시간 스레드들의 즉각적인 반응속도를 제공하게 된다.
동적으로 메모리를 관리하는 시스템에서는 소정의 프로그램을 실행할 때마다 메모리를 할당하고 수거해줘야 한다. 프로그램에서 사용되는 객체(object)들을 저장하고, 액세스할 수 있도록 메모리를 할당하고, 사용이 끝난 객체들은 메모리에서 삭제하여 메모리를 확보하여야 한다. 따라서, 종래의 C 언어에서는 프로그래머가 'malloc' 또는 'free' 등의 명령어를 이용해서 메모리를 할당하고, 일일이 수거해줬다.
그러나 자바(java)에서는 종래의 C 언어와 달리 프로그래머가 일일이 메모리를 할당하고 수거해줄 필요가 없다. 자바 가상 머신(java virtual machine) 상의 가비지 컬렉터(garbage collector)에 의해 메모리 관리가 수행된다. 소정의 프로그램이 실행되면 자바 가상 머신은 우선 프로그램의 실행에 필요한 메모리 영역을 할당하게 되는데 이를 힙(heap)이라 한다. 프로그램의 실행에 있어서 필요한 객체들은 힙 안에 저장되고, 액세스된다. 가비지 컬렉터는 힙에 저장된 객체들 중에서 사용되지 않는 객체들을 삭제하고, 컴팩션(compaction) 함으로써 메모리를 관리하게 된다.
가비지 컬렉터는 객체들이 참조(reference)되었는지 여부를 판단하여 사용되 는 객체와 사용되지 않는 객체들을 판단하고, 사용되지 않는 객체들만 메모리에 서 삭제한다. 따라서, 메모리를 관리하기 위해 가비지 컬렉터만 사용하는 경우에는 사용되고 있는 객체가 삭제되어 메모리에 존재하지 않는 객체를 참조하는 허상 참조(dangling reference)가 발생하지 않는다.
그러나, 실시간 자바와 같이 일부 프로그래밍 언어에서는 프로그래머가 직접 메모리 영역(memory area)를 별도로 지정하여 사용할 수도 있으므로, 문제가 발생할 수 있다.
도 1은 종래의 실시간 자바에 따른 메모리를 관리하는 방법을 설명하기 위한 블록 다이어그램이다. 도 1을 참조하면, 실시간 자바에서는 두 가지 방법에 의해 메모리가 관리된다.
하나의 프로그램은 복수의 스레드(thread)로 이루어질 수 있다. 예를 들어, 채팅 프로그램의 경우 본인이 입력하는 글을 상대방에게 보내주는 스레드와 상대방이 입력한 글을 수신하는 스레드가 별도로 존재하게 된다.
하나의 프로그램에 존재하는 복수의 스레드는 그 성질에 따라 실시간 스레드와 노멀 스레드(normal thread)로 구분된다. 실시간 스레드는 정해진 시간에 실행되어야 하는 스레드로써, 노멀 스레드(normal thread)에 비해 우선하여 실행되어야 하는 스레드를 의미한다. 따라서, 선점 실시간 스케쥴러(11)는 스레드 간의 우선 순위를 조정하여 실시간 스레드가 노멀 스레드보다 먼저 실행될 수 있도록 스케쥴링한다.
노멀 스레드를 실행하는 경우에는 힙(13)에 스레드의 실행에 필요한 객체들 을 저장하고, 액세스하여 스레드를 실행한다. 여기서 메모리 관리는 가비지 컬렉터(12)가 수행하게 되는데 힙(13)에 저장된 객체들이 사용되고 있는지를 판단하여 사용되지 않는 객체들은 메모리에서 삭제하고 남아있는 객체들을 컴팩션(compaction)한다.
실시간 스레드를 수행하는 경우에는 힙(13)과는 별도로 메모리 영역(memory area)(14)를 설정하고, 설정된 메모리 영역들에 스레드의 실행에 필요한 객체들을 저장하고, 액세스한다. 각각의 메모리 영역들은 하나 이상의 실시간 스레드들에 의해 참조될 수 있으며, 참조하는 스레드들이 모두 없어지면 포함된 객체들과 함께 삭제된다.
도 1에 도시된 바와 같이 힙과 메모리 영역으로 이원화하여 메모리를 관리하는 경우에는 다음과 같은 문제점이 발생할 수 있다.
우선, 힙을 대상으로 하여 수행되는 가비지 컬렉션은 수행에 많은 시간을 소모한다. 가지비 컬렉션을 수행하는 다양한 알고리즘들이 개발되어 있으나, 가비지 컬렉션에는 길게는 수초에 해당하는 많은 시간이 소모된다.
따라서, 실시간 스레드의 실행이 예정되어 있음에도 불구하고, 가비지 컬렉션을 먼저 수행한다면 실시간 스레드의 실행의 지연되며, 지연 시간을 예측하기 힘들어 진다는 문제점이 있다. 선점 실시간 스케쥴러(11)는 실시간 스레드와 노멀 스레드 사이의 우선 순위만을 조정하므로, 이와 같은 문제점을 막을 수 없다.
가비지 컬렉션을 이미 수행하고 있는데 실시간 스레드의 실행이 필요한 경우에도 같은 문제점이 있다. 이미 수행되고 있는 가비지 컬렉션이 모두 완료되기까 지 실시간 스레드는 수행되지 아니하고 기다려야 한다면, 정해진 시간에 실행되는 것이 무엇보다 중요한 실시간 스레드는 정상적으로 실행될 수 없다.
다음으로, 메모리 영역들은 서로 다른 지속 시간(life time)을 가지고 있다. 따라서, 지속 시간이 긴 메모리 영역에 포함되어 있는 객체가 지속 시간이 짧은 메모리 영역에 포함되어 있는 객체를 참조하고, 지속 시간이 짧은 메모리 영역이 삭제되면 허상 참조(dangling reference)를 발생시킬 수도 있다. 도 2를 참조하여 상세히 설명한다.
도 2는 실시간 스레드가 메모리 영역들을 참조하는 방법을 도시한다.
도 2를 참조하면, 스레드 A는 메모리 영역 1, 2, 3,…의 순서로 복수의 메모리 영역을 참조한다. 실시간 자바에 따르면, 나중에 참조되는 메모리 영역이 먼저 메모리 영역 스택에서 먼저 삭제된다(last-in first-out). 도 2에서는 메모리 영역 3이 메모리 영역 2 나 1 보다 먼저 메모리 영역 스택에서 삭제된다. 따라서, 각각의 메모리 영역이 스레드 A 이외에 다른 스레드에 의해 참조되고 있지 않다면, 메모리 영역 3의 지속 시간이 메모리 영역 1의 지속 시간보다 짧다.
만약, 메모리 영역 1에 있는 객체가 메모리 영역 3에 있는 객체를 참조하고 있는 상태에서 메모리 영역 3이 삭제되어 버린다면, 메모리 영역 1의 객체는 메모리 상에 존재하지 않는 객체를 참조하게 되는 것이다.
또한, 힙에 포함되어 있는 객체가 메모리 영역에 포함되어 있는 객체를 참조하는 경우에도 메모리 영역이 삭제되어 허상 참조가 발생할 수도 있다. 자바 가상 머신은 메모리 영역을 참조하고 있는 스레드가 있는지 여부만을 판단하고, 참조하 고 있는 스레드가 없는 경우에 메모리 영역을 삭제하므로, 힙에 포함되어 있는 객체가 메모리 영역에 포함되어 있는 객체를 참조하는 경우에는 아직 객체가 사용되고 있음에도 불구하고 메모리 영역이 삭제될 수 있다. 이 경우 힙에 포함되어 있는 객체는 메모리에 존재하지 않는 객체를 참조하게 되어 허상 참조(dangling reference)가 발생하게 된다.
따라서, 실시간 스레드의 실시간적인 실행을 보장하면서, 허상 참조를 발생시키는 불법적인 참조(illegal reference)를 방지할 수 있는 메모리 관리 방법이 필요하다.
본 발명이 이루고자 하는 기술적 과제는 가비지 컬렉션(garbage collection)을 효율적으로 수행하여 메모리를 관리하기 위한 방법 및 장치를 제공하는데 있고, 상기 방법을 컴퓨터에서 실행시키기 위한 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록 매체를 제공하는데 있다.
상기 기술적 과제를 해결하기 위한 본 발명에 따른 메모리를 관리하는 방법은 상기 메모리 상의 소정의 힙(heap)에 대하여 수행 중 또는 수행 예정인 가비지 컬렉션(garbage collection)이 실시간 스레드(real-time thread)가 실행된 이후에 수행될 수 있도록 스케쥴링하는 단계; 및 상기 스케쥴에 따라 상기 소정의 힙에 대하여 가비지 컬렉션을 수행하는 단계를 포함한다.
본 발명에 따른 보다 바람직한 실시예에 따르면, 상기 가비지 컬렉션을 수행 하는 단계는 실시간 자바(real-time specification for java)에 의한 가비지 컬렉션을 수행하는 단계를 포함한다.
본 발명에 따른 보다 바람직한 실시예에 따르면, 상기 소정의 힙은 상기 실시간 스레드의 실행을 위한 객체들이 포함되어 있는 메모리 영역(memory area)을 포함한다.
본 발명에 따른 보다 바람직한 실시예에 따르면, 상기 가비지 컬렉션을 수행하는 단계는 상기 힙에 포함되어 있는 상기 메모리 영역에 대하여 가비지 컬렉션을 수행하는 단계를 포함한다.
상기 기술적 과제를 해결하기 위한 본 발명에 따른 메모리를 관리하는 장치는 상기 메모리 상의 소정의 힙(heap)에 대하여 수행 중 또는 수행 예정인 가비지 컬렉션(garbage collection)이 실시간 스레드(real-time thread)가 실행된 이후에 수행될 수 있도록 스케쥴링하는 스케쥴러; 및 상기 스케쥴에 따라 상기 소정의 힙에 대하여 가비지 컬렉션을 수행하는 가비지 컬렉터를 포함한다.
본 발명에 따른 보다 바람직한 실시예에 따르면, 상기 가비지 컬렉터는 실시간 자바(real-time specification for java)에 의한 가비지 컬렉션을 수행하는 것을 특징으로 한다.
본 발명에 따른 보다 바람직한 실시예에 따르면, 상기 소정의 힙은 상기 실시간 스레드의 실행을 위한 객체들이 포함되어 있는 메모리 영역(memory area)을 포함한다.
본 발명에 따른 보다 바람직한 실시예에 따르면, 상기 가비지 컬렉터는 상시 힙에 포함되어 있는 상기 메모리 영역에 대하여 가비지 컬렉션을 수행하는 것을 특징으로 한다.
상기 기술적 과제를 해결하기 위해, 본 발명은 상기된 메모리 관리 방법을 컴퓨터에서 실행시키기 위한 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록 매체를 제공한다.
이하에서는 도면을 참조하여 본 발명의 바람직한 실시예들을 상세히 설명한다.
도 3는 본 발명에 따른 메모리를 관리하는 장치를 설명하기 위한 블록 다이어그램이다.
본 발명에 따른 메모리를 관리하는 장치는 스케쥴러(31), 힙(32) 및 가비지 컬렉터(33)로 구성된다.
도 3을 참조하면, 본 발명에 따른 스케쥴러(31)는 도 1에 도시된 선점 실시간 스케쥴러(11)와 마찬가지로 스레드 간의 우선 순위를 조정하여 실시간 스레드가 노멀 스레드보다 먼저 실행될 수 있도록 스케쥴링한다.
또한, 스케쥴러(31)는 실시간 스레드들이 모두 실행 완료된 이후에 가비지 컬렉션이 수행되도록 가비지 컬렉터(32)에 대하여 인터럽트를 발생시킨다. 가비지 컬렉션이 아직 수행되지 않고 있다면, 현재 실행 중이거나 실행 예정인 실시간 스레드가 모두 실행 완료된 이후에 가비지 컬렉션이 수행되도록 가비지 컬렉션을 스케쥴링한다. 만약, 가비지 컬렉션이 이미 수행되고 있는 상태에서 실시간 스레드가 실행되려 한다면, 가비지 컬렉터(32)에 대하여 인터럽트(interrupt)를 발생시 켜, 실시간 스레드를 먼저 실행한 이후에 가비지 컬렉션이 수행되도록 한다.
스케쥴러(31)가 스레드간 우선 순위를 조정할 뿐만 아니라, 가비지 컬렉션의 수행이 실시간 스레드의 실행을 방해하지 않도록 스케쥴링함으로써 지연이 없는 실시간 스레드의 실행을 보장하게 된다.
본 발명에 따른 힙(32)은 종래의 힙과 마찬가지로 노멀 스레드의 실행을 위한 객체들을 저장한다. 소정의 프로그램이 실행됨과 동시에 자바 가상 머신에 의해 할당된다.
또한, 본 발명에 따른 힙(32)은 실시간 스레드의 실행을 위해 사용자가 설정한 메모리 영역들(321)을 포함한다. 종래의 실시간 자바에 의하면 실시간 스레드를 수행하는 경우에는 힙(13)과는 별도로 메모리 영역(memory area)(14)를 설정하고, 설정된 메모리 영역들에 스레드의 실행에 필요한 객체들을 저장하고, 액세스한다. 그러나, 본 발명에 따르면 실시간 스레드가 실행될 때에도 힙의 외부가 아닌 힙(32)의 내부에 메모리 영역들(321)을 설정하게 된다.
힙(32)의 내부에 메모리 영역들을 설정하고, 설정된 메모리 영역들은 후술하는 가비지 컬렉터(33)를 통해 관리한다. 이는 전술한 허상 참조(dangling reference)를 방지하기 위한 것으로 노멀 스레드의 실행을 위한 객체들과 실시간 스레드의 실행을 위한 객체들을 모두 힙(32)의 내부에 저장하고 가비지 컬렉터를 통해 관리한다.
본 발명에 따른 가비지 컬렉터(33)는 종래의 가비지 컬렉터와 마찬가지로 힙(33)의 내부에 존재하는 객체들에 대하여 가비지 컬렉션을 수행한다. 힙(33)에 저장된 객체들이 사용되고 있는지를 판단하여 사용되지 않는 객체들은 메모리에서 삭제하고 남아있는 객체들을 컴팩션(compaction)한다.
또한, 본 발명에 따른 가비지 컬렉터(33)는 힙(32)에 포함되어 있는 메모리 영역들에 대해서도 가비지 컬렉션을 수행한다. 가비지 컬렉터(33)의 가비지 컬렉션을 수행하는 방법의 자세한 설명은 후술한다.
도 4는 본 발명의 일 실시예에 따른 메모리를 관리하는 방법을 설명하기 위한 흐름도이다.
도 4를 참조하면, 단계 400에서 본 발명에 따른 메모리 관리 장치는 가비지 컬렉션이 실시간 스레드가 실행 완료된 이후에 수행될 수 있도록 스케쥴링한다.
가비지 컬렉션이 아직 수행되지 않고 있다면, 현재 실행 중이거나 실행 예정인 실시간 스레드가 모두 실행 완료된 이후에 가비지 컬렉션이 수행되도록 가비지 컬렉션을 스케쥴링한다. 만약, 가비지 컬렉션이 이미 수행되고 있는 상태에서 실시간 스레드가 실행되려 한다면, 인터럽트를 발생시켜 실시간 스레드를 먼저 실행한 이후에 가비지 컬렉션이 수행되도록 한다.
단계 410에서 본 발명에 따른 메모리 관리 장치는 단계 400에서 설정된 스케쥴에 따라 가비지 컬렉션을 수행한다. 도 5 내지 도 7을 통해 자세히 설명한다.
도 5는 본 발명의 일 실시예에 따른 가비지 컬력션 방법을 설명하기 위한 흐름도이다.
도 5를 참조하면, 단계 500에서 본 발명에 따른 메모리 장치는 소정의 메모리 영역에 포함된 객체들 중에서 사용되지 않는 객체들을 삭제한다. 일반적인 자 바에서 가비지 컬렉션은 힙에 저장된 노멀 스레드의 실행을 위한 객체들에 대해서만 수행된다.
그러나, 본 발명에서는 실시간 스레드의 실행을 위해 할당된 메모리 영역들도 힙 내부에 포함되므로, 힙 내부에 포함되어 있는 메모리 영역들에 대해서도 가비지 컬렉션을 수행한다.
가비지 컬렉션의 수행을 위해 본 발명에 따른 메모리 관리 장치는 우선 메모리 영역에 포함된 객체들 중에서 사용되지 않는 객체들을 메모리 영역에서 삭제한다. 실시간 스레드의 실행을 위해 할당된 메모리 영역들은 프로그래머가 프로그램 작성 시에 그 크기를 지정한다. 만약 프로그래머가 그 크기를 충분하게 지정하지 아니하였다면, 실시간 스레드는 메모리 영역에 더 이상 객체들을 저장할 수 없게 된다. 스레드가 새로이 메모리 영역을 생성하여 객체들을 할당하려면 시간이 지연되므로 사용되지 않는 객체들을 파악하여 삭제함으로써 메모리 영역 내에 객체를 저장할 여분의 공간을 확보한다.
단계 510에서 본 발명에 따른 메모리 관리 장치는 삭제되지 않은 객체들을 메모리 영역 내에서 컴팩션한다. 메모리 영역의 여분을 지시하는 할당 지시자(allocation pointer)는 메모리 영역에 저장된 마지막 객체를 기준으로 설정되므로, 객체들을 메모리 영역의 시작 부분에서부터 빈 공간이 발생하지 않도록 계속해서 저장한다.
도 6a 내지 6 b는 본 발명의 일 실시예에 따른 메모리 영역을 컴팩션하는 방법을 설명하기 위한 블록 다이어그램이다.
도 6a를 참조하면, 스레드 A는 메모리 영역 1을 참조하고 있고, 메모리 영역 1에는 객체 1, 2, 3, 4, 5 등이 포함되어 있다. 이중 객체 2 및 객체 4가 더 이상 사용되지 않는 객체라고 가정한다.
단계 500에서 본 발명에 따른 메모리 관리 장치는 메모리 영역 1에서 사용되지 않는 객체들을 삭제한다. 메모리 영역 1에 포함된 객체들이 다른 객체들에 의해 참조되지 않으면 사용되지 않는 객체들인 것으로 판단하여 해당 객체를 메모리 영역에서 삭제한다. 도 6a에서는 객체 2와 객체 4가 사용되지 않는 객체들이므로, 메모리 영역 1에서 삭제한다.
단계 511 내지 512는 남아있는 객체들을 컴팩션하는 단계(단계 510)이다.
단계 511에서 메모리 관리 장치는 남아있는 객체들을 힙(32)의 내부의 임시 버퍼에 복사한다.
단계 512에서 메모리 관리 장치는 임시 버퍼에 복사된 객체들을 메모리 영역의 시작 부분에서부터 빈 공간이 발생하지 않도록 계속해서 저장한다. 도 6b는 컴팩션이 완료된 시점에서의 메모리 영역 1을 도시한다.
도 7은 본 발명의 또 다른 실시예에 따른 가비지 컬렉션 방법을 설명하기 위한 흐름도이다.
단계 700에서 본 발명에 따른 메모리 관리 장치는 메모리 영역을 참조하고 있는 스레드가 있는지 판단한다.
메모리 영역을 실시간 스레드의 실행을 위해 할당되고, 도 2에 도시된 바와 같이 스택 구조로 스레드에 의해서 순서대로 참조된다. 하나의 메모리 영역을 복 수의 스레드에 의해서 참조될 수 있는데, 실시간 자바에서는 소정의 메모리 영역을 참조하고 있는 스레드의 개수를 자바 가상 머신이 확인할 수 있는 방법을 제공한다. 실시간 자바 상의 스레드 참조 카운터(thread reference counter)가 소정의 메모리 영역을 몇 개의 스레드가 참조하고 있는지를 확인하여, 메모리 영역을 참조하고 있는 스레드 수의 변동이 있는 경우 이를 반영한다.
단계 700에서 판단한 결과 소정의 메모리 영역을 참조하고 있는 스레드가 아직 남아있으면, 메모리 영역을 삭제할 수 없으므로 단계 701 및 702를 거처 메모리 영역에 대하여 가비지 컬렉션을 수행한다. 단계 701은 단계 500과 동일하며, 단계 702는 단계 510과 동일하다.
바람직하게는 메모리 영역을 참조하고 있는 스레드가 수가 하나씩 감소할 때마다, 가비지 컬렉션을 수행하여 사용되지 않는 객체를 즉시 제거한다.
단계 700에서 소정의 메모리 영역을 참조하고 있는 스레드가 없는 것으로 판단되면, 메모리 영역을 삭제하기 위해 단계 710 내지 720을 수행한다.
단계 710에서 본 발명에 따른 메모리 관리 장치는 메모리 영역에 아직 사용되고 있는 객체가 있는지 판단한다. 메모리 영역을 참조하고 있는 스레드가 모두 사라졌다고 해도, 삭제될 메모리 영역에 포함되어 있는 각각의 객체들은 메모리 영역 밖의 다른 객체들에 의해 참조되고 있을 수도 있다. 메모리 영역 밖의 다른 객체들은 노멀 스레드를 위해 힙 내부에 저장된 다른 객체일 수도 있고, 다른 메모리 영역에 포함된 객체일 수도 있다.
실시간 자바의 스레드 참조 카운터(thread reference counter)는 메모리 영 역을 참조하고 있는 스레드의 개수만을 셀 뿐이므로, 메모리 영역에 포함된 객체들이 메모리 영역 밖의 다른 객체들에 참조되고 있는 횟수는 세지 못한다. 따라서, 스레드 참조 카운터가 메모리 영역을 참조하고 있는 스레드가 없음을 가리키고 있어도, 메모리 영역에 포함된 객체들을 메모리 영역 밖의 다른 객체들에 의해 참조되고 있을 수 있다. 따라서, 이를 무시하고 메모리 영역을 삭제하게 되면 참조되고 있는 객체가 없어지게 되므로 허상 참조가 발생하게 된다. 이를 방지하기 위해 단계 711이 수행된다.
단계 711에서 본 발명에 따른 메모리 관리 장치는 아직 사용되고 있는 객체에 대한 참조를 모두 제거하거나 사용되고 있는 객체를 힙 또는 다른 메모리 영역에 복사한다. 허상 참조(dangling reference)는 시스템에 심각한 오류를 발생시킬 수 있으므로, 아직 사용되고 있는 객체와 관련된 참조들을 모두 제거(nullify)하거나, 메모리의 다른 부분에 복사한다. 여기서 메모리의 다른 부분은 다른 메모리 영역이 될 수도 있고, 메모리 영역이 아닌 노멀 스레드를 위해 할당된 힙의 다른 부분일 수도 있다.
바람직하게는 허상 참조가 발생하였음을 프로그래머에게 알리고, 프로그래머에 선택에 따라 참조들을 제거하거나, 객체를 복사한다. 자바에서는 프로그램 실행 중에 에러가 발생할 경우 예외(exception)를 발생시켜 프로그래머에 알리는데, 메모리 영역에 포함된 객체와 관련하여 허상 참조가 발생한 경우에도 예외를 이용하여 프로그래머에게 통지한다.
도 8은 본 발명에 일 실시예에 따른 예외(exception) 처리의 예를 도시한다.
도 8을 참조하면, 전술한 바와 같이 메모리 영역이 삭제될 때에 아직 사용되고 있는 객체가 남아 있으면, 자바 가상 머신을 예외를 발생시키고 도 8에 도시된 방법을 통해 객체와 관련된 참조들을 제거(nullify)한다.
도 8에서 'logic 1' 이라는 스레드의 실행이 모두 끝나고, 'mymemoryarea' 라는 메모리 영역이 삭제될 때 아직 사용되고 있는 객체가 남아 있으면, 'UnclaimedReferenceException'이라는 예외가 발생한다.
예외가 발생하면, 아직 사용되고 있는 객체와 관련된 모든 참조에 대한 정보가 'getUnclaimedReferences'에 의해 얻어지고, 정보가 얻어진 참조들은 모두 제거된다.
도 8에서는 메모리 영역의 삭제 시에 아직 사용되고 있는 객체와 관련된 모든 참조들을 제거하는 방법으로 허상 참조를 방지하였으나, 객체를 메모리의 다른 부분에 복사하여 계속해서 사용하는 방법으로 허상 참조를 방지할 수도 있다.
단계 711에서 아직 사용되고 있는 객체에 대한 처리가 모두 끝나면, 단계 720에서 본 발명에 따른 메모리 관리 장치는 스레드에 의해서 참조되지 않는 메모리 영역을 삭제한다.
이상과 같이 본 발명은 비록 한정된 실시예와 도면에 의해 설명되었으나, 본 발명이 상기의 실시예에 한정되는 것은 아니며, 이는 본 발명이 속하는 분야에서 통상의 지식을 가진 자라면 이러한 기재로부터 다양한 수정 및 변형이 가능하다. 따라서, 본 발명의 사상은 아래에 기재된 특허청구범위에 의해서만 파악되어야 하고, 이와 균등하거나 또는 등가적인 변형 모두는 본 발명 사상의 범주에 속한다 할 것이다. 또한, 본 발명에 따른 시스템은 컴퓨터로 읽을 수 있는 기록매체에 컴퓨터가 읽을 수 있는 코드로서 구현하는 것이 가능하다. 컴퓨터가 읽을 수 있는 기록매체는 컴퓨터 시스템에 의하여 읽혀질 수 있는 데이터가 저장되는 모든 종류의 기록장치를 포함한다. 기록매체의 예로는 ROM, RAM, CD-ROM, 자기 테이프, 플로피 디스크, 광데이터 저장장치 등이 있으며, 또한 캐리어 웨이브(예를 들어 인터넷을 통한 전송)의 형태로 구현되는 것도 포함한다. 또한 컴퓨터가 읽을 수 있는 기록매체는 네트워크로 연결된 컴퓨터 시스템에 분산되어 분산방식으로 컴퓨터가 읽을 수 있는 코드가 저장되고 실행될 수 있다.
본 발명에 따르면, 실시간 스레드(real-time thread)의 실행이 완료된 이후에 가비지 컬렉션이 수행되도록 함으로써, 실시간 스레드의 실행이 가비지 컬렉션에 의해 지연되지 않아 실시간 스레드의 실행을 보장할 수 있다.
또한, 실시간 스레드를 실행하기 위해 할당된 메모리 영역(memory area)을 힙 안에서 관리함으로써 허상 참조(dangling reference)를 방지할 수 있어 스레드 실행의 안전성을 보장할 수 있게 된다.
Claims (14)
- 메모리를 관리하는 방법에 있어서,상기 메모리 상의 소정의 힙(heap)에 대하여 수행 중 또는 수행 예정인 가비지 컬렉션(garbage collection)이 실시간 스레드(real-time thread)가 실행 완료된 이후에 수행될 수 있도록 스케쥴링하는 단계; 및상기 스케쥴에 따라 상기 소정의 힙에 대하여 가비지 컬렉션을 수행하는 단계를 포함하는 것을 특징으로 하는 메모리 관리 방법.
- 제 1 항에 있어서, 상기 가비지 컬렉션을 수행하는 단계는실시간 자바(real-time specification for java)에 의한 가비지 컬렉션을 수행하는 단계를 포함하는 것을 특징으로 하는 메모리 관리 방법.
- 제 1 항에 있어서, 상기 소정의 힙은상기 실시간 스레드의 실행을 위한 객체들이 포함되어 있는 메모리 영역(memory area)을 포함하는 것을 특징으로 하는 메모리 관리 방법.
- 제 3 항에 있어서, 상기 가비지 컬렉션을 수행하는 단계는상기 힙에 포함되어 있는 상기 메모리 영역에 대하여 가비지 컬렉션을 수행하는 단계를 포함하는 것을 특징으로 하는 메모리 관리 방법.
- 제 4 항에 있어서, 상기 가비지 컬렉션을 수행하는 단계는상기 메모리 영역에 포함되어 있는 객체들 중에서 사용되지 않는 객체들을 삭제하는 단계; 및상기 삭제하는 단계에서 삭제되지 않은 객체들을 상기 메모리 영역 내에서 컴팩션(compaction)하는 단계를 포함하는 것을 특징으로 하는 메모리 관리 방법.
- 제 4 항에 있어서, 상기 가비지 컬렉션을 수행하는 단계는상기 메모리 영역을 참조하고 있는 스레드가 있는지 판단하는 단계; 및상기 판단 결과에 따라 선택적으로 상기 메모리 영역을 삭제하는 단계를 포함하는 것을 특징으로 하는 메모리 관리 방법.
- 제 6 항에 있어서, 상기 메모리 영역을 삭제하는 단계는상기 메모리 영역을 참조하고 있는 스레드가 없는 경우 상기 메모리 영역에 아직 사용되고 있는 객체가 있는지 판단하는 단계;상기 사용되고 있는 객체에 대한 참조들을 제거하거나, 상기 사용되고 있는 객체를 힙 또는 다른 메모리 영역에 복사하는 단계; 및상기 메모리 영역을 삭제하는 단계를 포함하는 것을 특징으로 하는 메모리 관리 방법.
- 메모리를 관리하는 장치에 있어서,상기 메모리 상의 소정의 힙(heap)에 대하여 수행 중 또는 수행 예정인 가비지 컬렉션(garbage collection)이 실시간 스레드(real-time thread)가 실행 완료된 이후에 수행될 수 있도록 스케쥴링하는 스케쥴러; 및상기 스케쥴에 따라 상기 소정의 힙에 대하여 가비지 컬렉션을 수행하는 가비지 컬렉터를 포함하는 것을 특징으로 하는 메모리 관리 장치.
- 제 8 항에 있어서, 상기 가비지 컬렉터는실시간 자바(real-time specification for java)에 의한 가비지 컬렉션을 수행하는 것을 특징으로 하는 메모리 관리 장치.
- 제 8 항에 있어서, 상기 소정의 힙은상기 실시간 스레드의 실행을 위한 객체들이 포함되어 있는 메모리 영역(memory area)을 포함하는 것을 특징으로 하는 메모리 관리 장치.
- 제 10 항에 있어서, 상기 가비지 컬렉터는상기 힙에 포함되어 있는 상기 메모리 영역에 대하여 가비지 컬렉션을 수행하는 것을 특징으로 하는 메모리 관리 장치.
- 제 11 항에 있어서, 상기 가비지 컬렉터는상기 메모리 영역에 포함되어 있는 객체들 중에서 사용되지 않는 객체들을 삭제하고, 삭제되지 않은 객체들을 상기 메모리 영역 내에서 컴팩션(compaction)하는 것을 특징으로 하는 메모리 관리 장치.
- 제 11 항에 있어서, 상기 가비지 컬렉터는상기 메모리 영역을 참조하고 있는 스레드가 있는지 판단하고, 판단 결과에 따라 선택적으로 상기 메모리 영역을 삭제하는 것을 특징으로 하는 메모리 관리 장치.
- 제 1 항 내지 제 7 항 중 어느 한 항의 방법을 컴퓨터에서 실행시키기 위한 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록매체.
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020060105271A KR100846499B1 (ko) | 2006-10-27 | 2006-10-27 | 메모리를 관리하는 방법 및 장치 |
US11/729,868 US20070192388A1 (en) | 2006-01-27 | 2007-03-30 | Method of and apparatus for managing memory |
CNA2007101077161A CN101169739A (zh) | 2006-10-27 | 2007-04-28 | 管理内存的方法和设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020060105271A KR100846499B1 (ko) | 2006-10-27 | 2006-10-27 | 메모리를 관리하는 방법 및 장치 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20080037948A true KR20080037948A (ko) | 2008-05-02 |
KR100846499B1 KR100846499B1 (ko) | 2008-07-17 |
Family
ID=38370013
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020060105271A KR100846499B1 (ko) | 2006-01-27 | 2006-10-27 | 메모리를 관리하는 방법 및 장치 |
Country Status (3)
Country | Link |
---|---|
US (1) | US20070192388A1 (ko) |
KR (1) | KR100846499B1 (ko) |
CN (1) | CN101169739A (ko) |
Families Citing this family (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090228537A1 (en) * | 2008-03-07 | 2009-09-10 | Branda Steven J | Object Allocation System and Method |
DE102008036479A1 (de) * | 2008-08-05 | 2010-02-11 | Giesecke & Devrient Gmbh | Speicherverwaltung in einem portablen Datenträger |
US8429658B2 (en) * | 2008-10-16 | 2013-04-23 | International Business Machines Corporation | Lock deferral for real-time garbage collection |
US8205203B2 (en) * | 2008-10-16 | 2012-06-19 | International Business Machines Corporation | Scheduling for real-time garbage collection |
US20100293206A1 (en) * | 2009-05-12 | 2010-11-18 | Tatu Ylonen Oy Ltd | Clustering related objects during garbage collection |
JP5687096B2 (ja) * | 2011-03-04 | 2015-03-18 | 三菱電機株式会社 | メモリ保守装置及びメモリ保守方法並びにデータ転送装置 |
WO2012129637A2 (en) * | 2011-03-30 | 2012-10-04 | Irdeto Canada Corporation | Method of securing memory against malicious attack |
US10437720B2 (en) * | 2014-03-12 | 2019-10-08 | Optumsoft, Inc. | Deferred destruction for efficient resource reclamation |
CN105279097B (zh) * | 2014-07-07 | 2019-06-18 | 北京数码视讯科技股份有限公司 | 一种调用瞬态对象的管理方法、设备及智能卡 |
US11294588B1 (en) * | 2015-08-24 | 2022-04-05 | Pure Storage, Inc. | Placing data within a storage device |
EP4283473A4 (en) | 2021-08-02 | 2024-09-04 | Samsung Electronics Co Ltd | APPARATUS AND METHOD FOR REDUCING MEMORY CLEANING OPERATIONS |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5692193A (en) * | 1994-03-31 | 1997-11-25 | Nec Research Institute, Inc. | Software architecture for control of highly parallel computer systems |
US6341293B1 (en) * | 1994-07-13 | 2002-01-22 | Object Technology Licensing Corp | Real-time computer “garbage collector” |
JP3027845B2 (ja) * | 1997-11-21 | 2000-04-04 | オムロン株式会社 | プログラム制御装置および方法 |
GB0013132D0 (en) * | 2000-05-31 | 2000-07-19 | Ibm | Virtual machine with reiitialisation |
US7296257B1 (en) * | 2002-08-01 | 2007-11-13 | Tymesys Corporation | Techniques for exception handling by rewriting dispatch table elements |
US20050149588A1 (en) * | 2004-01-05 | 2005-07-07 | International Business Machines Corporation | Method and apparatus for optimizing away a null-check |
US7496897B1 (en) * | 2004-03-17 | 2009-02-24 | Timesys Corporation | Multiple code sets for multiple execution contexts |
US7587721B2 (en) * | 2004-05-20 | 2009-09-08 | Sap Ag | Sharing objects in runtime systems |
-
2006
- 2006-10-27 KR KR1020060105271A patent/KR100846499B1/ko not_active IP Right Cessation
-
2007
- 2007-03-30 US US11/729,868 patent/US20070192388A1/en not_active Abandoned
- 2007-04-28 CN CNA2007101077161A patent/CN101169739A/zh active Pending
Also Published As
Publication number | Publication date |
---|---|
KR100846499B1 (ko) | 2008-07-17 |
CN101169739A (zh) | 2008-04-30 |
US20070192388A1 (en) | 2007-08-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR100846499B1 (ko) | 메모리를 관리하는 방법 및 장치 | |
JP3027845B2 (ja) | プログラム制御装置および方法 | |
US7111294B2 (en) | Thread-specific heaps | |
US7707232B2 (en) | Implementation for collecting unmanaged memory | |
US6304880B1 (en) | Automated reclamation scheduling override in a virtual tape server | |
KR100686418B1 (ko) | 멀티-스레드 가상머신에서 메모리 할당방법 및 그 장치 | |
US7962707B2 (en) | Apparatus and method for deterministic garbage collection of a heap memory | |
US5835958A (en) | Method and apparatus for dynamically sizing non-contiguous runtime stacks | |
Bacon et al. | The Metronome: A simpler approach to garbage collection in real-time systems | |
US11232026B2 (en) | Deferred destruction for efficient resource reclamation | |
US11132294B2 (en) | Real-time replicating garbage collection | |
US6493730B1 (en) | Efficient object faulting with generational garbage collection | |
EP3577567B1 (en) | Multiple stage garbage collector | |
US8397045B2 (en) | Memory management device, memory management method, and memory management program | |
TW201301029A (zh) | 具有增強型應用程式元資料之記憶體管理器 | |
US6427154B1 (en) | Method of delaying space allocation for parallel copying garbage collection | |
US20010025295A1 (en) | Computer system, memory management method, storage medium and program transmission apparatus | |
CN112219196B (zh) | 表示用于无暂停垃圾收集的激活帧的方法和装置 | |
US11221947B2 (en) | Concurrent garbage collection with minimal graph traversal | |
US7870171B2 (en) | Method and system for garbage collection in a multitasking environment | |
JP2000099351A (ja) | プログラム制御装置とメモリ割当装置および方法 | |
US9218275B2 (en) | Memory management control system, memory management control method, and storage medium storing memory management control program | |
US7769976B2 (en) | Identifying code that wastes virtual memory | |
US7853628B1 (en) | Selective promotion policy for generational garbage collectors | |
CN116069526B (zh) | 一种基于无锁消息池的数据存取方法和计算机设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
E902 | Notification of reason for refusal | ||
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant | ||
FPAY | Annual fee payment |
Payment date: 20130627 Year of fee payment: 6 |
|
FPAY | Annual fee payment |
Payment date: 20140627 Year of fee payment: 7 |
|
FPAY | Annual fee payment |
Payment date: 20150629 Year of fee payment: 8 |
|
FPAY | Annual fee payment |
Payment date: 20160629 Year of fee payment: 9 |
|
FPAY | Annual fee payment |
Payment date: 20170629 Year of fee payment: 10 |
|
LAPS | Lapse due to unpaid annual fee |