@@ -7,6 +7,7 @@ import org.jetbrains.kotlin.ir.util.*
7
7
import org.jetbrains.kotlin.ir.IrElement
8
8
import java.io.File
9
9
import java.io.FileOutputStream
10
+ import java.lang.management.*
10
11
import java.nio.file.Files
11
12
import java.nio.file.Paths
12
13
import com.semmle.util.files.FileUtil
@@ -108,6 +109,7 @@ class KotlinExtractorExtension(
108
109
logger.flush()
109
110
logger.info(" Extraction for invocation TRAP file $invocationTrapFile " )
110
111
logger.flush()
112
+ logPeakMemoryUsage(logger, " before extractor" )
111
113
if (System .getenv(" CODEQL_EXTRACTOR_JAVA_KOTLIN_DUMP" ) == " true" ) {
112
114
logger.info(" moduleFragment:\n " + moduleFragment.dump())
113
115
}
@@ -127,6 +129,7 @@ class KotlinExtractorExtension(
127
129
fileTrapWriter.writeCompilation_compiling_files_completed(compilation, index, fileExtractionProblems.extractionResult())
128
130
}
129
131
loggerBase.printLimitedDiagnosticCounts(tw)
132
+ logPeakMemoryUsage(logger, " after extractor" )
130
133
logger.info(" Extraction completed" )
131
134
logger.flush()
132
135
val compilationTimeMs = System .currentTimeMillis() - startTimeMs
@@ -135,6 +138,25 @@ class KotlinExtractorExtension(
135
138
loggerBase.close()
136
139
}
137
140
}
141
+
142
+ private fun logPeakMemoryUsage (logger : Logger , time : String ) {
143
+ logger.info(" Peak memory usage $time " )
144
+
145
+ val beans = ManagementFactory .getMemoryPoolMXBeans()
146
+ var heap: Long = 0
147
+ var nonheap: Long = 0
148
+ for (bean in beans) {
149
+ val peak = bean.getPeakUsage().getUsed()
150
+ val kind = when (bean.getType()) {
151
+ MemoryType .HEAP -> { heap + = peak; " heap" }
152
+ MemoryType .NON_HEAP -> { nonheap + = peak; " non-heap" }
153
+ else -> " unknown"
154
+ }
155
+ logger.info(" * Peak for $kind bean ${bean.getName()} is $peak " )
156
+ }
157
+ logger.info(" * Total heap peak: $heap " )
158
+ logger.info(" * Total non-heap peak: $nonheap " )
159
+ }
138
160
}
139
161
140
162
class KotlinExtractorGlobalState {
0 commit comments