HotSpot e JIT Compiler, entendendo como funciona!
Vimos no post anterior como a JVM funciona e como ela detecta e analisa os pontos “quentes” da aplicação. Vimos que os mecanismos que fazem essa análise e melhoria são: HotSpot e JIT(just-in-time compiler) Compiler. Neste post, iremos entender como eles funcionam.
Introdução
Antes de falarmos mais profundamente sobre cada técnica, tentaremos dar um resumo rápido sobre cada uma delas, como segue abaixo:
HotSpot
Quando se executa a aplicação na primeira vez, ela é executada em modo interpretado, ou seja, não é feita nenhuma otimização inicial. Durante a utilização da aplicação, são feitas estatísticas de runtime(durante a execução). Com essas estatísticas é verificado os pontos quentes, os trechos de códigos mais executados do programa. Esses trechos são otimizados, utilizando técnicas bem parecidas com as dos compiladores tradicionais, mas, lembrando que isso tudo é feito em runtime. O HotSpot utiliza a idéia de que apenas 10% do código é executado em 90% do tempo, então a otimização destes pontos isolados permitem um ganho de performance e em até algumas vezes maior do que a compilação tradicional, pois os dados são obtidos diretos da execução real do programa.
JIT Compiler
Compiladores tradicionais(nativos), as otimizações são feitas em tempo de compilação, reordenando instruções, colocando métodos inline(que será explicado mais a frente), otimizando para a máquina que está compilando etc. Isso claro para linguagens como C++ etc.
No Java, isso não funciona: pelo simples fato de que as classes são compiladas em arquivos separados. O compilador JIT irá pegar o bytecode e traduzir tudo de uma vez para a linguagem de máquina antes da execução, esta é a estratégia utilizada pela maioria das VMs. Isso pode ser até um pouco lento inicialmente, mas veremos mais a frente que isso não será um problema.
Aprendendo mais…
O Java por não compilar para código nativo(código da máquina), ou seja, ele não tem um bytecode/executável “preso” a máquina onde ele foi compilado, ele pode e vai usar estratégias focadas no sistema operacional e no hardware usados no momento de execução, podendo até em alguns momentos invocar instruções específicas do processador da máquina.
Em alguns momentos a VM pode perceber que um determinado código já não é mais importante e descartar suas compilações ou até perceber que a otimização que ele fez na primeira vez não foi tão boa assim e pode ser melhorada, dessa forma, ele vai novamente e aplica um novo tipo de otimização e esse ciclo pode ocorrer várias e várias vezes, ou seja, ele pode ficar sempre tentando otimizar seu código ao máximo.
Dessa forma, o seu código irá ficar cada vez mais rápido, devido principalmente a evolução constante da JVM e do JIT. Mesmo programas mais antigos podem ter sua performance melhorada simplesmente atualizando a JVM, sem precisar modificar qualquer linha de código.
Isso já não acontece com um programa nativo(Ex: Word, Excel), onde teríamos que esperar do fabricante uma versão nova recompilada, tanto para o SO atual como para o hardware, processador etc. Quando o fabricante faz uma melhoria no programa, Word por exemplo, você terá que baixar uma atualização dele, um novo “executável”, isso porque os programadores refizeram o código, adicionaram suas melhorias e compilarão novamente, gerando assim o executável.
Essa otimização funciona também para linguagens que rodam em cima da JVM, como o Ruby e várias outras.
Técnica de Inline
Inline de métodos é uma das técnicas utilizada pelo JIT para evitar fazer mais de uma chamada do método.
Veremos um exemplo bem comum:
public class TesteLoop { public static void main(String[] args) { for (int i = 0; i < new ArrayList().size(); i++) { metodoUM(); } metodoDOIS(); } public static void metodoUM() { System.out.println("bloco de codigo do metodo UM"); metodoDOIS(); } public static void metodoDOIS() { System.out.println("bloco de codigo do metodo DOIS"); } }
No métodomain , existe um loop, onde o mesmo faz referencia ao metodoUM() , ele será executado neste loop 20 vezes. Neste momento o HotSpot irá verificar que esse método main é um código quente, e o JIT irá fazer o inline do método:
public static void main(String[] args) { for (int i = 0; i < new ArrayList().size(); i++) { System.out.println("bloco de codigo do metodo UM"); } metodoDOIS(); }
Já ométodoUM() , possui também uma chamada para um outro método, o metodoDOIS() …
public static void metodoUM() { System.out.println("bloco de codigo do metodo UM"); System.out.println("bloco de codigo do metodo DOIS"); } public static void metodoDOIS() { System.out.println("bloco de codigo do metodo DOIS"); }
No final, com o inline “aplicado” a nossa classe ficaria algo semelhante a isso:
public class TesteLoop { public static void main(String[] args) { for (int i = 0; i < new ArrayList().size(); i++) { System.out.println("bloco de codigo do metodo UM"); System.out.println("bloco de codigo do metodo DOIS"); } System.out.println("bloco de codigo do metodo DOIS"); } }
O HotSopt também não irá verificar somente a quantidade de vezes que o método é executado, mas também o empilhamento de métodos e chamadas de um método para outro(jumps). Omain chama ometodoUM() , que ele chama ometodoDOIS() , há um empilhamento de métodos. Outro exemplo neste caso:
Exemplo:
public class Teste { public static void main(String[] args) { outroMetodo(); } public static final void outoMetodo() { System.out.println("Funcionalidade do método: OutroMetodo"); } }
Inline:
public class Teste { public static void main(String[] args) { System.out.println("Funcionalidade do método: inline"); } }
O HotSpot detecta que esse método está sendo chamado várias vezes, seja por um loop ou por outros métodos, quando percebe que o método está sendo executado várias vezes, então ele aciona o JIT, que “extrai” o conteúdo do método (outroMetodo ) e adiciona diretamente no método principal(teste ). Essa quantidade de vezes pode e vai variar dependendo do tipo de perfil utilizado pela JVM, claro que o exemplo aqui foi apenas para ilustrar, mas para você ter uma ideia a JVM por padrão aguarda 1.500 invocações ao método até ele ser compilado, já no perfil server, ele irá aguardar em torno de 10.000 invocações.
Tipos de Perfis
Quando desenvolvemos sistemas, sabemos que cada aplicação tem as suas necessidades, sejam de performance, escalabilidade e responsividade. A JVM oferece alguns perfis que adaptam o “motor” JIT e outras características dela para atingir esses objetivos.
Temos então basicamente dois tipos de perfis: Cliente (client) e Servidores (server).
Perfil Cliente
Definindo o perfil “client” algumas configurações e comportamentos serão tomados para com a aplicação. Esse perfil é utilizado para aplicações voltadas para o usuário final, como aplicações desktop, onde a mesma tem que ser inicializada rapidamente, embora depois não precise de tanta performance.
Neste perfil precisamos que a JVM perca menos tempo no startup da aplicação, para que o usuário veja o resultado mais rapidamente, em outras palavras, precisamos que a aplicação Java “abra” mais rápido. Mas isso tem um custo, que é ter um JIT que irá fazer menos otimizações a longo prazo. O foco deste perfil é de consumir menos memória, então, para isso ela deixa de fazer certas otimizações no JIT para evitar o uso excessivo de memória, deixando até de fazer as vezes o inline de métodos.
Perfil Servidor
Já neste perfil, não temos a preocupação que a aplicação seja iniciada rapidamente, como um sistema que está rodando em um cliente, onde ele pode esperar até que o sistema inicialize, ou um sistema “intranet”, ou até um site ou mesmo um fórum, mas temos uma grande preocupação em performance a longo prazo.
Ele irá demorar mais para startar/inicializar, por outro lado o JIT irá rodar no seu modo mais “completo”, com suas melhores estratégias de otimização para melhorar o desempenho da sua aplicação. Ao contrário do perfil de Cliente, o uso de memória deste tipo de perfil será maior e utilizado com mais frequência, por outro lado, iremos ganhar uma performance maior e a longo prazo, como o uso de inlines para evitar jumps(chamadas de métodos encadeados, como explicado no inline mais acima) dentre outras técnicas que visam a performance, escalabilidade e estabilidade da aplicação.
Para entender melhor onde cada perfil pode se encaixar, temos uma tabelinha bem simples para nos ajudar a ilustrar melhor:
Arquitetura | CPU/RAM | OS | Perfil |
i586 | qualquer um | MS Windows | Client |
AMD64 | qualquer um | qualquer | Server |
64-bit SPARC | qualquer um | Solaris | Server |
32-bit SPARC | 2+ cores & > 2GB RAM | Solaris | Server |
32-bit SPARC | 1 core or < 2GB RAM | Solaris | Client |
i568 | 2+ cores & > 2GB RAM | Linux ou Solaris | Server |
i568 | 1 core or < 2GB RAM | Linux ou Solaris | Client |
Você pode ter mais detalhes sobre os perfís Cliente e Servidor neste link:
http://www.oracle.com./technetwork/java/hotspotfaq-138619.html#compiler_types
Caso o desenvolvedor não saiba como utilizar esses perfis, ou apenas não queira definir um, nas versões mais recentes da HotSpot existe um recurso chamado ergonomics, onde a responsabilidade de escolher o melhor perfil é da própria VM, e não só escolher entre client e server, mas escolhe o tamanho da heap, algoritmo de coleta de lixo(GC), características baseadas no hardware e processador, o tamanho da memória e etc.
Não temos como entrar a fundo em ergonomics aqui, nosso foco é outro, então deixo com vocês algumas fontes interessantes de pesquisa para tentar entender melhor sobre isso:
Ergonomics no Java 7: http://docs.oracle.com/javase/7/docs/technotes/guides/vm/gc-ergonomics.html
Ergnomics no Java 5: http://docs.oracle.com/javase/1.5.0/docs/guide/vm/gc-ergonomics.html
Se você quer saber mais sobre como otimizar, quais parâmetros utilizar e quais os corretos para cada tipo de máquina, passo alguns links de leitura obrigatório abaixo:
http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html
http://docs.oracle.com/javase/7/docs/technotes/guides/vm/server-class.html
Concluindo
Entender melhor como a VM e as técnicas utilizadas funcionam, será bem útil para o seu dia a dia. Ao saber como é feito o inline, como o JIT trabalha, como a HotSpot sabe qual método está sendo executado com frequência, irá lhe ajudar na tomada de decisões, codificação, arquitetura e estrutura da sua aplicação.
A VM do Java é bem poderosa e nos ajuda (e muitas vezes nem percebemos) a melhorar o desempenho do nosso código. Hoje na JVM existem várias outras estratégias de otimização que foram incluídas, como o mecanismo de Garbage Collector por exemplo, que é um dos mais importantes e poderosos mecanismos que a VM possui. Falamos aqui da HotSpot/JIT, que é da VM da SUN/Oracle, mas temos outras VMs de outros fornecedores, como o JRockit da BEA.
Tirar proveito ao máximo da VM é algo que podemos fazer e está em certa parte, diretamente ligada a como você codifica e faz a sua aplicação. Aprendendo de forma correta como utilizar a linguagem a seu favor, você terá esse ganho facilmente. Por isso que no curso de Java e Orientação a Objetos da TriadWorks, sempre estamos passando para os alunos essa premissa que achamos muito importante.
Muito bom este post, sou fã deste site. 🙂
Olá Junior, muito obrigado pelo feedback.
Abraços e qualquer dúvida estamos aqui 😉
Parabéns. Texto explica bem os conceitos.
Next time I read a blog, Hopefully it does not disappoint me as much as this one. I mean, I know it was my choice to read, however I truly believed you would have something useful to say. All I hear is a bunch of crying about something that you could possibly fix if you werent too busy looking for attention.
I was excited to uncover this site. I need to to thank you for your time for this particularly wonderful read!! I definitely savored every part of it and I have you saved to fav to see new stuff in your site.
Good post. I learn something totally new and challenging on blogs I stumbleupon on a daily basis. Its always useful to read content from other authors and practice something from their websites.
Everything is very open with a clear clarification of the challenges. It was really informative. Your site is useful. Many thanks for sharing!
The very next time I read a blog, Hopefully it does not fail me as much as this particular one. After all, I know it was my choice to read through, but I actually believed you would probably have something useful to say. All I hear is a bunch of whining about something that you could fix if you were not too busy searching for attention.
buy cialis online buy tadalafil 5mg generic best over the counter ed pills
tadalafil 5mg sale tadalafil 40mg tablet buy ed pills gb
cialis 40mg generic cialis 5mg oral buy ed pills paypal
I do not even understand how I finished up right here,“강남풀싸롱” however I believed this publish used to be great.I don’t recognize who you might be but certainly buy ed pills paypal
order altace 10mg altace 10mg over the counter buy arcoxia 120mg generic
cheap levitra 20mg where to buy hydroxychloroquine without a prescription buy generic hydroxychloroquine 200mg
ramipril usa order amaryl 4mg generic etoricoxib 120mg ca
altace 5mg price altace 5mg ca buy arcoxia 60mg
vardenafil tablet plaquenil 400mg over the counter buy plaquenil pills
mesalamine 800mg us astelin online buy brand avapro
buy mesalamine 400mg generic asacol pill buy avapro 150mg pills
asacol 400mg price purchase astelin for sale order irbesartan online cheap
clobetasol where to buy amiodarone 100mg cheap order amiodarone 200mg without prescription
diamox 250mg price imuran ca order imuran 50mg
acetazolamide 250mg usa buy generic imdur for sale order azathioprine pill
buy acetazolamide online imuran 50mg uk buy imuran 50mg online cheap
digoxin 250mg pill lanoxin 250 mg pills buy molnupiravir tablets
purchase lanoxin for sale order lanoxin 250mg for sale molnunat over the counter
עיסוי אירוטי; נערות ליווי ; נערות ליווי תמונות אמיתיות קטיה
נמצאת בדירה פרטית במרכז תל
אביב. גילי היא נערת ליווי
מנוסה , עיסוי בירושלים – מעסה מקצועית בעלת הכשרה מתאימה מזמינה אותך לשעת טיפול
טוב ומפנק! לקראת חגיגות יום הולדת לאדם קרוב, הצעות נישואין, ימי נישואין או
כל יום אותו תרצו לציין כיום
מנוחה נעים ומפנק – הרשו לנו להמליץ לכם על בילוי במרכז ספא רעננה אשר יאפשר לכם וליקיריכם לנוח, לנשום וליהנות מאוד.
כמו עם כל טיפול ספא, אנו ממליצים בחום כי תדאגו מראש לידע את המטפל או המטפלת שעושים לכם מסאג’ על כל בעיה רפואית, כאב זמני או קבוע, או פציעות שאתם סובלים מהם, ואם יש רגישות לחומרים מסוימים שהמטפל
או המטפלת עשויים לעשות בהם שימוש כחלק מן הטיפול (רכיבים שעשוים להמצא בשמנים ארומטיים / שמני עיסוי / קרם עיסוי
וכדומה). עם זאת, עיסוי זה נוטה להיות עמוק יותר ויותר אינטנסיבי, ומתמקד יותר
בתנועה ובתקשורת בין המטפל למטופל ופחות בהרפיה,
וזאת על מנת להעניק טיפול ממוקד.
My website :: דירה דיסקרטית בהרצליה
In an entire body massage, a therapist compwnies
the palms, feet, neck, shoulder, again, legs,butts and likewise
variouys other components of the body. When a therapist deals with the body,
it helps in alleviating pain and likewise stress within the physique.
Full body massage therapy enhances the circulation of blood
within the body. Thai therapeutic massage therapy, Swedish therapeutic massage
therapy, deep cells massage remedy, aromatherapy therrapeutic massage therapy– do you know there aare a lot
of therapeutic massage treatments readily obtainable to us
in the present day? New tissues can set up and broken cells can fix themselves.
It has handbook programs for the upper again, the decreease again, the
full back aand it may pinpoint a selected location. Although they are moree widespread amjongst
men, each men and women can benefit tremendously frtom a fulll body massage that’s administered by a completely qualified masseuse.
Complete body massage therapy can helps a personal distress and loosen up.
However,engaging in a full body massage will assist with this
ttension immensely. You will want a massage pillow or mat that lets you tuurn the heat
on or off.
Visit my blog … https://yourkinkinpink.com
digoxin 250 mg price purchase molnupiravir sale buy molnupiravir 200 mg
naprosyn 500mg price omnicef ca prevacid ca
buy naproxen 500mg online cheap cost prevacid buy prevacid 15mg for sale
order naprosyn online cefdinir 300mg oral buy generic lansoprazole
coreg 25mg cheap buy aralen pills for sale order aralen 250mg generic
proventil generic oral pyridium buy pyridium 200 mg
buy proventil buy albuterol for sale buy pyridium
buy singulair pill buy cheap amantadine how to buy dapsone
montelukast 5mg sale order symmetrel 100mg sale buy cheap avlosulfon
baricitinib us cost lipitor 20mg order lipitor pill
Я восхищен тем, как автор умело объясняет сложные концепции. Он сумел сделать информацию доступной и интересной для широкой аудитории. Это действительно заслуживает похвалы!
singulair online buy order dapsone 100mg pill buy dapsone for sale
כל תושב או אורח יכול להזמין שירותי ליווי בנתניה לעיסוי מפנק.
ראשית, נתניה היא עיר גדולה ומגיע לכל אחד
מהתושבים בה לקבל עיסוי מפנק. מלבד האמור לעיל, נתניה היא עיר תיירות ויש בה אווירה ייחודית.
מה הקשר בין תיירות לבין ספא מפנק בנתניה?
הבחורות המופיעות באתר ידועות כנשים מומחיות בתחום עיסוי מפנק לגבר, קשר לא מחייב ועוד.
יש לציין כי המקום בו מקבלים עיסוי אירוטי בנתניה חשוב לא פחות ממי שמבצע את המסאז’.
כדאי להזמין עיסוי אירוטי בנתניה לבית מלון, לבית הפרטי או לדירות דיסקרטיות.
מחפשים עיסוי אירוטי באילת? בודי אנד סול – כל סוגי העיסויים
באיזור אילת והסביבה, עיסוי אירוטי באילת יכול
להיות פתרון לכל בעיה אינטימית. כל העיסויים מבוצעים
על ידי מעסה בכירה, עיסוי רקמות
עמוק,מסאג באילת – שילוב מושלם עם החופשה שלכם.
כל העיסויים מבוצעים על ידי מעסה בכירה, עיסוי
טנטרה. בחרו מעסה עכשיו והתפנקו!
בחרו בעצמכם מטפל/ת בעיסוי ממגוון המטפלים המקצועיים והמנוסים
העומדים לרשותכם באתר. אך אם אתם מעוניינים בעיסוי מפנק באילת לצורכי הנאה ורגיעה או לרגל אירוע שמחה מסוים, תוכלו לקרוא במאמר זה על שלושה סוגי עיסויים
אשר מתאימים למטרה זו ויעניקו לכם יום בילוי מפנק
ואיכותי במיוחד אשר סביר להניח שתרצו לחזור עליו שוב כבר בשנה שאחרי.
לרוב תוכלו למצוא חבילות עיסוי מפנקות במכוני ספא מגוונים אשר מציעים יום פינוק שלם שכולל עיסויים לכל אחד מכם, ארוחה ושימוש במתקני המקום.
my site; https://israelkaratefedetation.com
cost nifedipine 30mg buy perindopril no prescription order generic allegra
order adalat 30mg generic buy fexofenadine medication buy fexofenadine online cheap
מחפש דירות דיסקרטיות בצפון?
מחפש דירות דיסקרטיות בארץ?
דירות דיסקרטיות פרטיות נמצאות
רחוק מכל מקום בו מכיריםאותך וממש לידך.
אין הבדל של ממש בין דירות דיסקרטיות לחדרים בבית מלון.
גררנו את עצמנו מהמזרן ונסע
ממש עד סנדוויץ’ כפר לארוחת ערב.
שאלה נפלאה! עד לרגע בו המעסה יעסה אתכם, לא באמת תדעו מהו טיבו,
מהן היכולות שלו ומה הוא יכול
להציע לכם. אבל, גם אם נניח שתהיינה פחות עוסקות בזנות עדיין יתכן שאלה
שתישארנה בעיסוק בזנות-מצבן יורע יותר.
אם יש לך מצבים רפואיים מסוימים כגון לחץ דם גבוה, סוכרת, מחלות לב או דליות, עליך לפנות לרופא אם אתה מתכוון לקבל עיסוי באבנים חמות.
עם זאת, ישנם אנשים המעוניינים
לעבור סט של עיסויים בדרום רפואיים במטרה להיפטר מכאבים או לשקם מצבים גופניים שונים.
ישנם אנשים שמקבלים עיסויים למטרות פינוק
וכייף בביתם ולפעמים מגיעים
לדירה דיסקרטית בבאר שבע אך גם ישנם אנשים המבקשים לעבור עיסוי בדרום בעקבות כאב
מסוים. רוצים לדעת איפה תוכלו למצוא דירה דיסקרטית
איכותית על כל המשתמע מכך?
לכן, כדאי לוודא כי ישנה התאמה בין סוג העיסוי הנדרש על ידכם
ובין תחום ההתמחות של המעסה.
כן חשוב לדעת, כי כדאי לעשות את העיסוי בבית
רק בשעות השקטות ביותר ביום, ובעת שהבית שלכם בעצמו
שקט (בעת שהילדים במסגרות לדוגמא).
Look at my web-site :: ebonyescortnewyork.com
עיסוי רפואי הוא עיסוי יעיל ומדויק מאוד.
אז מה זה בעצם ולמה מדובר בחוויה שקשה מאוד לשכוח?
קחו חלק בחוויה של עיסוי אירוטי ותגלו צד חדש לגמרי של רמת גן.
מדובר בחוויה מדהימה, עוטפת ומרגיעה המשאירה את כוח הכבידה
וחיי היום יום הרחק ביבשה. טיפולי ספא שונים ומסאג’ים בפרט, נערכים לעתים קרובות בעירום כמעט
מלא, כאשר המטופל מתבקש להסיר את בגדיו ולהשאר בתחתונים בלבד.
האירוח על בסיס פנסיון מלא, ומבוסס על מזון אורגני.
בתוךזה נכללים גם שיאצו בהריון- שהוא טיפול שיאצו לנשים בהריון ומותאם לכך באופן יעודי,
טיפול זה נעשה בלבוש מלא, רפלקסולוגיה בהריון- גם כן הוא טיפול
רפלקסולוגיה לנשים בהריון שנעשה תוך מודעות
וידע רב על המותר ואסור בטיפול
בכףהרגל של האישה בהריון.
וואטסו היא שיטת טיפול ייחודית המשלבתטיפול במגע וטיפולבמים.
במישור הנפשי: הטיפול במגע הוא טיפול
בעל עוצמה רבה. הטיפול במגע
אותו משלב המטפל מאפשר לו להקל על בעיות פיזיולוגיות ונפשיות
יחד אצל המטופל.
My web blog :: דירה דיסקרטית בפתח תקווה
adalat 30mg ca order allegra 180mg pills order fexofenadine 120mg online
priligy 90mg sale order dapoxetine 60mg without prescription order xenical 120mg pills
buy amlodipine online order omeprazole 10mg sale buy omeprazole sale
priligy 90mg without prescription misoprostol oral xenical 120mg us
generic dapoxetine 30mg xenical uk xenical generic