2011-09-29 11 views
5

Capisco che Java faccia ottimizzazioni a tutti gli effetti e possa ottimizzare gli switch in base a quanti casi ci sono, se lo switch è scarso o denso e se il codice è abbastanza caldo da permettere al JIT di ottimizzare il codice. Mi stavo solo chiedendo se ho bisogno di fornire ulteriore "assistenza" come usare bitwise e sulla variabile da testare o spostare a bit il bit su un numero "più bello", supponendo che il codice sia davvero molto caldo. "più bello" essendo 0xXX anziché 0xFFXX. Ci sono documenti JIT hotspot che specificano specificamente cosa è richiesto? Piuttosto che "mantienilo sempre aggiornato sulle linee guida generali di programmazione di xxx".Quanto programmatore "assist" Java ha normalmente bisogno di passare a JIT su una tabella di distribuzione?

risposta

0

Poiché Java stesso viene eseguito su un virtual machine, a meno che non manchi qualcosa qui, non penso che ci sia un modo semplice per farlo.

Così con Java, si ottiene una scatola nera di sorta, e per ottimizzare di più è rischioso, IMHO.

Per il JIT whitepaper Hotspot, see here

+2

Avevo paura che questa sarebbe stata la risposta. Mi chiedevo solo le condizioni per hotspot o JIT comparabili per ottimizzare un interruttore denso in una tabella di dispacciamento _dopo_ è stato trovato caldo e scelto per l'ottimizzazione. –

+0

Capisco cosa intendi lì. Hmm, metterò un Bounty su questa domanda una volta che posso. – Coffee

1

ci non sta per essere una risposta facile a questo.

Vorrei prendere questa domanda a hotspot-dev - potrebbero essere in grado di fornire ulteriori informazioni su come ciò accade.

Le altre persone che possono avere interessanti prospettive su questo appendere fuori sulla JVM-l mailing list (Charlie Nutter, Remi Forax, John Rose, etc.)

2

La decisione per entrambi tableswitch o lookupswitch è già fatto dal compilatore javac. Non ho mai sentito dire che il JIT prova a trasformare uno lookupswitch in uno tableswitch.

Quindi il primo passo dovrebbe essere un controllo su quale codice bytec javac ha tradotto il tuo switch.

+0

Quindi, quali sarebbero le ipotesi di codifica sicure (specifiche regole interne del compilatore) per assicurarsi che javac lo faccia in un tableswitch? Piuttosto che "indovinare" e fare tentativi ed errori e andare nel bytecode, che sembra "sporco" da fare. –

Problemi correlati