SE514318C2 - Förfarande för att effektivisera en databehandlingsprocess vid användning av en virtuell maskin och där ett skräpsamlingsförfarande används - Google Patents
Förfarande för att effektivisera en databehandlingsprocess vid användning av en virtuell maskin och där ett skräpsamlingsförfarande användsInfo
- Publication number
- SE514318C2 SE514318C2 SE9903890A SE9903890A SE514318C2 SE 514318 C2 SE514318 C2 SE 514318C2 SE 9903890 A SE9903890 A SE 9903890A SE 9903890 A SE9903890 A SE 9903890A SE 514318 C2 SE514318 C2 SE 514318C2
- Authority
- SE
- Sweden
- Prior art keywords
- methods
- regenerated
- program
- garbage collection
- threads
- Prior art date
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10—TECHNICAL SUBJECTS COVERED BY FORMER USPC
- Y10S—TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10S707/00—Data processing: database and file management or data structures
- Y10S707/99951—File or database maintenance
- Y10S707/99956—File allocation
- Y10S707/99957—Garbage collection
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System (AREA)
- Processing Of Solid Wastes (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Devices For Executing Special Programs (AREA)
- Electrotherapy Devices (AREA)
- Debugging And Monitoring (AREA)
- Stored Programmes (AREA)
- Programmable Controllers (AREA)
Description
30 514 318 Java innefattar också metoder för s.k. tràdhantering (Thread- Management). Detta innebär att Java har ett inbyggt system för att stödja eller simulera att två eller flera program processas samtidigt. Tràdhanteringen kan uppdelas i tvâ de- lar. En del avser hur olika trådar struktureras på ett kon- trollerat sàtt. En andra del avser vilka trädar som skall köras och vilka trådar som skall vara passiva och vänta på att köras.
För att ytterligare öka effektiviteten och ställa upptaget minnesutrymme till förfogande för programmet är det inte tillräckligt att bara optimera minnet med avseende pä objek- ten.
Föreliggande uppfinning löser detta problem.
Föreliggande uppfinning hänför sig således till ett förfaran- de för att effektivisera en databehandlingsprocess vid an- vändning av en virtuell maskin (Virtual Machine), där pro- grammet innefattar en mängd metoder, d.v.s. programavsnitt, som är lagrade i den använda datorns minne och där ett skräp- samlingsförfarande (Garbage Collecting) används av program- met, och utmärkes av, att i ett första steg alla s.k. trådars (Threads) stackar (Stacks) analyseras med avseende pà vilka metoder de behöver, att i ett andra steg var och en av de behövda metoderna bringas att regenereras där förekommande pekare (References) till en metod före regenereringen ersätts med pekare till regenererade metoder, av att i ett tredje steg alla icke regenererade metoder utraderas varvid motsva- rande minnesutrymme ställs till programmets förfogande. 15 20 25 30 514 318 Nedan beskrives föreliggande uppfinning närmare, delvis i samband med ett på bifogade ritning visat utföringsexempel av uppfinningen, där - figur 1 visar ett blockschema - figur 2 visar gamla metoder - figur 3 visar enligt uppfinningen regenererade metoder.
I figur 1 illustreras att en Java virtuell maskin JVM kan användas för att köra olika dataprogram 1, 2, 3 oavsett om operativsystemet år WinNT, LINUX, Solaris eller något annat system. Även om Java är ett mycket använt programspråk är, som nämnts ovan, föreliggande uppfinning inte begränsad till detta språk, utan uppfinningen kan tillämpas på allehanda objektorienterade och plattformsoberoende motsvarande pro- gramspråk.
Föreliggande uppfinning avser således ett förfarande för att effektivisera en databehandlingsprocess vid användning av en virtuell maskin (Virtual Machine), där programmet innefattar en mängd metoder, d.v.s. programavsnitt, som är lagrade i den använda datorns minne och där ett skräpsamlingsförfarande (Garbage Collecting) används av programmet.
Det år tidigare känt att skräpsamla objekt och därvid utrade- ra objekt som inte längre är aktuell för att därigenom ställa motsvarande minneskapacitet till förfogande.
I stora system används många metoder, d.v.s. programavsnitt, en eller ett fåtal gånger, eller så används metoder under en kort tidsperiod varefter de lämnas oanvända.
Var- Med Java och motsvarande program laddas nya metoder in, vid gamla metoder lämnas oanvända. 10 15 20 25 30 514 318 Dessutom leder adaptiv optimering till optimeringar och omop- timeringar av metoder som läggs in i minnet, och där gamla metoder lämnas oanvända.
När optimeringar av typen utvâljande av làsmekanismer (Lock Mechanism Selection) och utväljande av skräpsamlingsförfaran- de (Garbage Collection Selection) sker måste alla använda metoder som använder gamla mekanismer ersättas med nya meka- nismer.
Enligt uppfinningen bringas i ett första steg alla s.k. trå- dars (Threads) stackar (Stacks) att analyseras med avseende pà vilka metoder de behöver. I ett andra steg bringas var och en av de behövda metoderna att regenereras där förekommande pekare (References) till en metod före regenereringen ersätts med pekare till regenererade metoder. I ett tredje steg bringas alla icke regenererade metoder utraderas varvid mot- svarande minnesutrymme ställs till programmets förfogande.
Genom detta förfarande sker inte endast en utrensning av icke använda metoder, utan dessutom en omorganisation mellan de metoder som regenererats sä att metodernas pekare riktas direkt mot en regenererad metod istället för att gä via en gammal icke längre använd metod.
I figurerna 2 och 3 illustreras detta, där figur 2 visar gamla metoder och där figur 3 visar använda regenererade metoder. I figur 2 visas tre metoder foo, apa och bar. Foo startar på minnesadressen 4711. Apa startar pà adressen 4714 och bar på adressen 4720. 15 20 25 30 514 318 Analys av trådstackarna (Thread's stacks) visar att bara metoderna foo och bar används, därför att foo och bar inte pekar mot metoden apa.
Metoderna foo och bar regenereras till de metoder som finns angivna i figur 3. Härvid àterskapas metoderna foo och bar exakt men med den skillnaden att metoderna fär nya adresser och att därvid pekaren i foo till bar pekar pä bar's nya adress 4903.
Alla gamla metoder, d.v.s. metoderna i figur 2, utraderas, varvid de av dessa upptagna minnesutrymmena friställs för nyanvändning.
När skräpsamling av objekt sker stannas normalt programkör- ningen medan skräpsamling sker. Efter skräpsamlingen och raderandet av objekt som inte används âterstartas programkör- ningen.
Ett sådant förfarande är möjligt att använda när föreliggande uppfinning används.
Emellertid är det mycket föredraget att använda följande förfarande istället.
Vid förfarande enligt uppfinningen bringas under det att pro- grammet körs en tràd i taget att stoppas, varvid använda me- toder för en stoppad tråd överföres i en lista varefter trå- den àterstartas. Därefter regenereras metoderna i listan och lagras. Alla trådar bringas senare att stoppas samtidigt ef- ter det att alla trådar behandlats pà nämnt sätt, nämligen så att ifrågavarande träds alla använda metoder regenererats. 10 15 20 25 30 -514 318 Alla metoder som inte regenererats utraderas och alla tràdar återstartas med de regenererade metoderna.
Genom detta förfarande behöver inte programkörandet stoppas, utan regenereringen sker intermittent.
I Java och motsvarande språk används lásmekanismer, som ovan nämnts. Olika låsmekanismer kan utvâljas. Det väsentliga är att välja den låsmekanism som år mest effektiv för att för- hindra att mer än en tråd har tillgång till ett visst objekt samtidigt med en annan träd.
När flera trådar önskar tillgång till samma objekt eller källa föreligger ett synkroniseringsproblem. För att lösa detta i Java försöker varje träd att nå låset för en källa.
Mekanismen som används för att låsa källan kan användas på olika sätt. Beroende på hur tràdar försöker få tillgång till synkroniserade källor är olika låsmekanismer effektivast.
Enligt ett föredraget utförande när lásmekanismer (Locking Mechanisms) används, bringas i ett steg före nämnda första steg de mest effektiva låsmekanismerna att identifieras och av att de metoder som använder en sålunda identifierad låsme- kanism regenereras.
Vad gäller skràpsamlingsalgoritmer behöver också dessa selek- teras. Många objektorienterade språk använder skräpsamling.
Detta betyder att programmeraren inte explicit behöver in- struera systemet att ett visst objekt inte längre behövs.
Systemet är ansvarigt för att detektera detta och àterkräver den minnesdel som ockupera av objektet. Ett antal olika algo- ritmer har föreslagits för att göra denna detektion och detta äterkrävande effektivt. Det har visat sig att olika algorit- 10 15 514 318 mer är bäst för olika applikationer. Att välja den bästa skräpsamlingsalgoritmen för den programapplikation som körs har stor betydelse för att uppnå maximal exekveringshastighet för programmet ifråga.
Enligt en ytterligare föredragen utföringsform av uppfinning- en bringas när olika skräpsamlingsalgoritmer används, i ett steg före nämnda första steg de olika objektens allokering och livslängd att mätas varefter den mest effektiva skräpsam- lingsalgoritmen bringas att identifieras, och metoderna utgö- rande de erforderliga skräpsamlingsalgoritmerna regenereras, varefter övriga skräpsamlingsalgoritmer utraderas.
Genom att utnyttja även de föredragna utföringsformerna er- hàlls ett mycket effektivt sätt för optimering av kod, trådar och minneshantering, där det generiska är att metoder identi- fieras och regenereras för att därigenom inte belasta syste- met med icke använda metoder.
Claims (4)
1. Förfarande för att effektivisera en databehandlingspro- cess vid användning av en virtuell maskin (Virtual Machine), där programmet innefattar en mängd metoder, d.v.s. programav- snitt, som är lagrade i den använda datorns minne och där ett skråpsamlingsförfarande (Garbage Collecting) används av pro- grammet, k å n n e t e c k n a t a v, att i ett första steg alla s.k. trådars (Threads) stackar (Stacks) analyseras med avseende på vilka metoder de behöver, att i ett andra steg var och en av de behövda metoderna bringas att regenereras där förekommande pekare (References) till en metod före rege- nereringen ersätts med pekare till regenererade metoder, av att i ett tredje steg alla icke regenererade metoder utrade- ras varvid motsvarande minnesutrymme ställs till programmets förfogande. k ä n n e t e c k n a t a v,
2. Förfarande enligt krav 1, att under det att programmet körs bringas en tråd i taget, att stoppas, av att använda metoder för en stoppad tråd över- föres i en lista varefter träden återstartas, av att metoder- na i listan regenereras och lagras, av att alla trådar bring- as att stoppas samtidigt efter det att alla trådar behandlats på nämnt sätt, av att alla metoder som inte regenererats utraderas och av att alla trådar àterstartas med de regenere- rade metoderna.
3. Förfarande enligt krav 1 eller 2, k ä n n e t e c k n a t a v, att när låsmekanismer (Locking Mechanisms) används, bringas i ett steg före nämnda första steg de mest effektiva làsmekanismerna att identifieras och av att de metoder som använder en sålunda identifierad låsmekanism regenereras. 514 318
4. Förfarande enligt krav 1, 2 eller 3, k ä n n e t e c k - n a t a v, att när olika skrâpsamlingsalgoritmer används, bringas, i ett steg före nämnda första steg de olika objek- tens allokering och livslängd att mätas varefter den mest effektiva skräpsamlingsalgoritmen bringas att identifieras, av att metoderna utgörande de erforderliga skrâpsamlingsalgo~ ritmerna regenereras och av att övriga skräpsamlingsalgorit- mer utraderas.
Priority Applications (13)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| SE9903890A SE9903890L (sv) | 1999-10-28 | 1999-10-28 | Förfarande för att effektivisera en databehandlingsprocess vid användning av en virtuell maskin och där ett skräpsamlingsförfarande används |
| DE60039628T DE60039628D1 (de) | 1999-10-28 | 2000-10-27 | Verfahren zur freispeichersammlung von unbenutzter verfahren |
| CNB008164169A CN100382047C (zh) | 1999-10-28 | 2000-10-27 | 把无用方法收集到垃圾箱中的方法和系统 |
| CA002389168A CA2389168C (en) | 1999-10-28 | 2000-10-27 | A method for garbage collection of unused methods |
| PCT/SE2000/002096 WO2001031455A1 (en) | 1999-10-28 | 2000-10-27 | A method for garbage collection of unused methods |
| JP2001533523A JP4150518B2 (ja) | 1999-10-28 | 2000-10-27 | 未使用のプログラムセクションの不要データを収集するための方法 |
| US10/111,566 US7194494B1 (en) | 1999-10-28 | 2000-10-27 | Method for garbage collection of unused methods |
| KR1020027005468A KR20020070270A (ko) | 1999-10-28 | 2000-10-27 | 미사용된 방식들의 쓰레기 수집을 위한 방법 |
| AU15632/01A AU768181B2 (en) | 1999-10-28 | 2000-10-27 | A method for garbage collection of unused methods |
| AT00978146T ATE402443T1 (de) | 1999-10-28 | 2000-10-27 | Verfahren zur freispeichersammlung von unbenutzter verfahren |
| EP00978146A EP1240589B1 (en) | 1999-10-28 | 2000-10-27 | A method for garbage collection of unused methods |
| US11/187,529 US7650370B2 (en) | 1999-10-28 | 2005-07-22 | System and method for regeneration of methods and garbage collection of unused methods |
| US11/586,192 US20070073794A1 (en) | 1999-10-28 | 2006-10-25 | Method for garbage collection of unused methods |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| SE9903890A SE9903890L (sv) | 1999-10-28 | 1999-10-28 | Förfarande för att effektivisera en databehandlingsprocess vid användning av en virtuell maskin och där ett skräpsamlingsförfarande används |
Publications (3)
| Publication Number | Publication Date |
|---|---|
| SE9903890D0 SE9903890D0 (sv) | 1999-10-28 |
| SE514318C2 true SE514318C2 (sv) | 2001-02-12 |
| SE9903890L SE9903890L (sv) | 2001-02-12 |
Family
ID=20417516
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| SE9903890A SE9903890L (sv) | 1999-10-28 | 1999-10-28 | Förfarande för att effektivisera en databehandlingsprocess vid användning av en virtuell maskin och där ett skräpsamlingsförfarande används |
Country Status (11)
| Country | Link |
|---|---|
| US (2) | US7194494B1 (sv) |
| EP (1) | EP1240589B1 (sv) |
| JP (1) | JP4150518B2 (sv) |
| KR (1) | KR20020070270A (sv) |
| CN (1) | CN100382047C (sv) |
| AT (1) | ATE402443T1 (sv) |
| AU (1) | AU768181B2 (sv) |
| CA (1) | CA2389168C (sv) |
| DE (1) | DE60039628D1 (sv) |
| SE (1) | SE9903890L (sv) |
| WO (1) | WO2001031455A1 (sv) |
Families Citing this family (7)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JP2005018425A (ja) * | 2003-06-26 | 2005-01-20 | Matsushita Electric Ind Co Ltd | プログラム変換方法、プログラムおよび記憶媒体 |
| WO2005001695A1 (ja) * | 2003-06-30 | 2005-01-06 | Matsushita Electric Industrial Co., Ltd. | ガーベジコレクションシステム |
| EP1622009A1 (en) * | 2004-07-27 | 2006-02-01 | Texas Instruments Incorporated | JSM architecture and systems |
| DE102007026693A1 (de) | 2007-06-08 | 2008-12-11 | Robert Bosch Gmbh | Verfahren und Vorrichtung zum Umorganisieren von Daten in einem Speichersystem, insbesondere für Steuergeräte in Kraftfahrzeugen |
| CA2700217C (en) * | 2010-04-01 | 2011-07-19 | Ibm Canada Limited - Ibm Canada Limitee | Write barrier elision for reference arrays |
| US10606614B2 (en) * | 2016-07-31 | 2020-03-31 | Oracle International Corporation | Container-based language runtime using a variable-sized container for an isolated method |
| CN114265670B (zh) * | 2022-03-02 | 2022-09-23 | 阿里云计算有限公司 | 一种内存块整理方法、介质及计算设备 |
Family Cites Families (12)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US4797810A (en) * | 1986-06-26 | 1989-01-10 | Texas Instruments Incorporated | Incremental, multi-area, generational, copying garbage collector for use in a virtual address space |
| US5088036A (en) * | 1989-01-17 | 1992-02-11 | Digital Equipment Corporation | Real time, concurrent garbage collection system and method |
| US5293614A (en) * | 1991-04-08 | 1994-03-08 | Texas Instruments Incorporated | System and method for hard real-time garbage collection requiring a write barrier but no read barrier |
| US5355483A (en) * | 1991-07-18 | 1994-10-11 | Next Computers | Asynchronous garbage collection |
| JP3628032B2 (ja) * | 1992-06-15 | 2005-03-09 | マイクロソフト コーポレーション | コンサーバティブ・スタックとジェネレイショナル・ヒープガーベージ・コレクション用コンピュータシステム及び方法 |
| US5692193A (en) * | 1994-03-31 | 1997-11-25 | Nec Research Institute, Inc. | Software architecture for control of highly parallel computer systems |
| US6463581B1 (en) * | 1996-10-03 | 2002-10-08 | International Business Machines Corporation | Method for determining reachable methods in object-oriented applications that use class libraries |
| US6041179A (en) * | 1996-10-03 | 2000-03-21 | International Business Machines Corporation | Object oriented dispatch optimization |
| US5915255A (en) * | 1997-04-23 | 1999-06-22 | Sun Microsystems, Inc. | Method and apparatus for referencing nodes using links |
| US5873105A (en) * | 1997-06-26 | 1999-02-16 | Sun Microsystems, Inc. | Bounded-pause time garbage collection system and method including write barrier associated with a source instance of a partially relocated object |
| WO1999032978A1 (en) * | 1997-12-19 | 1999-07-01 | Microsoft Corporation | Incremental garbage collection |
| US6654951B1 (en) * | 1998-12-14 | 2003-11-25 | International Business Machines Corporation | Removal of unreachable methods in object-oriented applications based on program interface analysis |
-
1999
- 1999-10-28 SE SE9903890A patent/SE9903890L/sv not_active IP Right Cessation
-
2000
- 2000-10-27 CN CNB008164169A patent/CN100382047C/zh not_active Expired - Lifetime
- 2000-10-27 AT AT00978146T patent/ATE402443T1/de not_active IP Right Cessation
- 2000-10-27 EP EP00978146A patent/EP1240589B1/en not_active Expired - Lifetime
- 2000-10-27 AU AU15632/01A patent/AU768181B2/en not_active Expired
- 2000-10-27 WO PCT/SE2000/002096 patent/WO2001031455A1/en not_active Ceased
- 2000-10-27 JP JP2001533523A patent/JP4150518B2/ja not_active Expired - Lifetime
- 2000-10-27 KR KR1020027005468A patent/KR20020070270A/ko not_active Ceased
- 2000-10-27 DE DE60039628T patent/DE60039628D1/de not_active Expired - Lifetime
- 2000-10-27 CA CA002389168A patent/CA2389168C/en not_active Expired - Lifetime
- 2000-10-27 US US10/111,566 patent/US7194494B1/en not_active Expired - Lifetime
-
2006
- 2006-10-25 US US11/586,192 patent/US20070073794A1/en not_active Abandoned
Also Published As
| Publication number | Publication date |
|---|---|
| US20070073794A1 (en) | 2007-03-29 |
| JP4150518B2 (ja) | 2008-09-17 |
| EP1240589A1 (en) | 2002-09-18 |
| KR20020070270A (ko) | 2002-09-05 |
| CN1402847A (zh) | 2003-03-12 |
| JP2003513356A (ja) | 2003-04-08 |
| US7194494B1 (en) | 2007-03-20 |
| CA2389168A1 (en) | 2001-05-03 |
| CA2389168C (en) | 2009-10-06 |
| AU1563201A (en) | 2001-05-08 |
| WO2001031455A1 (en) | 2001-05-03 |
| SE9903890L (sv) | 2001-02-12 |
| ATE402443T1 (de) | 2008-08-15 |
| EP1240589B1 (en) | 2008-07-23 |
| DE60039628D1 (de) | 2008-09-04 |
| AU768181B2 (en) | 2003-12-04 |
| SE9903890D0 (sv) | 1999-10-28 |
| CN100382047C (zh) | 2008-04-16 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| EP0938706B1 (en) | Data processor with localised memory reclamation | |
| EP1080411B1 (en) | Memory reclamation method | |
| US6226653B1 (en) | Method and apparatus for performing generational garbage collection using remembered set counter | |
| US6571260B1 (en) | Memory reclamation method | |
| US6862674B2 (en) | Methods and apparatus for performing a memory management technique | |
| US6526422B1 (en) | Striding-type generation scanning for parallel garbage collection | |
| JP5868429B2 (ja) | 領域に基づくガベージ・コレクタを用いてクラスを漸進的にアンロードするための方法、コンピュータ・プログラム製品、および装置 | |
| US6314436B1 (en) | Space-limited marking structure for tracing garbage collectors | |
| US6826583B1 (en) | Local allocation buffers for parallel garbage collection | |
| US6557091B2 (en) | Data processor with localized memory reclamation | |
| JPH10254756A (ja) | リファレンスされたオブジェクトを管理するための3状態リファレンスの使用 | |
| WO2001013239A1 (en) | Reduced-cost remembered-set processing in a train-algorithm-based garbage collector | |
| US6470361B1 (en) | Method and apparatus for performing generational garbage collection using middle-aged objects | |
| GB2406933A (en) | Autonomic memory leak detection and remediation | |
| EP1038211B1 (en) | Dynamic memory space allocation | |
| US7472144B2 (en) | Method and system for resolving memory leaks and releasing obsolete resources from user session data | |
| US6820183B2 (en) | Methods, systems, and computer program products for memory pool management using variable size sub-pools | |
| US7620943B1 (en) | Using class properties to segregate objects in a generation managed by the train algorithm | |
| SE514318C2 (sv) | Förfarande för att effektivisera en databehandlingsprocess vid användning av en virtuell maskin och där ett skräpsamlingsförfarande används | |
| US7062518B2 (en) | Efficiently supporting the existence of long trains in a generation managed by the train algorithm | |
| US8176286B2 (en) | Memory recycling in computer systems | |
| US7617264B1 (en) | Parallel remembered-set processing respecting popular-object detection | |
| KR101885030B1 (ko) | 하이브리드 트랜잭셔널 메모리 시스템에서의 트랜잭션 처리 방법 및 트랜잭션 처리 장치 | |
| JP2989608B2 (ja) | セルプール管理装置 | |
| Nawrocki et al. | A storage allocation method with invalidating dangling references |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| NUG | Patent has lapsed |