600 likes | 678 Views
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
E N D
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
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.
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.
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--; • } • } • }
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<Integer> lista = new ArrayList<Integer>(); • int y = 200; • while(y>=0){ • for(int i=0;i<lista.size();i++){ • lista.add(0); • } • y--; • } • } • } FORMA NÃO OTIMIZADA
CÓDIGO VETOR DINÂMICO(VECTOR) • import java.util.List; • import java.util.Vector; • public class VetorDinamicoVector{ • public static void main(String[] args) { • List<Integer> lista = new Vector<Integer>(); • int y = 200; • while(y>=0){ • for(int i=0;i<lista.size();i++){ • lista.add(0); • } • y--; • } • } • } FORMA NÃO OTIMIZADA
CÓDIGO LISTA ENCADEADA • import java.util.LinkedList; • public class ListaEncadeada{ • public static void main(String[] args) { LinkedList<Integer> lista = new LinkedList<Integer>(); • int y = 200; • while(y>=0){ • for(int i=0;i<lista.size();i++){ • lista.add(0); • } • y--; • } • } • }
C++ WINDOWS
CÓDIGO VETOR ESTÁTICO • #include<iostream> • int main() • { • int vetor[1000]; • int y = 200; • while(y>=0) • { • for(int i=0;i<1000;i++) • { • vetor[i]=0; • } • y--; • } • }
CÓDIGO VETOR DINÂMICO • #include<iostream> • int main() • { • int *vetor = new int[10000]; • int y = 200; • while(y>=0) • { • for(int i=0;i<10000;i++) • { • vetor[i]=0; • } • y--; • } • }
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++; • }
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--; • } • } • }
CÓDIGO VETOR DINÂMICO(ARRAYLIST) • import java.util.ArrayList; • import java.util.List; • public class VetorDinamicoArrayList{ • public static void main(String[] args) { • List<Integer> lista = new ArrayList<Integer>(); • int y = 200; • while(y>=0){ • for(int i=0;i<lista.size();i++){ • lista.add(0); • } • y--; • } • } • } FORMA NÃO OTIMIZADA
CÓDIGO VETOR DINÂMICO(VECTOR) • import java.util.List; • import java.util.Vector; • public class VetorDinamicoVector{ • public static void main(String[] args) { • List<Integer> lista = new Vector<Integer>(); • int y = 200; • while(y>=0){ • for(int i=0;i<lista.size();i++){ • lista.add(0); • } • y--; • } • } • } FORMA NÃO OTIMIZADA
CÓDIGO LISTA ENCADEADA • import java.util.LinkedList; • public class ListaEncadeada{ • public static void main(String[] args) { LinkedList<Integer> lista = new LinkedList<Integer>(); • int y = 200; • while(y>=0){ • for(int i=0;i<lista.size();i++){ • lista.add(0); • } • y--; • } • } • }
C++ LINUX
CÓDIGO VETOR ESTÁTICO C++ - LINUX • #include<iostream> • 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--; • } • }
CÓDIGO VETOR DINÂMICO C++ - LINUX • #include<iostream> • 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--; • } • }
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
Comparativos Windows • VETOR ESTÁTICO • VETOR DINÂMICO(ARRAYLIST) • LISTA ENCADEADA