[pycharm] enable appcds for PyCharm PY-75476

GitOrigin-RevId: d20fd55316fb6049f5f1effe6e47248aa5a46555
This commit is contained in:
Vladimir Koshelev
2024-08-28 13:07:35 +00:00
committed by intellij-monorepo-bot
parent 07ce79c60f
commit 29ca865bc6
2 changed files with 30 additions and 2 deletions
@@ -104,6 +104,17 @@ abstract class ProductProperties {
*/
var classLoader: String? = "com.intellij.util.lang.PathClassLoader"
/**
* If `true`, the Class Data Sharing (CDS) feature will be enabled for the JVM and system.class.loader will be disabled.
*
* When enabled, the JVM will generate a shared archive file for the application's classes on the first startup,
* which can be reused in further launches.
*
* The location of the cds file is $SYSTEM/$shortProductName$Version.jsa
*/
var enableCds: Boolean = false
/**
* Additional arguments which will be added to JVM command line in IDE launchers for all operating systems.
*/
@@ -298,8 +298,25 @@ class BuildContextImpl internal constructor(
override fun getAdditionalJvmArguments(os: OsFamily, arch: JvmArchitecture, isScript: Boolean, isPortableDist: Boolean): List<String> {
val jvmArgs = ArrayList<String>()
productProperties.classLoader?.let {
jvmArgs.add("-Djava.system.class.loader=${it}")
val cacheMacroName = when (os) {
OsFamily.WINDOWS -> "%IDE_CACHE_DIR%"
OsFamily.MACOS -> "\$IDE_CACHE_DIR"
OsFamily.LINUX -> "\$IDE_CACHE_DIR"
}
if (!productProperties.enableCds) {
productProperties.classLoader?.let {
jvmArgs.add("-Djava.system.class.loader=${it}")
}
}
else {
if (os == OsFamily.WINDOWS) {
jvmArgs.add("-XX:SharedArchiveFile=$cacheMacroName\\${productProperties.baseFileName}$buildNumber.jsa")
}
else {
jvmArgs.add("-XX:SharedArchiveFile=$cacheMacroName/${productProperties.baseFileName}$buildNumber.jsa")
}
jvmArgs.add("-XX:+AutoCreateSharedArchive")
}
jvmArgs.add("-Didea.vendor.name=${applicationInfo.shortCompanyName}")