GERENCIAMENTO DE MEMÓRIA EM JAVA ALUNOS: ANTÔNIO FLÁVIO(in memorian) E HEDLEY LUNA.

Post on 07-Apr-2016

220 views 0 download

Transcript of GERENCIAMENTO DE MEMÓRIA EM JAVA ALUNOS: ANTÔNIO FLÁVIO(in memorian) E HEDLEY LUNA.

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<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

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<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

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<Integer> lista = new LinkedList<Integer>();

• 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++

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--;• }• }

GRÁFICO VETOR ESTÁTICO C++ - WINDOWS

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--;• }• }

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

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<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

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<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

VETOR DINÂMICO(VECTOR) JAVA - LINUX

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--;• }• }

• }

LISTA ENCADEADA JAVA - LINUX

COMPARATIVO ENTRE ESTRUTURAS - LINUX

C++

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--;• }• }

VETOR ESTÁTICO C++ - LINUX

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--;• }• }

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?!!!