2010-06-17 22 views
7

Mi occupo di mantenere un'applicazione basata su JSP, in esecuzione su IBM WebSphere 6.1 (IBM J9 JVM). Tutte le pagine JSP hanno un riferimento di inclusione statico e in questo include file sono stati dichiarati alcuni metodi Java statici. Sono inclusi in tutte le pagine JSP per offrire un "accesso facile" a quei metodi statici di utilità. So che questo è un pessimo modo di lavorare, e sto lavorando per cambiare questo. Ma, solo per curiosità, e per sostenere i miei sforzi nel cambiare questo, mi chiedo come questi metodi statici "duplicati" siano ottimizzati dal compilatore JIT JIT.Come il codice Java "duplicato" è ottimizzato dal compilatore JIT JIT?

  • Sono ottimizzati separatamente pur avendo la stessa identica firma?
  • Il compilatore JIT JIT "vede" che questi metodi sono tutti identici e fornisce un codice JIT "unificato"?
+0

Potresti rinfrescarmi e dirmi qual è la sintassi di 'static include'? – OscarRyz

+1

È una inclusione che utilizza una direttiva JSP (<% @ page include = "includeFile.inc"%>). Il contenuto di "includeFile.inc" è staticamente incluso nel codice JSP in fase di compilazione. È possibile eseguire una inclusione dinamica utilizzando un tag JSP () in cui è possibile fare riferimento a un URL e il contenuto è incluso in fase di esecuzione. Usando il tag puoi anche scegliere di fare un include statico. –

+0

+1 per supporto. Sono stato esattamente dove sei ora. L'unica differenza, nel progetto che ho ereditato, era che questi metodi 'static' erano tagliati e incollati in ogni pagina JSP. –

risposta

11

Ogni pagina JSP è compilata in una classe univoca, quindi il codice incluso verrà anche compilato in classi distinte. La JIT non consoliderà le varie copie del codice in una sola.

Per evitare questo, è possibile inserire il codice importato in una vera classe Java e importarlo nel JSP. Quindi non ci saranno duplicati, dal momento che stai riutilizzando la stessa classe.

0

È possibile utilizzare le importazioni statiche da una singola classe: <% @ page import = "static foo. *"%>.

Quindi non hai più tutta questa duplicazione. E a parte l'importazione non avresti bisogno di toccare qualcos'altro.

3

@ La risposta di mdma è corretta per le JVM correnti, ma deve essere qualificata in un paio di aspetti.

  1. Le JIT in future JVM potrebbero supportare ottimizzazioni aggressive per ridurre l'ingombro di memoria del codice nativo.

  2. Il rovescio della medaglia è che, a meno che non si disponga di migliaia di JSP distinti, è probabile che le spese generali di alcuni metodi statici per classe JSP non facciano molta differenza sul footprint di memoria del proprio webapp.