in .NET, vous pouvez spécifiquement compiler vos projets dans les paramètres "Débogage" ou "Libération", publication avoir plus d'optimisations. Je sais que cela est considéré comme inutile en Java, car la gigue fait ces optimisations. Quelle est la raison de la différence? (Signification, pourquoi une compilation pré-"Jitter" requise / utile) p>
Pourquoi est-il jugé nécessaire dans .NET / CLR, mais pas en Java / JDK? P>
4 Réponses :
Je pense qu'ils peuvent facilement être introduits dans Java. En gros, des moyens de construction de débogage: incluent les symboles de débogage et désactiver l'optimisation. La libération est vice versa. Les objectifs de débogage et de publication sont générés par Visual Studio et ne sont pas obligatoires. Vous pouvez écrire votre script MsBuild sans vs. Vous pouvez donc créer un script de construction pour Java avec des cibles de débogage et de libération. P>
En .NET, si vous utilisez une version de version, votre propre code n'est pas facilement débordement. En Java, il n'y a pas un tel problème.
@ RIpper234 Voici comment Java et .NET fonctionnent. La version de version / débogage ne vient que la collection de commutateurs de compilateur. rien de magique derrière eux
Les compilateurs Java antérieurs avaient un drapeau -o pour activer les optimisations de compilation (code source). Depuis JDK 1.2, le drapeau -o n'avait aucun effet et je crois que le drapeau a été supprimé avec JDK 1.4. Comme l'exécution Java est améliorée, il s'est probablement devenu de plus en plus raisonnable pour déléguer l'optimisation à la JRE, car le compilateur de code source n'a absolument aucune connaissance du matériel, qui finira éventuellement à exécuter le code. P>
articles comme Celui-ci et le Documentation du drapeau CSC / Optimiser indique que l'optimisation a très peu d'effet (le cas échéant?) Sur la génération réelle du code CLR. Le drapeau / optimiser le drapeau définit cependant un drapeau dans l'ensemble compilé, qui contrôle le niveau d'optimisation autorisé à être appliqué par le temps d'exécution. Je n'ai pas essayé, mais j'ai lu que le code optimisé de l'exécution n'est pas nécessairement débordement, bien que les informations de débogage soient incluses (les drapeaux / optimisation et / de débogage peuvent être activées ou désactivées indépendamment pour le compilateur C #). P>
ι Ne voyez pas vraiment le point de contrôler le niveau d'optimisation d'exécution au moment de la compilation. Le Java Runtime a plusieurs Options détaillées pour contrôler Performances et optimisation d'exécution, mais celles-ci doivent être définies lors du démarrage de la JRE et non au moment de la compilation. P>
Sun regarder Javac CODE> COMPILER Est-ce que EM> a le concept d'informations de débogage pouvant être (éventuellement) omis de la sortie de la classe compilée. -g Code> Options d'indicateur: P> -g
Generate all debugging information, including local
variables. By default, only line number and source
file information is generated.
-g:none
Do not generate any debugging information.
-g:{keyword list}
Generate only some kinds of debugging information,
specified by a comma separated list of keywords.
Valid keywords are:
source
Source file debugging information
lines
Line number debugging information
vars
Local variable debugging information
http://blogs.msdn.com/b/ericlippert/archive/2009/06/11/What-Does-The-Optimize-switch-De.aspx a une belle liste d'optimisations effectuées lorsque la Optimiser le commutateur est allumé (il est activé pour la libération, off pour débogage). P>
Le compilateur Java pourrait également faire l'un d'entre eux, et cela pourrait en faire par défaut de toute façon. Ils sont surtout de petites victoires. P>
Weeeeell, qu'est-ce qu'ils font à .net?
Connexes: Stackoverflow. com / questions / 1313922 / ...
Pouvez-vous expliquer un peu, ce n'est pas un expert .NET du tout, je ne peux pas comprendre votre question.