Restore broken low memory watcher functionality in JPS process;

JPS: on LowMemory signal clear also FSCache
This commit is contained in:
Eugene Zhuravlev
2018-06-25 11:39:25 +02:00
parent da6e1ecc47
commit c70fc10cf2
4 changed files with 12 additions and 1 deletions
@@ -16,6 +16,8 @@
package org.jetbrains.jps.cmdline;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.util.Disposer;
import com.intellij.openapi.util.LowMemoryWatcherManager;
import com.intellij.openapi.util.Pair;
import com.intellij.openapi.util.Ref;
import com.intellij.openapi.util.io.BufferExposingByteArrayOutputStream;
@@ -121,6 +123,7 @@ final class BuildSession implements Runnable, CanceledStatus {
@Override
public void run() {
final LowMemoryWatcherManager memWatcher = new LowMemoryWatcherManager(SharedThreadPool.getInstance());
Throwable error = null;
final Ref<Boolean> hasErrors = new Ref<>(false);
final Ref<Boolean> doneSomething = new Ref<>(false);
@@ -198,6 +201,7 @@ final class BuildSession implements Runnable, CanceledStatus {
}
finally {
finishBuild(error, hasErrors.get(), doneSomething.get());
Disposer.dispose(memWatcher);
}
}
@@ -170,6 +170,7 @@ public class IncProjectBuilder {
public void build(CompileScope scope, boolean forceCleanCaches) throws RebuildRequestedException {
final LowMemoryWatcher memWatcher = LowMemoryWatcher.register(() -> {
myProjectDescriptor.getFSCache().clear();
JavacMain.clearCompilerZipFileCache();
myProjectDescriptor.dataManager.flush(false);
myProjectDescriptor.timestamps.getStorage().force();
@@ -15,6 +15,8 @@
*/
package org.jetbrains.jps.build;
import com.intellij.openapi.util.Disposer;
import com.intellij.openapi.util.LowMemoryWatcherManager;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.util.ArrayUtil;
import com.intellij.util.ParameterizedRunnable;
@@ -31,6 +33,7 @@ import org.jetbrains.jps.incremental.fs.BuildFSState;
import org.jetbrains.jps.incremental.messages.BuildMessage;
import org.jetbrains.jps.incremental.messages.CompilerMessage;
import org.jetbrains.jps.model.JpsModel;
import org.jetbrains.jps.service.SharedThreadPool;
import java.io.File;
import java.util.*;
@@ -200,6 +203,7 @@ public class Standalone {
public static void runBuild(JpsModelLoader loader, File dataStorageRoot, MessageHandler messageHandler, List<TargetTypeBuildScope> scopes,
boolean includeDependenciesToScope) throws Exception {
final LowMemoryWatcherManager memWatcher = new LowMemoryWatcherManager(SharedThreadPool.getInstance());
final BuildRunner buildRunner = new BuildRunner(loader);
ProjectDescriptor descriptor = buildRunner.load(messageHandler, dataStorageRoot, new BuildFSState(true));
try {
@@ -207,6 +211,7 @@ public class Standalone {
}
finally {
descriptor.release();
Disposer.dispose(memWatcher);
}
}
@@ -31,6 +31,7 @@ import java.lang.management.MemoryNotificationInfo;
import java.lang.management.MemoryPoolMXBean;
import java.lang.management.MemoryType;
import java.util.MissingResourceException;
import java.util.concurrent.Executor;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Future;
import java.util.concurrent.atomic.AtomicBoolean;
@@ -55,7 +56,7 @@ public class LowMemoryWatcherManager implements Disposable {
}
};
public LowMemoryWatcherManager(@NotNull ExecutorService executorService) {
public LowMemoryWatcherManager(@NotNull Executor executorService) {
myExecutorService = SequentialTaskExecutor.createSequentialApplicationPoolExecutor("LowMemoryWatcherManager", executorService);
try {
for (MemoryPoolMXBean bean : ManagementFactory.getMemoryPoolMXBeans()) {