`Path` object creation and operations dominate CPU time on large resource trees
Los mantenedores suelen responder en 1 día
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 5/5
- Tiempo estimado
- Más de una semana
- Aptitud para principiantes
- 30/100
- Tipo de issue
- Refactorización
- Claridad
- Necesita aclaración
- Estado de actividad
- Estancado
- Stack tecnológico
- java
- Área
- performance
Línea de trabajo
Comienza localizando el constructor Path(String), backslashToForward(), computeSegmentCount(), computeSegments(), equals() y Constants.RUNNING_ON_WINDOWS; en el issue no se nombra ningún archivo fuente ni ninguna prueba. Revisa los datos de heapdump enlazados y las API existentes de IPath.of() antes de elegir entre conversión específica de la plataforma, caching o cálculo diferido. Se considera terminado cuando se logra una reducción medida del tiempo de CPU relacionado con Path sin cambiar el comportamiento de las rutas.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
During analysis of two heapdumps shared here the following issue was discovered as a hotspot that can benefit from optimization:
Performance Data
| Metric | WITH transitive | WITHOUT transitive | Ratio |
|---|---|---|---|
| Path.<init>() (µs) | 24,933,686 | 12,598,757 | 2.0× |
| Path.computeSegmentCount() (µs) | 12,651,521 | 3,382,879 | 3.7× |
| Path.append() (µs) | 14,264,596 | 5,157,314 | 2.8× |
| Path.equals() (µs) | 6,327,370 | 1,207,964 | 5.2× |
| StringLatin1.replace() (µs) | 32,550,291 | 9,422,718 | 3.5× |
Description
Path objects are created extensively throughout the JDT and Platform. The constructor calls backslashToForward() (which calls String.replace('\\', '/') — accounting for the StringLatin1.replace() overhead) and computeSegmentCount() (which scans the entire path string). The equals() method compares segments array-by-array.
With transitive dependencies, the number of classpath entries, package fragment roots, and resource lookups increases substantially, causing proportionally more Path creation and comparison. The 3.5× increase in StringLatin1.replace() (32.5 seconds total!) is particularly notable — this is pure overhead from the backslashToForward() conversion that happens in every Path constructor, even on Linux where no backslashes exist.
Suggested Fix
- Skip backslash conversion on non-Windows platforms:
Path(String)unconditionally callsbackslashToForward()which doespath.replace('\\', '/'). Since this build is running on a specific OS, the conversion could be skipped whenFile.separatorChar == '/'. (Note: The source already has aforWindowsparameter in the internal constructor, but the publicPath(String)usesConstants.RUNNING_ON_WINDOWS. Verify this is correctly set.) - Intern or cache frequently used paths: Classpath entry paths, project paths, and source folder paths are created repeatedly. An interning mechanism or flyweight pattern would reduce object creation.
- Lazy segment computation:
computeSegments()andcomputeSegmentCount()are called in the constructor. If manyPathobjects are created only for equality checks ortoString(), lazy computation would save work. - Use
IPath.of()factory method: If a canonicalIPath.of()exists (or should be added), it could return cached instances for common paths.
- Lenguaje dominante
- Java
- Estrellas
- 165
- Forks
- 174
- Merge medio
- 2 d 16 h
- PR fusionados (30 d)
- 45
Preparar el entorno
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de eclipse-platform/eclipse.platform
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 66/100
eclipse-platform/eclipse.platform#3019 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
eclipse-platform/eclipse.platform#2940 ·
Los mantenedores suelen responder en 1 día
-
Terminal views all show same name 'Terminal' in Ctrl+F7 view switcher popupPosiblemente ocupada @ravnskjaer la tomó hace 6 días. Abiertobug good first issue help wanted
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
eclipse-platform/eclipse.platform#2774 · 4 comentarios ·
Los mantenedores suelen responder en 1 día
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
eclipse-platform/eclipse.platform#2593 · 7 comentarios ·
Los mantenedores suelen responder en 1 día
-
[Win32] Folder becomes a file in the workspace tree when a child is deleted during `refreshLocal` (regression in 2026-09)Posiblemente ocupada @FlorianKroiss la tomó hace 1 día. Abiertobug regression Windows
Dificultad 4/5 3-5 días Aptitud para principiantes 15/100
eclipse-platform/eclipse.platform#3024 · 1 comentario ·
Los mantenedores suelen responder en 1 día
Todos los issues de eclipse-platform/eclipse.platform
Issues similares
-
RRateLimiter acquire methods accept negative permits and raise available permits above the rate.Posiblemente ocupada Un pull request vinculado a esta issue está abierto o ya se fusionó. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
Los mantenedores suelen responder en 4 días
-
README 中的代码语言数量与当前目录不一致Abierto
Dificultad 1/5 Menos de una hora Aptitud para principiantes 75/100
krahets/hello-algo#1993 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 62/100
NationalSecurityAgency/ghidra#9884 ·
Los mantenedores suelen responder en 2 días
-
Status: Pending Review Type: Feature Request
Dificultad 1/5 Menos de una hora Aptitud para principiantes 82/100
OpenRefine/OpenRefine#8019 ·
Los mantenedores suelen responder en 1 día
-
[TEMP] pin maven version to 3.9.xPosiblemente ocupada @petrenyi-mark la tomó hoy. Abierto
Dificultad 2/5 Menos de una hora Aptitud para principiantes 62/100