Verschillende GC-algoritmes maken een afweging tussen snelheid en pauzetijden:
Standaard GC: werkt prima, maar bij grote geheugens (bijv. 8 GB) kan JOSM merkbare korte haperingen van een paar tienden van een seconde krijgen wanneer het geheugen wordt opgeschoond.
G1GC (Garbage First GC):
Ontworpen voor grote heaps (meerdere GBâs).
Verdeelt het geheugen in regioâs en ruimt die stapsgewijs op.
Resultaat: in plaats van lange pauzes krijg je veel kleine, snelle opruimmomenten â JOSM blijft vlot reageren.
In de praktijk bij JOSM
Wanneer je een grote OSM-extract laadt (bijvoorbeeld een hele provincie), maakt JOSM miljoenen Java-objecten aan.
Zonder afgestemde GC zie je af en toe bevriezingen van 1â2 seconden bij zoomen of verschuiven.
Met G1GC + pauzetarget worden die haperingen teruggebracht tot nauwelijks merkbare korte schokjes.
(Nu laat ik geen hele provincies in; maar wel een hele wijk)
Kortom: GC-tuning maakt JOSM soepeler en responsiever, vooral wanneer je met grote datasets werkt.
Heel goed. Heb ze allemaal in de JOSM.cfg gezet, de Xmx naar 8192m gewijzigd, Zag laatst in Task Manager dat JOSM 5.2GB in gebruik had waar het voorheen bij 4.2GB begon vast te lopen (voor je tweaks hierboven). Na eerste herstart liep alles goed tot ik het Urban Eye 3D paneel lanceerde. Vanaf dat alles langzamer dan een slak, dus die OpenGL heb ik ook op false gezet waarna het UE3D paneel weer normaal snel werkt.
(Heb al sinds een paar stabiele versies een âConnect Time Outâ bij het eerste lading van de Imagery set [7 lagen]. Dat is eenmalig. Had gehoopt dat met deze tweaks dit ook zou verdwijnen, maar nee)
No deze twee items invoegen wilde JOSM geheel niet meer starten, niets zichtbaar in TaskManager wat er gaande was. De comp is van 2012, weliswaar met 16GB en een 2018 display kaart maar daarmee is het wel gedaan.
Dit is wat GPT5 er van vindt en ik zal ze eens proberen:
Yes â those are good choices for JOSM on your setup (Java 21, 12 GB RAM).
They make the Java Garbage Collector (GC) more efficient, especially when editing large areas or using heavy imagery.
How they work:
UseParallelGC â Enables the parallel garbage collector, which reclaims memory using multiple CPU cores.
â Reduces lag spikes when JOSM cleans up memory.
UseAdaptiveSizePolicy â Lets Java dynamically tune heap and cache sizes to keep GC efficient.
En dit is de recommendation voor de imagery settings:
Recommended optimised values:
WMS simultaneous connections: keep 3â4.
TMS total concurrent downloads:8â12 instead of 25.
â Youâll notice less CPU/network stutter, especially when panning fast or loading large imagery.
Bedankt voor dit onderzoek. Had gisteren nog de JAVA update installer gestart die meteen een nieuwe versie ophaalde, maar dat was slechts een kleine . versie update.
Vanmorgen die 2 regels opnieuw erin gezet en weer totaal niets zichtbaar, zelfs niet voor een moment in TM observerende met de processes van I en J in beeld.
Toen alleen java-options=-XX:+UseAdaptiveSizePolicy erin laten staan, weer gestart en dat werkte. Daarna met alleen java-options=-XX:+UseParallelGC, helemaal niets, dus het lijkt erop dat die garbage cleaning optie niet welbekomen is. Alle systeem drivers zijn up to date, dus weet het niet waaraan het kan liggen. Windows 10 staat in het extended support programma (werd voor niets aangeboden omdat X Y Z van toepassing was), dus houdt het nog een jaar of langer. Boots nog steeds zeer snel.
Het verband tussen de versie wat in de Add Programs van Windows staat en wat JOSM zelf aangeeft (JAVA 21.0.8) ) heb ik niet begrepen maar weet dat er al langer 1 installatie is (was 3) en die staat in het about scherm
PS Gebruikte voorheen OpenWebStart die JAVA automatish uptodate hield maar die is kaput sinds op een bepaald moment iets niet meer gepurged kon worden wat opstarten blokkerde, dus zit sinds dien weer op de directe JOSM uitgave.
Ah.. ik gebruik de windows installer van JOSM; en begreep altijd dat daar Java niet in mee komt.
Hoe ik dit interpreteer, is dat JOSM is gebouwd met Java 21.0.8 JDK; maar dit staat los van de java die op je systeem draait.
Dat behoeft verder doorzoeken, naar die Java Azul Zulu (en dat Zulu komt me heel bekend voor⊠dat zag ik in de TM als JOSM met OWS opgestart werd)
Wordt vervolgd.
Edit: Een grijs gebied⊠er zijn installatie videos en allemaal op W11. Vond wel een 21.44.17 .msi bestand dus op de Azul site. Ga die uitproberen, voorzichtig want wil geen dependencies opblazen.
Bij de artificiële inseminatie afdeling weten ze te vertellen dat er een configuration tab in het About scherm moet zijn waar de java referenties staan⊠is er niet, wel installation details met
Geen java home ingesteld, maar na zoeken werd beweerd dat deze niet ingesteld wordt.
De disk doorgezocht en de werkelijke java.exe versie gevonden met die ook in die Add Progams staat, ja 8.0.46, en toch weer een tweede installatie met 17.0.8.0, dus welke gebruikt JOSM nu met die âno homeâ instelling?
Die 8.0.46 gedeinstalleerd en gekeken of JOSM nog wilde starten⊠en dat gaat onverstoorbaar verder, ergo gebruikt blijkbaar 17. Die beide Java versies staan in subs van .\java\bin, nu dus alleen die 17.0.8. Ga die opgehaalde Azul Zulu 21.44 nog installeren en kijk wat dat oplevert.
Tot zover.
Edit: Dingen die ik allemaal niet wilde weten⊠Zulu geinstalleerd zonder die 17.0.8 van het systeem te halen. Zag dat er een variabele bijgesteld werd en nu wijst het systeem dus naar die Zulu in het zoekpad, notabene als allereerste in een oneindig lange regel
Edit2: Nee, Java 8 eraf, Java17 eraf, Azul/Java 21.44 erop, maar met java-options=-XX:+UseParallelGC wil JOSM absoluut niets meer van zich laten zien. Heb er een apostrophe voorgezet in de .cfg met een comment erachter zodat ik weet waarom die regel uit staat.
Heel bedankt voor de hulp (en Firefox startte ook weer netjes op en de JOSM is nog nooit zo snel geladen als nu, maar veel sneller was het al sinds de Windows 10 Insider October preview installatie van 3e week September)
The parallel scavenge collector (Enabled using -XX:UseParallelGC). This is like the previous parallel copying collector, but the algorithm is tuned for gigabyte heaps (over 10GB) on multi-CPU machines. This collection algorithm is designed to maximize throughput while minimizing pauses. It has an optional adaptive tuning policy which will automatically resize heap spaces. If you use this collector, you can only use the the original mark-sweep collector in the old generation (i.e. the newer old generation concurrent collector cannot work with this young generation collector).
I asked GPT5 to analyse the stackoverflow discussion; here is the outcome:
1. Background: What These Flags Actually Do
Both flags relate to Javaâs Garbage Collector (GC) â the part of the JVM that automatically frees up unused memory.
The names can be confusing because they come from older Java versions.
Flag
Collector Type
Targets
Description
-XX:+UseParallelGC
Parallel (Throughput) Collector
Whole heap
Multi-threaded GC designed for throughput, not low pause. Uses all cores in both âyoungâ and âoldâ generations.
-XX:+UseParNewGC
Parallel New Collector
Young generation only
Used with the Concurrent Mark Sweep (CMS) collector for old generation. It speeds up young-gen cleanup while CMS handles long-lived objects.
2. Historical Context
In Java 8 and older, these were two distinct tunable choices.
You could combine ParNew + CMS, or use the all-Parallel collector.
In Java 9+ (including your Java 21 LTS), the Parallel GC became the default and the old CMS (UseParNewGC) was deprecated and removed.
Therefore: -XX:+UseParallelGC is modern, supported, and default. -XX:+UseParNewGC is obsolete and ignored in Java 14+ (will cause an âunrecognized VM optionâ or crash).
3. Why SekeRobâs JOSM Didnât Start
SekeRobâs issue likely comes from one of the following:
Older JRE â e.g. Java 8 or 11, where UseParallelGC interacts differently with CMS or adaptive policies.
Manual GC tuning conflict â e.g. another -XX:+UseG1GC or similar flag already defined.
JOSM launcher incompatibility â some builds wrap the JVM and reject unsupported flags.
In those cases, the JVM refuses to start with an âunrecognized VM optionâ or a GC mismatch error.
For your Java 21 Azul LTS build, UseParallelGC is supported and stable.
4. Comparing the Two (Technically)
Feature
UseParallelGC
UseParNewGC
Available in Java 21?
Yes (default)
No (removed)
Optimized for large heaps (>10 GB)
Yes
No
Optimized for multi-core CPUs
Yes
Yes (but old CMS)
Pause behavior
Slightly longer pauses, higher throughput
Shorter pauses, but lower throughput
Best for
Batch workloads, heavy rendering, large imagery (JOSM fits)
Latency-sensitive servers
Stability
Very high
Deprecated, unsupported
Adaptive tuning
Works with -XX:+UseAdaptiveSizePolicy
Not compatible
5. For Your Machine
Youâre on:
Windows 11 64-bit
Java 21.0.8 Azul (LTS)
12 GB RAM, multi-core CPU (â„8 threads)
The Parallel GC is exactly tuned for this setup.
It will use all cores for cleaning, minimize total pause time, and work well with your 4 GB heap.
Your tasks (rendering imagery, processing large OSM data) benefit from throughput more than ultra-low latency.
So:
-XX:+UseParallelGC
-XX:+UseAdaptiveSizePolicy
is the best combination.
6. For SekeRob (Single CPU / 8 Threads)
For a single physical CPU (8 logical threads via Hyper-Threading), the Parallel GC may not show much benefit, and sometimes even slower startup due to thread overhead.
In that case, a lighter GC like G1GC can be better.
Recommended alternative for him:
-XX:+UseG1GC
This is Javaâs current âgeneral-purposeâ GC â lower pauses, adaptive, and safe across all JVMs since Java 11.
7. Recommendation Summary
Use Case
Java Version
Recommended GC
Notes
Modern (Java 17â21), multi-core, large imagery work (you)
-XX:+UseParallelGC -XX:+UseAdaptiveSizePolicy
Best throughput
Older Java (8â11) or single-core setups (SekeRob)