path: root/vm.c
diff options
authorko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2013-11-05 04:51:01 +0000
committerko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2013-11-05 04:51:01 +0000
commitd1674ef67b61df4ff27e93772c0946ae74869c5d (patch)
tree8ce4da84dab8b716b48695000f062fae92b201f1 /vm.c
parent5ba523967ec02f9abed15a219f776c3242e0e742 (diff)
* gc.c: add support to estimate increase of oldspace memory usage.
This is another approach to solve an issue discussed at r43530. This feature is diabled as default. This feature measures an increment of memory consuption by oldgen objects. It measures memory consumption for each objects when the object is promoted. However, measurement of memory consumption is not accurate now. So that this measurement is `estimation'. To implement this feature, move memsize_of() function from ext/objspace/objspace.c and expose rb_obj_memsize_of(). Some memsize() functions for T_DATA (T_TYPEDDATA) have problem to measure memory size, so that we ignores T_DATA objects now. For example, some functions skip NULL check for pointer. The macro RGENGC_ESTIMATE_OLDSPACE enables/disables this feature, and turned off as default. We need to compare 3gen GC and this feature carefully. (it is possible to enable both feature) We need a help to compare them. * internal.h: expose rb_obj_memsize_of(). * ext/objspace/objspace.c: use rb_obj_memsize_of() function. * cont.c (fiber_memsize): fix to check NULL. * variable.c (autoload_memsize): ditto. * vm.c (vm_memsize): ditto. git-svn-id: svn+ssh:// b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'vm.c')
1 files changed, 3 insertions, 1 deletions
diff --git a/vm.c b/vm.c
index 830e66c..bf965b2 100644
--- a/vm.c
+++ b/vm.c
@@ -1673,7 +1673,9 @@ vm_memsize(const void *ptr)
if (ptr) {
const rb_vm_t *vmobj = ptr;
size_t size = sizeof(rb_vm_t);
- size += st_memsize(vmobj->living_threads);
+ if (vmobj->living_threads) {
+ size += st_memsize(vmobj->living_threads);
+ }
if (vmobj->defined_strings) {
size += DEFINED_EXPR * sizeof(VALUE);