[Rd] object.size vs lobstr::obj_size

Hadley Wickham h@w|ckh@m @end|ng |rom gm@||@com
Fri Mar 27 20:00:25 CET 2020


On Fri, Mar 27, 2020 at 10:39 AM Hervé Pagès <hpages using fredhutch.org> wrote:

> Hi Tomas,
>
> On 3/27/20 07:01, Tomas Kalibera wrote:
> > they provide an over-approximation
>
> They can also provide an "under-approximation" (to say the least) e.g.
> on reference objects where the entire substance of the object is ignored
> which makes object.size() completely meaningless in that case:
>
>    setRefClass("A", fields=c(stuff="ANY"))
>    object.size(new("A", stuff=raw(0)))      # 680 bytes
>    object.size(new("A", stuff=runif(1e8)))  # 680 bytes
>
> Why wouldn't object.size() look at the content of environments?
>

As the author, I'm obviously biased, but I do like lobstr::obj_sizes()
which allows you to see the additional size occupied by one object given
any number of other objects. This is particularly important for reference
classes since individual objects appear quite large:

A <- setRefClass("A", fields=c(stuff="ANY"))
lobstr::obj_size(new("A", stuff=raw(0)))
#> 567,056 B

But the vast majority is shared across all instances of that class:

lobstr::obj_size(A)
#> 719,232 B
lobstr::obj_sizes(A, new("A", stuff=raw(0)))
#> * 719,232 B
#> *     720 B
lobstr::obj_sizes(A, new("A", stuff=runif(1e8)))
#> *     719,232 B
#> * 800,000,720 B

Hadley
-- 
http://hadley.nz

	[[alternative HTML version deleted]]



More information about the R-devel mailing list