2010-10-20 3 views
2

Je suppose que la dernière version de Java fournirait de meilleures performances.Comment réduire le temps de démarrage et la consommation de mémoire d'un programme Java?

Je cherche un moyen de mettre en œuvre l'isolation des composants logiciels à partir de boucles sans fin ou de fuites de mémoire. Android isole chaque application dans son propre processus, Google Chrome isole chaque onglet dans son propre processus.

Mon principal inconvénient est que java prend tellement de temps pour démarrer et je voudrais aussi réduire la consommation de mémoire.

Existe-t-il une autre génération ou un démarrage plus contrôlé qui accomplira cela?

+2

De quel type de programme java s'agit-il ici, bureau, application web? Est-ce réellement Java qui est le problème ou est-ce juste votre programme? – willcodejavaforfood

+0

Testez-le avec un profiler pour savoir à coup sûr –

+0

Il s'agit d'une application Web, mais je ne peux pas en dire beaucoup à ce sujet. Sur java 5, si vous n'avez rien d'autre qu'une classe principale avec la méthode principale et println, il faut encore un moment pour que println écrisse à l'écran (où vous pouvez l'obtenir instantanément avec echo' ou 'date' ou d'autres commandes). La question de la mémoire n'est pas aussi importante que la question du temps de démarrage. –

Répondre

2

Si le démarrage rapide est votre objectif, Java sur un PC n'est peut-être pas votre meilleur choix. Cela va prendre quelques secondes parce que c'est le temps qu'il faut pour charger la VM à partir du disque. Si vous voulez que votre application démarre plus rapidement, il est facile d'obtenir un écran de démarrage, il suffit de créer un module qui ne charge que votre écran de démarrage, attend qu'il s'affiche complètement puis utilise la réflexion pour relier votre "Real" module.

(Utilisez la réflexion car sinon, elle va insérer l'ensemble de votre programme à travers les références avant de démarrer la principale - du moins c'est comme ça que ça fonctionnait).

Si vous parlez des performances d'exécution, vous ne serez pas plus rapide en changeant de langue, Java est aussi rapide que possible. Vous pourriez être en mesure d'obtenir un coup de pouce en convertissant en C/C++ et de le réécrire pour convenir à ces plateformes (Moins d'OO, allocations de pile au lieu de heap, etc.), sinon aucune des autres langues d'usage général n'est proche de Java .

Si vous avez vraiment besoin du démarrage rapide, il se peut qu'il y ait quelques astuces en fonction de ce que vous faites. J'ai vu des projets qui essayaient de garder une machine virtuelle Java en cours d'exécution dans votre barre d'outils et vous permettaient de faire des demandes (dites-lui de démarrer une application). Ceci était plus rapide mais nécessitait des exigences supplémentaires de l'utilisateur (Chargement de cet outil supplémentaire)

Une autre possibilité - si vous démarrez/arrêtez de petites tâches en permanence et que c'est la raison pour laquelle la startup vous dérange alors vous pouvez certainement l'accélérer en le laissant fonctionner de manière invisible. Ayez juste votre application Java ouvrir un socket et écoutez les commandes puis créez un petit script .EXE ou shell qui peut démarrer votre programme s'il n'est pas en cours d'exécution ou envoyer des commandes à ce socket si c'est le cas. Cela éliminerait complètement les startups après la première exécution.

1

En général, Java a un temps de démarrage beaucoup plus long que les autres langues. Si vous collaborez avec Java sur une application de bureau, beaucoup de choses comme le temps de démarrage est déterminé par le JRE installé sur l'ordinateur du client, que vous ne pouvez pas contrôler. En ce qui concerne les «fuites de mémoire sans fin» ... Java ne fuit pas la mémoire. Si votre programme le fait, corrigez-le.

+1

+1 "Votre programme"! –

0

C'est une deuxième réponse, car il est complètement différent et mon autre a trop longtemps :)

Essayez de compiler - je pense que GCC peut le compiler. Cela pourrait presque complètement éliminer votre démarrage. Je crois que Jikes était un compilateur windows java d'IBM, mais je ne sais pas si c'est toujours le cas.

Notez que le code compilé sera probablement plus lent que le code JVM pour les applications à exécution longue.

Questions connexes