Why Julia is not reference counted? Probably someone has written something explanation about this that I can read, so if anyone can point me in the right direction, that would be great.
On Tuesday, July 8, 2014 at 12:18:37 PM UTC-4, Stefan Karpinski wrote: > > Writing `A = nothing` in Julia will not cause the memory used by A to be > freed immediately. That happens in reference counted systems, which many > dynamic languages traditionally have been, but which Julia is not. Instead, > the memory for A will be freed the next time a garbage collection occurs. > This consists of the language runtime stopping everything it's doing, > tracing through the graph of all objects in memory, marking the ones it can > still reach, and freeing all the rest. So if doing `A = nothing` causes > there to be no more reachable references to the object that A used to point > at, then that object will be freed when the next garbage collection occurs. > Normally, garbage collection occurs automatically when the system tries to > allocate something and doesn't have enough memory to do so: it runs the > garbage collector and then tries again. You can, however, call gc() to > force garbage collection to occur now. This is generally not necessary or > recommended. > > > On Mon, Jul 7, 2014 at 11:04 PM, Ivar Nesje <[email protected] > <javascript:>> wrote: > >> In julia we don't say you shouldn't do something that could give better >> performance (if you really want it). The thing is that Julia uses automatic >> garbage collection because it is a pain to do manually, and then you have >> to live with the semantics of a garbage collector. >> >> If your program is not really constrained by memory in the second part, I >> would guess that it is unlikely that it would matter to your program when >> the arrays are released. Freeing memory in julia (and other GC based >> languages), is about ensuring that no references remains to the allocated >> object. >> >> If it is a global variable, you can assign `nothing`, and if it is a >> global constant, you can change the type, so you must reassign it to a >> smaller array with the same dimensionality and type and ensure that you >> don't have local variables that references the same array. >> >> If it is a local variable, I'm not sure there is other options than to >> arrange the function boundaries, so that the large array goes out of scope >> when it is not needed any more. >> >> kl. 22:56:35 UTC+2 mandag 7. juli 2014 skrev Pablo Zubieta følgende: >> >>> Let's say I have some large matrices I need to do some calculations and >>> I use them in order to get some results that I will use in a second part of >>> a computation where I not longer need the initial matrices. Suppose also >>> that I preallocate those matrices. >>> >>> Would it be ok to bind the names of those matrices to nothing (or >>> something similar) from the moment I won't be using them anymore, or should >>> I leave the deallocation work to the GC? >>> >> >
