Maison Java javaDidacticiel Comment mesurer et optimiser l'utilisation de la mémoire des fonctions Java ?

Comment mesurer et optimiser l'utilisation de la mémoire des fonctions Java ?

Apr 21, 2024 am 09:51 AM
java Utilisation de la mémoire Portée

Mesurer et optimiser l'utilisation de la mémoire des fonctions Java est crucial, et l'utilisation de la mémoire peut être obtenue via JMX. Afin d'optimiser l'utilisation de la mémoire, vous pouvez utiliser des types de référence, éviter les fuites de mémoire et utiliser un mécanisme de pool ; des cas réels montrent que grâce à la technologie d'optimisation, l'utilisation de la mémoire peut être réduite de 150 Mo à 10 Mo, améliorant considérablement les performances des fonctions.

Comment mesurer et optimiser lutilisation de la mémoire des fonctions Java ?

Comment mesurer et optimiser l'utilisation de la mémoire des fonctions Java

L'utilisation de la mémoire est essentielle aux performances des fonctions Java. Une utilisation excessive de la mémoire peut entraîner une dégradation des performances, voire une OutOfMemoryError. Cet article présentera comment mesurer et optimiser l'utilisation de la mémoire des fonctions Java et fournira des exemples pratiques.

Mesurer l'utilisation de la mémoire

Utilisez l'API Java Monitoring and Management (JMX) pour mesurer l'utilisation de la mémoire de votre application. L'extrait de code suivant montre comment obtenir la taille du tas Java à l'aide de JMX :

import java.lang.management.ManagementFactory;

public class MemoryUsageExample {

    public static void main(String[] args) {
        long heapSize = ManagementFactory.getMemoryMXBean().getHeapMemoryUsage().getUsed();
        System.out.println("Used heap memory: " + heapSize + " bytes");
    }
}

Optimiser l'utilisation de la mémoire

1 Utiliser des types de référence

Utiliser des types de référence comme String et ArrayList au lieu de types primitifs comme String et int) peut réduire l’utilisation de la mémoire. Les types de référence utilisent des pools constants, ce qui signifie que plusieurs instances de la même valeur ne sont stockées qu'une seule fois.

// 使用原始类型
int[] numbers = new int[] { 1, 2, 3 };

// 使用引用类型
ArrayList<Integer> numbers = new ArrayList<>();
numbers.add(1);
numbers.add(2);
numbers.add(3);

2. Évitez les fuites de mémoire

Une fuite de mémoire se produit lorsqu'un objet n'est plus utilisé mais occupe toujours de la mémoire dans le tas. Cela peut se produire en ne publiant pas les références qui ne sont plus nécessaires ou en utilisant des classes internes provenant de portées externes.

public class MemoryLeakExample {

    public static void main(String[] args) {
        ArrayList<Object> list = new ArrayList<>();

        for (int i = 0; i < 10000; i++) {
            list.add(new Object());
        }

        // 未释放列表中的引用
    }
}

3. Utilisez le mécanisme de pool

En utilisant des pools d'objets pour réutiliser des objets, vous pouvez réduire le nombre d'allocations de mémoire. Ceci est particulièrement utile lors de la création d'un grand nombre d'objets temporaires.

import java.util.concurrent.ConcurrentHashMap;

public class ObjectPoolExample {

    private static ConcurrentHashMap<Class<?>, Object> pool = new ConcurrentHashMap<>();

    public static <T> T get(Class<T> type) {
        return (T) pool.computeIfAbsent(type, t -> new Object());
    }

    public static void release(Object object) {
        pool.remove(object.getClass());
    }
}

Cas pratique

Supposons que nous ayons une fonction qui calcule la moyenne d'un grand ensemble. Voici le code optimisé :

import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.LongStream;

public class AverageCalculator {

    public static double calculateAverage(List<Long> numbers) {
        // 使用引用类型并避免内存泄漏
        List<Long> uniqueNumbers = numbers.stream().distinct().collect(Collectors.toList());

        return uniqueNumbers.stream().reduce(0L, Long::sum) / uniqueNumbers.size();
    }

    public static void main(String[] args) {
        List<Long> numbers = LongStream.range(0, 1000000).boxed().toList();
        // 使用 JMX 衡量内存使用
        long before = ManagementFactory.getMemoryMXBean().getHeapMemoryUsage().getUsed();
        double average = calculateAverage(numbers);
        long after = ManagementFactory.getMemoryMXBean().getHeapMemoryUsage().getUsed();
        // 计算内存消耗
        System.out.println("Memory consumed: " + (after - before) + " bytes");
        System.out.println("Average: " + average);
    }
}

