50 research outputs found

    AMIDA : a Sequence Diagram Extraction Toolkit Supporting Automatic Phase Detection

    Full text link
    ICSE Companion '08: Companion of the 30th international conference on Software engineeringLeipzig, GermanyMay 10 - 18, 200

    Real-time garbage collection for list processing using restructured cells for increased reference counter size

    Get PDF
    In a list processing system, small reference counters are maintained in conjunction with memory cells for the purpose of identifying memory cells that become available for re-use. The counters are updated as references to the cells are created and destroyed, and when a counter of a cell is decremented to logical zero the cell is immediately returned to a list of free cells. In those cases where a counter must be incremented beyond the maximum value that can be represented in a small counter, the cell is restructured so that the additional reference count can be represented. The restructuring involves allocating an additional cell, distributing counter, tag, and pointer information among the two cells, and linking both cells appropriately into the existing list structure

    Oil and Water? High Performance Garbage Collection in Java with MMTk

    Get PDF
    Increasingly popular languages such as Java and C # require efficient garbage collection. This paper presents the design, implementation, and evaluation of MMTk, a Memory Management Toolkit for and in Java. MMTk is an efficient, composable, extensible, and portable framework for building garbage collectors. MMTk uses design patterns and compiler cooperation to combine modularity and efficiency. The resulting system is more robust, easier to maintain, and has fewer defects than monolithic collectors. Experimental comparisons with monolithic Java and C implementations reveal MMTk has significant performance advantages as well. Performance critical system software typically uses monolithic C at the expense of flexibility. Our results refute common wisdom that only this approach attains efficiency, and suggest that performance critical software can embrace modular design and high-level languages.

    코드 공유를 통한 V8 자바스크립트 엔진 메모리 절감

    Get PDF
    학위논문 (석사)-- 서울대학교 대학원 : 전기·컴퓨터공학부, 2016. 8. 이재진.최근 자바스크립트 엔진은 인터프리팅 방식이 아닌 JIT(Just-In-Time) 컴파일 방식으로 기계어 코드를 생성하여 프로그램을 실행한다. 이 때 생성되는 기계어 코드는 하나의 엔진(프로세스)에서만 사용이 되고 더 이상 필요 없어지는 경우 GC(Garbage Collector)에 의해 지워진다. 여러 개의 엔진(프로세스)이 실행되는 경우, 예를 들어 Chrome 브라우저에서 여러 개의 탭을 생성하여 여러 개의 V8 자바스크립트 엔진이 실행되는 경우, 같은 자바스크립트 코드가 있다면, 같은 기계어 코드가 각각의 프로세스마다 생성되며, 각자의 메모리 공간에 할당된다. 동일한 내용을 중복하여 저장하였기 때문에 이는 메모리 낭비라고 할 수 있다. i 본 연구에서는 이러한 동일한 기계어 코드를 여러 V8 자바스크립트 엔진(프로세스)에서 공유함으로써 메모리 사용량을 줄이는 것을 제안한다. 기계어를 공유하기 위해서 V8 런타임에서 컴파일된 코드를 저장하는 방식을 변경하였고, JIT 컴파일러도 수정하였다. 공유 메모리 영역에 바이너리를 할당하고, GC를 적용하여 해제하는 방식을 구현하였다. Firebase, Kendo 등의 자바스크립트 라이브러리를 사용하는 어플리케이션으로 실험하였고, 4개의 어플리케이션이 동시에 실행되는 상황에서 코드의 메모리 사용량을 기존 대비 약 29.6% 줄였다.1. 서론 1 2. 배경 3 2.1 V8 Heap과 GC 3 2.2 JIT compilation 6 2.3 컴파일 결과를 위한 자료구조 8 3. 본론 12 3.1 Binary chunk 12 3.2 V8 HeapObject 구조 변경 14 3.3 V8 JIT 컴파일러 변경 16 3.4 공유 메모리 영역의 구조 17 3.5 공유 메모리 영역 GC 21 4. 실험 24 4.1 실험 환경 24 4.2 실험 방법 25 4.3 실험 결과 29 5. 결론 33 참고 문헌 34Maste

    A software cache management system

    Get PDF
    Thesis (M.S.)--Massachusetts Institute of Technology, Dept. of Electrical Engineering and Computer Science, 1985.MICROFICHE COPY AVAILABLE IN ARCHIVES AND ENGINEERINGBibliography: leaves 49-50.by Jeffrey N. Eisen.M.S

    Comparing mark-and sweep and stop-and-copy garbage collection

    Full text link
    Stop-and-copy garbage collection has been preferred to mark-and-sweep collection in the last decade because its collec-tion time is proportional to the size of reachable data and not to the memory size. This paper compares the CPU overhead and the memory requirements of the two collec-tion algorithms extended with generations, and finds that mark-and-sweep collection requires at most a small amount of additional CPU overhead (3-690) but, requires an aver-age of 20 % (and up to 40%) less memory to achieve the same page fault rate. The comparison is based on results obtained using trace-driven simulation with large Common Lisp programs.

    遅延評価に基づく関数型言語におけるメモリ割当量の削減

    Get PDF
    遅延評価は,値が実際に必要になるまで計算を遅らせる評価戦略である.必要になった値から計算するため,最終結果を求めるのに不要な計算を除去し,計算の最適化を目指すことができる.それと同時に,どの値が必要となるかという判断を処理系に任せることによって,プログラムに計算の進め方を記述する必要がなくなり,宣言的で簡潔なプログラムの記述につながる.たとえば,リストなどの再帰的データ構造を扱う際には,そのデータ構造を生成する処理と読み進める処理を分けて記述することができるため,遅延評価により得られる記述面での恩恵は大きい.記述面での利点が多い一方で,遅延評価を行う言語処理系を実装するには,計算の遅延に必要となるオブジェクト(遅延オブジェクト,以下サンクと呼ぶ)について,十分考慮して処理系を設計する必要がある.特に,サンクをメモリ上に割り当てる時間的・空間的コストが問題となり,遅延評価によって不要な計算を除去できるとしても,プログラムの実行時のオーバヘッドが大きくなってしまうという問題点がある.そのため,効率的な遅延評価機構の実現を目指して,サンクの生成を抑制する静的解析手法について今まで多くの研究がなされてきた.たとえば,正格性解析は,プログラムの最終結果を求めるために必要となる計算を,プログラムから静的に解析する.値が必要となる式は遅延させずに済ませることができるため,その式に対するサンクを生成しない効率的なコードを生成することができる.多くのプログラムにおいて,正格性解析によりサンクの生成を抑えられることは,すでに確認されているが,プログラムの文面から得られる静的な情報のみを用いるため,動的なふるまいを考慮すれば削減可能と判断できるようなサンクは,正格性解析による削減の対象ではない.たとえば,リストをどれだけの長さ読み進めるかというような実行時に決定する要素があると,リストの遅延に必要となるサンクの生成を正格性解析のみで抑制することは難しい.本論文は,サンクの削減という目的を達成するため,リストのような線形再帰的に定義される代数データ構造に注目し,既存のサンクを再利用する手法Thunk Recycling を提案する.Thunk Recycling は,すでに割り当てられているサンクを破壊的に更新して再利用し,新たなサンクの生成を抑える.たとえば,リストであれば,後続のリストの生成を遅延するサンクを再利用できる.本論文では,まず,Thunk Recycling の動作について述べ,その実現に必要となる機構についてまとめる.再利用を可能とするために,再利用が可能であるサンクを既存のサンクと区別して扱う.再利用機構は,破壊的な更新により矛盾が起こらないようにするコンパイル時の変換機構と,実行時に再利用を行う機構から構成される.プログラム変換の基本的な方針は,再利用可能なサンクへの参照を単一にすることである.また,実行時の再利用機構は,既存のサンクの生成・評価という仕組みの多くの部分を流用する.次に,Thunk Recycling の形式的な定義と,その正しさの証明について述べる.簡単な関数型言語を定義し,その言語に対するThunk Recycling のプログラム変換を定義した.さらに,サンクを再利用する操作的意味論を定義した.その意味論を用いて,Thunk Recycling の適用の有無により,プログラムのふるまいが変わらないことを証明した.次に,関数型プログラミング言語Haskell の処理系であるGlasgow Haskell Compiler(GHC)へのThunk Recycling の実装について述べる.GHC は,Haskell の標準的な処理系であり,多くの研究の基盤として用いられ,新しい言語概念など先進的な研究成果が取り入れられている.本論文では,Thunk Recycling の機構のGHC における実装について,考えうる各種の設計方針と,それぞれの設計方針を選択するに至った設計上の得失に関して論じる.GHC は,その大部分が関数型言語であるHaskell で記述されており,関数型言語による大規模で洗練されたシステムであるという面を持つ.そのため,Thunk Recycling の実装は,関数型言語による大規模なソフトウェアに対する開発事例の一例となっている.そこで,本論文では,関数型言語で書かれたプログラミング言語処理系に変更を加えるという観点から,遅延評価を行う関数型言語処理系の実装に関して得られた知見を論じる.最後に,GHC 上の実装について,ベンチマークプログラムを用いた実験について述べる.実行時間に関しては,適用するプログラムを選ぶものの,再利用によって総メモリ割当量を削減できた.電気通信大学201

    Cooperative cache scrubbing

    Get PDF
    Managing the limited resources of power and memory bandwidth while improving performance on multicore hardware is challeng-ing. In particular, more cores demand more memory bandwidth, and multi-threaded applications increasingly stress memory sys-tems, leading to more energy consumption. However, we demon-strate that not all memory traffic is necessary. For modern Java pro-grams, 10 to 60 % of DRAM writes are useless, because the data on these lines are dead- the program is guaranteed to never read them again. Furthermore, reading memory only to immediately zero ini-tialize it wastes bandwidth. We propose a software/hardware coop-erative solution: the memory manager communicates dead and zero lines with cache scrubbing instructions. We show how scrubbing instructions satisfy MESI cache coherence protocol invariants and demonstrate them in a Java Virtual Machine and multicore simula-tor. Scrubbing reduces average DRAM traffic by 59%, total DRAM energy by 14%, and dynamic DRAM energy by 57 % on a range of configurations. Cooperative software/hardware cache scrubbing reduces memory bandwidth and improves energy efficiency, two critical problems in modern systems

    Ramasse-miettes générationnel et incémental gérant les cycles et les gros objets en utilisant des frames délimités

    Get PDF
    Ces dernières années, des recherches ont été menées sur plusieurs techniques reliées à la collection des déchets. Plusieurs découvertes centrales pour le ramassage de miettes par copie ont été réalisées. Cependant, des améliorations sont encore possibles. Dans ce mémoire, nous introduisons des nouvelles techniques et de nouveaux algorithmes pour améliorer le ramassage de miettes. En particulier, nous introduisons une technique utilisant des cadres délimités pour marquer et retracer les pointeurs racines. Cette technique permet un calcul efficace de l'ensemble des racines. Elle réutilise des concepts de deux techniques existantes, card marking et remembered sets, et utilise une configuration bidirectionelle des objets pour améliorer ces concepts en stabilisant le surplus de mémoire utilisée et en réduisant la charge de travail lors du parcours des pointeurs. Nous présentons aussi un algorithme pour marquer récursivement les objets rejoignables sans utiliser de pile (éliminant le gaspillage de mémoire habituel). Nous adaptons cet algorithme pour implémenter un ramasse-miettes copiant en profondeur et améliorer la localité du heap. Nous améliorons l'algorithme de collection des miettes older-first et sa version générationnelle en ajoutant une phase de marquage garantissant la collection de toutes les miettes, incluant les structures cycliques réparties sur plusieurs fenêtres. Finalement, nous introduisons une technique pour gérer les gros objets. Pour tester nos idées, nous avons conçu et implémenté, dans la machine virtuelle libre Java SableVM, un cadre de développement portable et extensible pour la collection des miettes. Dans ce cadre, nous avons implémenté des algorithmes de collection semi-space, older-first et generational. Nos expérimentations montrent que la technique du cadre délimité procure des performances compétitives pour plusieurs benchmarks. Elles montrent aussi que, pour la plupart des benchmarks, notre algorithme de parcours en profondeur améliore la localité et augmente ainsi la performance. Nos mesures de la performance générale montrent que, utilisant nos techniques, un ramasse-miettes peut délivrer une performance compétitive et surpasser celle des ramasses-miettes existants pour plusieurs benchmarks. ______________________________________________________________________________ MOTS-CLÉS DE L’AUTEUR : Ramasse-Miettes, Machine Virtuelle, Java, SableVM
    corecore