J'ai écrit un fichier pour tester l'utilisation de la mémoire de PHP. J'ai découvert que la mémoire occupée par les variables après la publication est différente entre les tableaux et les objets. Voici le code exécuté dans PHP 7.0 CLI. mode.
Tableau :
<?php
fonction convertir($taille){
$unit=array('b','kb','mb','gb','tb','pb');
echo @round($size/pow(1024,($i=floor(log($size,1024)))),2).$unit[$i]."\n";
}
fonction a(){
$une = [];
pour($i=0;$i<1000000;$i++){
$une[$i] = $i;
}
convert(memory_get_usage(true));
}
convert(memory_get_usage(true));
// 2M
un();
convertir (memory_get_usage (true))
// 2M
Sortie :
2M
34M
2M
Objet :
<?php
fonction convertir($taille){
$unit=array('b','kb','mb','gb','tb','pb');
echo @round($size/pow(1024,($i=floor(log($size,1024)))),2).$unit[$i]."\n";
}
fonction a(){
$a = nouvelle ClasseStd ;
pour($i=0;$i<1000000;$i++){
$a->$i = $i;
}
convert(memory_get_usage(true));
}
convert(memory_get_usage(true));
un();
convertir(memory_get_usage(true))
Sortie :
2M
68M
32 M
Cette question est très compliquée. Elle concerne le mécanisme de récupération de place de PHP, je ne le comprends pas très bien. Je vais partager avec vous ce que je comprends.
Chaque processus PHP se verra attribuer un tampon racine. Lors de l'exécution, chaque référence à la structure de données PHP sera placée dans ce tampon. Une fois la limite supérieure du tampon atteinte (généralement 10 000), PHP sera déclenché. pour nettoyer certaines ressources invalides.
Si vous modifiez le nombre de boucles à 5 000 fois, le garbage collection ne sera pas déclenché. La valeur de la mémoire des deux dernières fois devrait être la même. Vous pouvez l'essayer.
J'ai lu un article et j'espère qu'il aidera
Collecte des déchets