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