193 research outputs found

    Visualizing Objects and Memory Usage

    Get PDF
    International audienceMost of the current garbage collector implementations work by reachability. This means they only take care of the objects that nobody else points to. As a consequence, there are objects which are not really used but are not garbage collected because they are still referenced. Such unused but reachable objects create memory leaks. This is a problem because applications use much more memory than what is actually needed. In addition, they may get slower and crash. It is important to understand which parts of the system are instantiated but also which are used or unused. There is a plethora of work on runtime information or class instantiation visualizations but none of them show whether instances are actually used. Such information is important to identify memory leaks. In this paper, we present some visualizations that show used/unused objects in object-oriented applications. For this, we use Distribution Map which is a visualization showing spread and focus of properties across systems. We extend Distribution Maps to represent the way classes are used or not, since we distinguish between a class that just has instances from one that has used instances. To identify unused objects, we modified the Pharo Virtual Machine

    Experiments with a Fast Object Swapper

    Get PDF
    International audienceIn object-oriented systems, runtime memory is composed of an object graph in which objects refer to other objects. This graph of objects evolves while the system is running. Graph exporting and swapping are two important object graph operations. Exporting refers to copying the graph to some other memory so that it can be loaded by another system. Swapping refers to moving the graph to a secondary memory (e.g., a hard disk) to temporary release part of the primary memory. While exporting and swapping are achieved in different ways, each of them faces a common and central problem which is the speed of the approach in presence of large object graphs. Nevertheless, most of the existing solutions do not address well this issue. Another challenge is to deal with extremely common situations where objects outside the exported/swapped graph point to objects inside the graph. To correctly load back an exported subgraph, it is necessary to compute and export extra information that is not explicit in the object subgraph. This extra information is needed because certain objects may require to be reinitialized or recreated, to run specific code before or after the loading, to be updated to a new class definition, etc. In this paper, we present most of the general problems of object exporting and swapping. As a case of study, we present an analysis of ImageSegment, a fast solution to export and swap object graphs, developed by Dan Ingalls. ImageSegment addresses the speed problems in an efficient way, as shown by the results of several benchmarks we have conducted using Pharo Smalltalk. However, ImageSegment is not a panacea since it still has other problems that hampers its general use

    Marea: An Efficient Application-Level Object Graph Swapper

    Get PDF
    International audienceAbstract During the execution of object-oriented applications, several millions of objects are created, used and then collected if they are not referenced. Prob- lems appear when objects are unused but cannot be garbage-collected because they are still referenced from other objects. This is an issue because those ob- jects waste primary memory and applications use more primary memory than they actually need. We claim that relying on the operating system's (OS) virtual memory is not always enough since it cannot take into account the domain and structure of applications. At the same time, applications have no easy way to parametrize nor cooperate with memory management. In this paper, we present Marea, an efficient application-level object graph swapper for object-oriented programming languages. Its main goal is to offer the programmer a novel so- lution to handle application-level memory. Developers can instruct our system to release primary memory by swapping out unused yet referenced objects to secondary memory. Our approach has been qualitatively and quantitatively val- idated. Our experiments and benchmarks on real-world applications show that Marea can reduce the memory footprint between 23% and 36%

    Problems and Challenges when Building a Manager for Unused Objects

    No full text
    International audienceLarge object-oriented applications may occupy hundreds of megabytes or even gigabytes of memory. During program execution, a large graph of objects is created and constantly changed. Most object runtimes support some kind of automatic memory management based on garbage collectors (GC) whose idea is the automatic destruction of unreferenced objects. However, there are referenced objects which are not used for a long period of time or that are used just once. These are not garbage-collected because they are still reachable and might be used in the future. Due to these unused objects, applications use much more resources than they actually need. In this paper we present the challenges and possible approaches towards an unused object manager for Pharo. The goal is to use less memory by swapping out the unused objects to secondary memory and only leaving in primary memory only those objects which are needed and used. When one of the unused objects is needed, it is brought back into primary memory

    Ghost: A uniform and general-purpose proxy implementation

    Get PDF
    International audienceA proxy object is a surrogate or placeholder that controls access to another target object. Proxy objects are a widely used solution for different scenarios such as remote method invocation, future objects, behavioral reflection, object databases, inter-languages communications and bindings, access control, lazy or parallel evaluation, security, among others. Most proxy implementations support proxies for regular objects but are unable to create proxies for objects with an important role in the runtime infrastructure such as classes or methods. Proxies can be complex to install, they can have a significant overhead, they can be limited to certain kind of classes, etc. Moreover, proxy implementations are often not stratified and they do not have a clear separation between proxies (the objects intercepting messages) and handlers (the objects handling interceptions). In this paper, we present Ghost: a uniform and general-purpose proxy implementation for the Pharo programming language. Ghost provides low memory consuming proxies for regular objects as well as for classes and methods. When a proxy takes the place of a class, it intercepts both the messages received by the class and the lookup of methods for messages received by its instances. Similarly, if a proxy takes the place of a method, then the method execution is intercepted too

    Efficient Proxies in Smalltalk

    Get PDF
    International audienceA proxy object is a surrogate or placeholder that controls access to another target object. Proxy objects are a widely used solution for different scenarios such as remote method invocation, future objects, behavioral reflection, object databases, inter-languages communications and bindings, access control, lazy or parallel evaluation, security, among others. Most proxy implementations support proxies for regular objects but they are unable to create proxies for classes or methods. Proxies can be complex to install, have a significant overhead, be limited to certain type of classes, etc. Moreover, most proxy implementations are not stratified at all and there is no separation between proxies and handlers. In this paper, we present Ghost, a uniform, light-weight and stratified general purpose proxy model and its Smalltalk implementation.Ghost supports proxies for classes or methods. When a proxy takes the place of a class it intercepts both, messages received by the class and lookup of methods for messages received by instances. Similarly, if a proxy takes the place of a method, then the method execution is intercepted too

    Comparative population genetics of mimetic Heliconius butterflies in an endangered habitat; Brazil's Atlantic Forest

    Get PDF
    <p>Abstract</p> <p>Background</p> <p>Brazil's Atlantic Forest is a biodiversity hotspot endangered by severe habitat degradation and fragmentation. Habitat fragmentation is expected to reduce dispersal among habitat patches resulting in increased genetic differentiation among populations. Here we examined genetic diversity and differentiation among populations of two <it>Heliconius </it>butterfly species in the northern portion of Brazil's Atlantic Forest to estimate the potential impact of habitat fragmentation on population connectivity in butterflies with home-range behavior.</p> <p>Results</p> <p>We generated microsatellite, AFLP and mtDNA sequence data for 136 <it>Heliconius erato </it>specimens from eight collecting locations and 146 <it>H. melpomene </it>specimens from seven locations. Population genetic analyses of the data revealed high levels of genetic diversity in <it>H. erato </it>relative to <it>H. melpomene</it>, widespread genetic differentiation among populations of both species, and no evidence for isolation-by-distance.</p> <p>Conclusions</p> <p>These results are consistent with the hypothesis that the extensive habitat fragmentation along Brazil's Atlantic Forest has reduced dispersal of <it>Heliconius </it>butterflies among neighboring habitat patches. The results also lend support to the observation that fine-scale population genetic structure may be common in <it>Heliconius</it>. If such population structure also exists independent of human activity, and has been common over the evolutionary history of <it>Heliconius </it>butterflies, it may have contributed to the evolution of wing pattern diversity in the genus.</p

    Visualizing Objects and Memory Usage

    Get PDF
    International audienceMost of the current garbage collector implementations work by reachability. This means they only take care of the objects that nobody else points to. As a consequence, there are objects which are not really used but are not garbage collected because they are still referenced. Such unused but reachable objects create memory leaks. This is a problem because applications use much more memory than what is actually needed. In addition, they may get slower and crash. It is important to understand which parts of the system are instantiated but also which are used or unused. There is a plethora of work on runtime information or class instantiation visualizations but none of them show whether instances are actually used. Such information is important to identify memory leaks. In this paper, we present some visualizations that show used/unused objects in object-oriented applications. For this, we use Distribution Map which is a visualization showing spread and focus of properties across systems. We extend Distribution Maps to represent the way classes are used or not, since we distinguish between a class that just has instances from one that has used instances. To identify unused objects, we modified the Pharo Virtual Machine

    Supercontinuum generation of ultrashort laser pulses in air at different central wavelengths

    Get PDF
    Supercontinuum generation by femtosecond filaments in air is investigated for different laser wavelengths ranging from ultraviolet to infrared. Particular attention is paid on the role of third-harmonic generation and temporal steepening effects, which enlarge the blue part of the spectrum. A unidirectional pulse propagation model and nonlinear evolution equations are numerically integrated and their results are compared. Apart from the choice of the central wavelength, we emphasize the importance of the saturation intensity reached by self-guided pulses, together with their temporal duration and propagation length as key players acting on both supercontinuum generation of the pump wave and emergence of the third harmonics. Maximal broadening is observed for large wavelengths and long filamentation ranges.Comment: 10 pages, 11 figure

    Evaluation of Average and Maximum Heart Rate of Wrist-worn Wearable Technology Devices During Trail Running

    Get PDF
    It has been estimated that there are 20 million people who participate in trail running, and these numbers are expected to increase by 15% each year. Our laboratory group has conducted studies on the validity of wearable technology watches and heart rate (HR) during trail running. The previous generation devices were mostly inaccurate, and a limitation was that reliability was not measured. PURPOSE: To determine both validity and reliability in newer models of wearable devices during trail running. METHODS: Seventeen participants (F = 7) ran on the Thunderbird Gardens Lightning Switch trail in Cedar City, UT. Demographic characteristics: Age = 25 (9) years (mean [standard deviation]), ht = 168 (9) cm, mass = 72 (14) kg. Two Garmin Instincts and two Polar Vantage M2s were evaluated, along with the Polar H10 chest strap as the criterion measure. Participants ran out on the trail for 10-minutes, and then returned to the trailhead. Maximum HR and average HR were measured during the run. Data were analyzed for validity (Mean Absolute Percent Error [MAPE] and Lin’s Concordance [CCC]) and reliability (Coefficient of Variation [CV] and Intraclass Correlation Coefficient [ICC]). Predetermined thresholds were: MAPE0.70, CV0.70. RESULTS: The Garmin Instinct met the threshold for both reliability tests for average and maximum HR (see table). The Garmin Instinct and Polar Vantage met the threshold for both validity tests for maximum HR. CONCLUSION: In order for a device to be considered valid, it must meet the predetermined thresholds for both validity and reliability. These results indicate that only the Garmin Instinct is valid and reliable, but only for measuring maximum HR. This is challenging for those who wish to track their HR while trail running, because neither of the studied devices were valid and reliable for maximum and average HR
    • 

    corecore