On Sunday, September 11, 2016 at 7:35:41 AM UTC+8, Yichao Yu wrote: > > > > On Sat, Sep 10, 2016 at 6:46 PM, K leo <cnbi...@gmail.com <javascript:>> > wrote: > >> Thanks for the reply. A couple questions: >> > >> 1) When I quit Julia and do a fresh start, is the tally set to zero? >> > > Memory in different processes are totally unrelated. > So when I start a new Julia process, the tally starts at zero?
> > >> 2) When GC does a pass, does it clear out everything so the tally is set >> to zero, or does it do a partial clearance? >> > > Neither > How can it be neither? What can be a third choice with this question? > > >> 3) I presume it is the latter case in question 2). So does GC clear out >> things on first-in-first-out bases or what? >> > > Not applicable. > > >> 4) When the tally becomes big enough, does GC make sure to keep objects >> that are referenced for future use in (Julia) code? >> > > See the link below > > >> 5) Do local objects (things allocated and only used within functions for >> instance) get cleared out immediately when the functions terminate so they >> don't take up quota in the tally? >> >> > No > Or perhaps those local objects have higher priorities of getting cleared out? > > > > Please check https://en.wikipedia.org/wiki/Tracing_garbage_collection for > basic concepts related to garbage collection. > > > >> >> On Sunday, September 11, 2016 at 12:16:05 AM UTC+8, Tim Holy wrote: >>> >>> Every time julia allocates memory, it adds the number of bytes to a >>> running tally; once that tally gets big enough, it does a >>> garbage-collection pass (and resets the tally). Consequently GC is >>> triggered only when you allocate, but even the smallest allocation can >>> trigger GC if it pushes the tally over the threshold. It thus depends on >>> where that tally was when you started. Keep in mind that there are many >>> uses of memory that may not be obvious; for example, JIT compilation uses >>> memory because julia code is compiled by julia code. >>> >>> >>> >>> Best, >>> >>> --Tim >>> >>> >>> >>> On Saturday, September 10, 2016 7:05:18 AM CDT K leo wrote: >>> >>> > Let's say in REPL you define an object, then after many many other >>> >>> > operations, Julia's GC wouldn't free the object you defined earlier >>> until >>> >>> > you exit Julia or you somehow really run out of memory or something. Is >>> >>> > that the correct understanding? >>> >>> > >>> >>> > Now I am trying to think what happens with the jl_... calls one >>> performs >>> >>> > from C/C++ code. The procedure is that one calls jl_init first to >>> start a >>> >>> > Julia session, then a bunch other jl_... calls to handle some data, and >>> >>> > then at last jl_atexit_hook to stop using Julia. Is the mechanism here >>> >>> > similar to REPL in the sense that the Julia session is up and running >>> >>> > before one calls jl_atexit_hook? So Julia GC would not free objects you >>> >>> > created with jl_... calls until you exit or you somehow really run out >>> of >>> >>> > memory or something. >>> >>> > >>> >>> > Having read the section in Embedding Julia, I get the sense that it is >>> the >>> >>> > case. So we only need to worry about GC after all jl_... calls, not in >>> >>> > >>> >>> > between jl_... calls. So here it says : >>> >>> > > “However, it is generally safe to use pointers in between jl_... >>> calls. >>> >>> > > >>> >>> > >> But in order to make sure that values can survive jl_... calls, we >>> have >>> >>> > >> to >>> >>> > >> tell Julia that we hold a reference to a Julia value. ” >>> >>> > > >>> >>> > > Excerpt From: unknown. “Julia Language 0.6.0-dev documentation.” >>> iBooks. >>> >>> > > >>> >>> > > Is my understanding correct? Or can anyone please explain otherwise? >>> >>> >>> >>> >>> >> >