GERENCIAMENTO DE MEMÓRIA EM JAVA ALUNOS: ANTÔNIO FLÁVIO(in memorian) E HEDLEY LUNA
ORGANIZAÇÃO Alocação de memória em java Windows – RESULTADOS JAVA – RESULTADOS C++ – COMPARAÇÃO JAVA X C++ LINUX – RESULTADOS JAVA – RESULTADOS C++ – COMPARAÇÃO JAVA X C++ COMPARAÇÃO LINUX X WINDOWS CONCLUSÕES
MOTIVAÇÃO BRIGAS C++ X JAVA BRIGAS WINDOWS X LINUX BRIGAS SOFTWARE LIVRE X SOFTWARE PROPRIETÁRIO
INTRODUÇÃO AO GERENCIAMENTO DE MEMÓRIA EM JAVA A GERÊNCIA PROPRIAMENTE DITA É “ESCONDIDA” DO PROGRAMADOR. QUEM GERENCIA TODA A MEMÓRIA É A JVM. SE O PROGRAMADOR QUISER(OU PRECISAR) SABER COMO A MEMÓRIA ESTÁ SENDO ALOCADA ELE PODE USAR O COMANDO: javap –c nomeDaClasse
IMAGEM ARQUITETURA DA JVM
INTRODUÇÃO AO GERENCIAMENTO DE MEMÓRIA EM JAVA EM JAVA, ASSIM COMO EM OUTRAS LINGUAGENS, A MEMÓRIA DINÂMICA FICA NO HEAP, E A ESTÁTICA(LINEAR) NA STACK. CADA THREAD TEM SEU PRÓPRIO PC(PROGRAM COUNTER) DENTRO DA JVM, E ESSE PC É ATUALIZADO A CADA INSTRUÇÃO DO BYTECODE.
IMAGEM PROGRAM COUNTER
IMAGEM HEAP
INTRUDUÇÃO AO GERENCIAMENTO DE MEMÓRIA EM JAVA COM EXCEÇÃO DA CLASSE STRING, TODAS AS OUTRAS INSTANCIAÇÕES PRECISAM DO “new” OU DO “newInstance()”. ASSIM COMO C++, JAVA TAMBÉM TEM DESTRUTOR! NO JAVA TAMBÉM EXISTEM MEMORY LEAKS, APESAR DA JVM. A DESALOCAÇÃO DE MEMÓRIA É FEITA ATRAVÉS DO GARBAGE COLLECTOR.
IMAGEM CRIAÇÃO DE OBJETO
IMAGEM DESALOCAÇÃO DE OBJETO
INTRODUÇÃO AO GERENCIAMENTO DE MEMÓRIA EM JAVA ALGORITMOS DE GARBAGE COLLECTION: – REFERENCE COUNTING ALGORITHM – CYCLE COLLECTING ALGORITHM. VANTAGENS: – DIMINUI MEMORY LEAKS – DIMINUI SEGMENTATION FAULTS DESVANTAGENS: – ROTINAS DE GC GERALMENTE SÃO PESADAS – DIMINUIÇÃO DA EFICIÊNCIA
JAVA WINDOWS
CÓDIGO DO VETOR ESTÁTICO public class VetorEstatico { public static void main(String[] args) { int []vetor = new int [10000]; int y = 200; while(y>=0){ for(int i=0;i<vetor.length;i++){ vetor[i]=0; } y--; }
GRÁFICO VETOR ESTÁTICO JAVA - WINDOWS
CÓDIGO DO VETOR DINÂMICO(ARRAYLIST) import java.util.ArrayList; import java.util.List; public class VetorDinamicoArrayList{ public static void main(String[] args) { List lista = new ArrayList (); int y = 200; while(y>=0){ for(int i=0;i<lista.size();i++){ lista.add(0); } y--; } FORMA NÃO OTIMIZADA
GRÁFICO VETOR DINÂMICO(ARRAYLIST) JAVA - WINDOWS
CÓDIGO VETOR DINÂMICO(VECTOR) import java.util.List; import java.util.Vector; public class VetorDinamicoVector{ public static void main(String[] args) { List lista = new Vector (); int y = 200; while(y>=0){ for(int i=0;i<lista.size();i++){ lista.add(0); } y--; } FORMA NÃO OTIMIZADA
GRÁFICO VETOR DINÂMICO(VECTOR) JAVA - WINDOWS
CÓDIGO LISTA ENCADEADA import java.util.LinkedList; public class ListaEncadeada{ public static void main(String[] args) { LinkedList lista = new LinkedList (); int y = 200; while(y>=0){ for(int i=0;i<lista.size();i++){ lista.add(0); } y--; }
GRÁFICO LISTA ENCADEADA JAVA - WINDOWS
GRÁFICO COMPARATIVO ESTRUTURAS EM JAVA - WINDOWS
C++ WINDOWS
CÓDIGO VETOR ESTÁTICO #include int main() { int vetor[1000]; int y = 200; while(y>=0) { for(int i=0;i<1000;i++) { vetor[i]=0; } y--; }
GRÁFICO VETOR ESTÁTICO C++ - WINDOWS
CÓDIGO VETOR DINÂMICO #include int main() { int *vetor = new int[10000]; int y = 200; while(y>=0) { for(int i=0;i<10000;i++) { vetor[i]=0; } y--; }
GRÁFICO VETOR DINÂMICO C++ - WINDOWS
CÓDIGO LISTA ENCADEADA void add(const T &x, bool no_fim=true) { nodo *q = new nodo(x); if (cnt==0) ptraiz=q; else { if (no_fim) { nodo *p = ptraiz; while (p->prox!=0) p=p->prox; p->prox=q; } else { q->prox = ptraiz; ptraiz = q; } cnt++; }
LISTA ENCADEADA C++ - WINDOWS
GRÁFICO COMPARATIVO ESTRUTURAS C++ - WINDOWS
JAVA LINUX
CÓDIGO VETOR ESTÁTICO public class VetorEstatico { public static void main(String[] args) { int []vetor = new int [10000]; int y = 200; while(y>=0){ for(int i=0;i<vetor.length;i++){ vetor[i]=0; } y--; }
VETOR ESTÁTICO JAVA - LINUX
CÓDIGO VETOR DINÂMICO(ARRAYLIST) import java.util.ArrayList; import java.util.List; public class VetorDinamicoArrayList{ public static void main(String[] args) { List lista = new ArrayList (); int y = 200; while(y>=0){ for(int i=0;i<lista.size();i++){ lista.add(0); } y--; } FORMA NÃO OTIMIZADA
VETOR DINÂMICO(ARRAYLIST) JAVA - LINUX
CÓDIGO VETOR DINÂMICO(VECTOR) import java.util.List; import java.util.Vector; public class VetorDinamicoVector{ public static void main(String[] args) { List lista = new Vector (); int y = 200; while(y>=0){ for(int i=0;i<lista.size();i++){ lista.add(0); } y--; } FORMA NÃO OTIMIZADA
VETOR DINÂMICO(VECTOR) JAVA - LINUX
CÓDIGO LISTA ENCADEADA import java.util.LinkedList; public class ListaEncadeada{ public static void main(String[] args) { LinkedList lista = new LinkedList (); int y = 200; while(y>=0){ for(int i=0;i<lista.size();i++){ lista.add(0); } y--; }
LISTA ENCADEADA JAVA - LINUX
COMPARATIVO ENTRE ESTRUTURAS - LINUX
C++ LINUX
CÓDIGO VETOR ESTÁTICO C++ - LINUX #include int main(int argc,char []argv) { int vetor[10000];; int y = 200; while(y>=0) { for(int i=0;i<10000;i++) { vetor[i]=0; } y--; }
VETOR ESTÁTICO C++ - LINUX
CÓDIGO VETOR DINÂMICO C++ - LINUX #include int main(int argc,char []argv) { int *vetor = new int[10000]; int y = 200; while(y>=0) { for(int i=0;i<10000;i++) { vetor[i]=0; } y--; }
VETOR DINÂMICO C++ - LINUX
CÓDIGO LISTA ENCADEADA C++ - LINUX void add(const T &x, bool no_fim=true) { nodo *q = new nodo(x); if (cnt==0) ptraiz=q; else { if (no_fim) { nodo *p = ptraiz; while (p->prox!=0) p=p->prox; p->prox=q; } else { q->prox = ptraiz; ptraiz = q; } cnt++; } bool del(const
LISTA ENCADEADA C++ - LINUX
COMPARATIVO ENTRE ESTRUTURAS C++ - LINUX
JAVA X C++
Comparativos Windows VETOR ESTÁTICO VETOR DINÂMICO(ARRAYLIST) LISTA ENCADEADA
JAVA X C++ - VETOR ESTÁTICO - WINDOWS
JAVA X C++ - VETOR DINÂMICO- WINDOWS
JAVA X C++ - LISTA ENCADEADA - WINDOWS 16%(média)
COMPARATIVOS LINUX VETOR ESTÁTICO VETOR DINÂMICO(ARRAYLIST) LISTA ENCADEADA
JAVA X C++ - VETOR ESTÁTICO - LINUX 4x(média)
JAVA X C++ - VETOR DINÂMICO - LINUX 49x(média)
JAVA X C++ - LISTA ENCADEADA - LINUX
WINDOWS X LINUX
COMPARATIVO WINDOWS X LINUX
PERGUNTAS?!!!