Ho osservato alcuni fenomeni strani in programmazione per un po 'di tempo, dal momento che overcommit è abilitato di default sui sistemi Linux.Perché così tante applicazioni allocano una quantità incredibilmente grande di memoria virtuale mentre non ne usano nessuna?
Mi sembra che praticamente tutte le applicazioni di alto livello (ad esempio l'applicazione scritta in linguaggio di programmazione di alto livello come Java, Python o C# incluse alcune applicazioni desktop scritte in C++ che utilizzano librerie di grandi dimensioni come Qt) utilizzino una quantità folle di memoria operativa virtuale. Ad esempio, è normale che il browser Web assegni 20 GB di RAM mentre utilizza solo 300 MB di esso. O per un ambiente dektop, server mysql, praticamente ogni applicazione java o mono e così via, per allocare decine di gigabyte di RAM.
Perché sta succedendo? Qual è il punto? C'è qualche vantaggio in questo?
Ho notato che quando disattivo overcommit in linux, nel caso di un sistema desktop che esegue in realtà molte di queste applicazioni, il sistema diventa inutilizzabile in quanto non si avvia nemmeno correttamente.
Ok, ma java non viene utilizzato solo su linux. Il overcommit è abilitato su tutti i sistemi operativi in questi giorni? Se non lo è (e dubito che lo sarebbe) come è possibile che questi SO eseguano anche questi programmi, mentre non sembra possibile su Linux con overcommit disabilitato (non potrei letteralmente nemmeno avviare il sistema operativo quando Ho disabilitato l'overcommit, i requisiti di memoria erano enormi). – Petr
@Petr: "Overcommit" - distribuire più memoria virtuale di quanta c'è la memoria fisica - è in effetti l'impostazione predefinita su Windows e Linux. E questo è sufficiente per far sì che molti sviluppatori non si preoccupino veramente del resto del mondo informatico. Uno dei sistemi operativi che non ha "fatto" memoria virtuale è stato, per esempio, Amiga OS 3.x - e anche quello non ha mai "fatto" Java. – DevSolar