From 72041a0dcb5b7c133b79a1d6783a23039f2136bd Mon Sep 17 00:00:00 2001 From: Mathieu Chartier Date: Fri, 14 Jul 2017 18:23:25 -0700 Subject: Use class unloading in dex2oat for verify and extract Unload the main classloader in between each dex file compilation to reduce RAM. This frees the whole java heap and associated linear allocs. This is only used for quickening since filters that do compilation may require loaded classes in the compiler and oat writer. This reduces dex2oat peak PSS for compiling a large app from 196MB to 135MB. Only works for verify and extract since the current approach is incompatible with oat writer patching. b/63911263 Added a verification override that reads the compiled class status to avoid ever verifying classes that were quickened (since this is not supported and causes failures). There is still some duplicated verification for some class with superclasses in other dex files. Support for quicken will be added in a follow up CL. Bug: 63467744 Test: test-art-host Test: test/testrunner/testrunner.py --interpreter --host -j40 Change-Id: Id0e4f84eb5db91d6143f752b498f4832a5b25b6e --- runtime/class_table.h | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'runtime/class_table.h') diff --git a/runtime/class_table.h b/runtime/class_table.h index 8616dfba93..a259725399 100644 --- a/runtime/class_table.h +++ b/runtime/class_table.h @@ -250,6 +250,12 @@ class ClassTable { REQUIRES(!lock_) REQUIRES_SHARED(Locks::mutator_lock_); + // Filter strong roots (other than classes themselves). + template + void RemoveStrongRoots(const Filter& filter) + REQUIRES(!lock_) + REQUIRES_SHARED(Locks::mutator_lock_); + ReaderWriterMutex& GetLock() { return lock_; } -- cgit v1.2.3-59-g8ed1b