Is it possible to get the memory for one of v8::Object ?

103 views
Skip to first unread message

czczcheng

unread,
Jul 20, 2018, 2:43:38 AM7/20/18
to v8-users
Is it possible to get the memory for one of v8::Object ?
I want to count how much memory was used  during a single call of a function.

Jakob Kummerow

unread,
Jul 20, 2018, 2:12:23 PM7/20/18
to v8-users
I don't think there is a direct way to do this.

There is v8::internal::HeapObject::Size(), but it only gives you a form of "shallow" size. Under the hood, most (JavaScript-level) objects are composed of several (heap) objects; e.g. for an Array, all the elements are stored in a separate backing store, which would not be included in the result of a ->Size() call on the array itself.

You could try to implement a crawl of the object graph that sums up all the nested objects, but it's not obvious how you'd deal with shared objects (canonical example: typically, many objects share the same hidden class. How do you count the bytes of the hidden class metadata?). DevTools gives one answer via the "retained size" of each object in a heap snapshot. Does that serve your needs?

Another way to approximate it is to wrap your function in a pair of gc() calls, run with --expose-gc --trace-gc, and compare the tracing output before/after. The limitation is that you only get 0.1 MB resolution; you can amplify the signal with a loop. Example:

7 ms: Mark-sweep 0.6 (3.7) -> 0.5 (4.7) MB, 1.1 / 0.0 ms
9 ms: Mark-sweep 1.3 (4.7) -> 0.5 (4.7) MB, 1.1 / 0.0 ms

1.3 - 0.5 = 0.8 MB consumed, in this case for 1,000 invocations of function my_function() { new Array(100); }. The expected value (from knowing what such an array looks like in memory) is 0.816 MB, so the approximated result is reasonably accurate.

On Thu, Jul 19, 2018 at 11:43 PM czczcheng <zheche...@yeah.net> wrote:
Is it possible to get the memory for one of v8::Object ?
I want to count how much memory was used  during a single call of a function.

--
--
v8-users mailing list
v8-u...@googlegroups.com
http://groups.google.com/group/v8-users
---
You received this message because you are subscribed to the Google Groups "v8-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to v8-users+u...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
Reply all
Reply to author
Forward
Message has been deleted
0 new messages