En appliquant ces techniques d'optimisation, nous avons pu réduire l'utilisation mémoire de la fonction de 150 Mo à 10 Mo, améliorant ainsi considérablement ses performances.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Tutoriel PHP
1596
276
Vous n'utilisez pas actuellement un écran attaché à un GPU NVIDIA [FIX] Vous n'utilisez pas actuellement un écran attaché à un GPU NVIDIA [FIX] Aug 19, 2025 am 12:12 AM

Ifyousee "YouarenotusingAdisplayAttachedToannvidiagpu", assurez-vous

Qu'est-ce qu'une impasse en Java et comment pouvez-vous l'empêcher? Qu'est-ce qu'une impasse en Java et comment pouvez-vous l'empêcher? Aug 23, 2025 pm 12:55 PM

ADEADLOCKINJAVAOCCURSWHENTWOORMORORETHREADSAREBLOCKEDEDFOREVERS, chaque avance pour la fourniture de laBerce-Organisation de la manière générale;

Exploration des modèles de conception Java communs avec des exemples Exploration des modèles de conception Java communs avec des exemples Aug 17, 2025 am 11:54 AM

Le modèle de conception Java est une solution réutilisable aux problèmes de conception logicielle courants. 1. Le mode Singleton garantit qu'il n'y a qu'une seule instance d'une classe, qui convient à la mise en commun de la connexion de la base de données ou à la gestion de la configuration; 2. Le mode d'usine découple la création d'objets, et des objets tels que les méthodes de paiement sont générés par le biais de classes d'usine; 3. Le mode observateur informe automatiquement des objets dépendants, adaptés aux systèmes axés sur les événements tels que les mises à jour météorologiques; 4. L'algorithme de commutation dynamique du mode de stratégie tel que les stratégies de tri améliore la flexibilité du code. Ces modèles améliorent la maintenabilité et l'évolutivité du code, mais devraient éviter une surutilisation.

Comment utiliser facultatif en Java? Comment utiliser facultatif en Java? Aug 22, 2025 am 10:27 AM

UseOptional.Empty (), facultatif.of (), andoptional.ofnullable () toCreateOptionalistances adepsendingonwherethevaluesabsent, non null, orpossibly null.2.Checkforvalussafelyusingispresent () orpreférall

Fix de peinture à l'huile PS Greyed Out Fix de peinture à l'huile PS Greyed Out Aug 18, 2025 am 01:25 AM

TheoilpaintfilteRinphotoshopisgreyed en avant en toute raison de lacompatibledocumentmodeorlayerType; assurez-vous

Construire des applications Java natives dans le cloud avec MicronAut Construire des applications Java natives dans le cloud avec MicronAut Aug 20, 2025 am 01:53 AM

MicronautisidealforBuildingCloud-NativeJavaApplicationsDuetOtsLowMemoryFootPrint, FastStartuptime et compile-timedependencyInjection, FakingiTeReriortTraditionalFrameworkslikespringbootformricroservices, contenants, andserverlessen

Dépannage Aixhost.exe Utilisation de la mémoire élevée Dépannage Aixhost.exe Utilisation de la mémoire élevée Aug 21, 2025 pm 03:56 PM

Ifaixhost.exeiscausingHighMemoryUsage, VerifyitsLegitimacy, UpdateorReinstallTeassiatedSoftware, ajusterConfigurationsSettingStolimitMemoryUse, DelayitStartup, andmonitormoryBehaviorUsingToolSlikeResourceMeTrandPorceLeMonitorToIdentifyLeaks.

Java Cryptography Architecture (JCA) pour le codage sécurisé Java Cryptography Architecture (JCA) pour le codage sécurisé Aug 23, 2025 pm 01:20 PM

Comprendre les composants de base JCA tels que MessagediGest, Cipher, KeyGenerator, SecureRandom, Signature, Keystore, etc., qui mettent en œuvre des algorithmes via le mécanisme du fournisseur; 2. Utilisez des algorithmes et des paramètres forts tels que SHA-256 / SHA-512, AES (clé 256 bits, mode GCM), RSA (2048 bits ou supérieur) et SecureRandom; 3. Évitez les clés à code dur, utilisez des clés pour gérer les clés et générez des clés via des mots de passe dérivés en toute sécurité tels que PBKDF2; 4. Désactiver le mode ECB, adopter des modes de chiffrement d'authentification tels que GCM, utiliser des IV aléatoires uniques pour chaque cryptage et des caissiers clairs dans le temps

See all articles