Rework object refs tracking to reduce memory usage
Store pointers to referenced objects in a variable sized array instead of linked list. This cuts down memory usage of utilities which use object references; e.g., git-fsck-objects --full on the git.git repository consumes about 2 MB of memory tracked by Massif instead of 7 MB before the change. Object refs are still the biggest consumer of memory (57%), but the malloc overhead for a single block instead of a linked list is substantially smaller. Signed-off-by: Sergey Vlasov <vsu@altlinux.ru> Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:

committed by
Junio C Hamano

parent
545f229a4b
commit
4a4e6fd74f
@ -56,7 +56,6 @@ static void check_connectivity(void)
|
||||
/* Look up all the requirements, warn about missing objects.. */
|
||||
for (i = 0; i < nr_objs; i++) {
|
||||
struct object *obj = objs[i];
|
||||
struct object_list *refs;
|
||||
|
||||
if (!obj->parsed) {
|
||||
if (!standalone && has_sha1_file(obj->sha1))
|
||||
@ -67,14 +66,19 @@ static void check_connectivity(void)
|
||||
continue;
|
||||
}
|
||||
|
||||
for (refs = obj->refs; refs; refs = refs->next) {
|
||||
if (refs->item->parsed ||
|
||||
(!standalone && has_sha1_file(refs->item->sha1)))
|
||||
continue;
|
||||
printf("broken link from %7s %s\n",
|
||||
obj->type, sha1_to_hex(obj->sha1));
|
||||
printf(" to %7s %s\n",
|
||||
refs->item->type, sha1_to_hex(refs->item->sha1));
|
||||
if (obj->refs) {
|
||||
const struct object_refs *refs = obj->refs;
|
||||
unsigned j;
|
||||
for (j = 0; j < refs->count; j++) {
|
||||
struct object *ref = refs->ref[j];
|
||||
if (ref->parsed ||
|
||||
(!standalone && has_sha1_file(ref->sha1)))
|
||||
continue;
|
||||
printf("broken link from %7s %s\n",
|
||||
obj->type, sha1_to_hex(obj->sha1));
|
||||
printf(" to %7s %s\n",
|
||||
ref->type, sha1_to_hex(ref->sha1));
|
||||
}
|
||||
}
|
||||
|
||||
if (show_unreachable && !(obj->flags & REACHABLE)) {
|
||||
|
Reference in New Issue
Block a user