Slide 1 - WordPress.com

Propaganda
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
Relação QxT do Vetor Estático em Java / Windows
1000
Tempo (ms)
100
10
1
VETOR ESTÁTICO
0.1
0.01
Quantidade
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
Relação QxT do Vetor Dinâmico em Java / Windows
1000
Tempo (ms)
100
Vetor Dinâmico(ArrayList)
10
1
Quantidade
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
Relação QxT do Vetor Dinâmico em Java / Windows
1000
Tempo (ms)
100
VETOR DINÂMICO(VECTOR)
10
1
Quantidade
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
Relação QxT da Lista Encadeada em Java / Windows
Tempo (ms)
1000
100
Lista Encadeada
10
1
Quantidade
GRÁFICO COMPARATIVO ESTRUTURAS
EM JAVA - WINDOWS
Comparativo entre as Estruturas
3,83x(média)
300
30
LISTA ENCADEADA
Tempo (ms)
1098x(média)
VETOR DINÂMICO(ARRAYLIST)
3
VETOR DINÂMICO(VECTOR)
495x(média)
VETOR ESTÁTICO
0.3
0.03
Quantidade
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--;
}
}
GRÁFICO VETOR ESTÁTICO C++ WINDOWS
Relação QxT do Vetor estático em C++/Windows
Tempo (ms)
1
0.1
Vetor Estático
0.01
0.001
Quantidade
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
Relação QxT do Vetor Dinâmico em C++/Windows
1000
Tempo (ms)
100
10
1
VETOR DINÂMICO
0.1
0.01
0.001
Quantidade
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
Relação QxT da Lista Encadeada em C++/Windows
1000
Tempo (ms)
100
Lista Encadeada
10
1
Quantidade
GRÁFICO COMPARATIVO ESTRUTURAS
C++ - WINDOWS
Comparativo entre as Estruturas
100
10
LISTA ENCADEADA
436x(média)
Tempo (ms)
1241x(média)
VETOR DINÂMICO
VETOR ESTÁTICO
1
2,84x(média)
0.1
0.01
0.001
10^4
2*10^4
3*10^4
4*10^4
5*10^4
6*10^4
Quantidade
7*10^4
8*10~4
9*10^4
10^5
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
Relação QxT do Vetor Estático em Java / Windows
1000
Tempo (ms)
100
10
Vetor Estático
1
0.1
Quantidade
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
Relação QxT do Vetor Dinâmico em Java / Windows
1000
Tempo (ms)
100
Vetor Dinâmico(ArrayList)
10
1
Quantidade
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
Relação QxT do Vetor Dinâmico em Java / Linux
1000
Tempo (ms)
100
Vetor Dinâmico(Vector)
10
1
Quantidade
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
Relação QxT da Lista Encadeada em Java/ Linux
10000
Tempo (ms)
1000
100
Lista Encadeada
10
1
Quantidade
COMPARATIVO ENTRE ESTRUTURAS LINUX
Comparativo entre as Estruturas em Java/ Linux
10000
1000
4x(média)
Tempo (ms)
Lista Encadeada
100
Vetor Dinâmico(Vector)
1030x(média)
10
268x(média)
1
0.1
Quantidade
Vetor Dinâmico(ArrayList)
Vetor Estático
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--;
}
}
VETOR ESTÁTICO C++ - LINUX
Relação Q x T do Vetor Estático em C++/Linux
10
Tempo (ms)
1
Vetor Estático
0.1
0.01
Quantidade
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
Relação QxT do Vetor Dinâmico em C++/Linux
10000
Tempo (ms)
100
Vetor Dinâmico
1
0.01
Quantidade
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
Quantidade
4*10^6
3*10^6
2*10^6
10^6
9*10^5
8*10^5
7*10^5
6*10^5
5*10^5
4*10^5
3*10^5
2*10^5
10^5
9*10^4
8*10~4
7*10^4
6*10^4
5*10^4
4*10^4
3*10^4
2*10^4
10^4
Tempo (ms)
LISTA ENCADEADA C++ - LINUX
Relação QxT de Lista Encadeada em C++/Linux
1000
100
10
Lista Encadeada
1
COMPARATIVO ENTRE ESTRUTURAS
C++ - LINUX
Comparativo entre as Estruturas em C++/Linux
1000
100
21x(média)
Tempo (ms)
27x(média)
10
25%(média)
1
0.1
0.01
Lista Encadeada
Vetor Dinâmico
Quantidade
Vetor Estático
•
•
JAVA X C++
Comparativos Windows
• VETOR ESTÁTICO
• VETOR DINÂMICO(ARRAYLIST)
• LISTA ENCADEADA
JAVA X C++ - VETOR ESTÁTICO WINDOWS
Comparação entre Vetor Estático C++ versus Vetor Estático Java Windows
Tempo (ms)
1
C++ 2x mais
rápido
0.1
Vetor Estático C++
0.01
Vetor Estático Java
0.001
10^4
2*10^4
3*10^4
4*10^4
5*10^4
6*10^4
Quantidade
7*10^4
8*10~4
9*10^4
10^5
JAVA X C++ - VETOR DINÂMICOWINDOWS
Comparação entre Vetor Dinâmico Java versus Vetor Dinâmico C++ Windows
1000
100
167x(média)
Tempo (ms)
10
1
0.1
Vetor Dinâmico Java
0.01
Vetor Dinâmico C++
0.001
Quantidade
JAVA X C++ - LISTA ENCADEADA WINDOWS
Comparativo entre as Listas Encadeadas em Java e C++ / Windows
1000
Tempo (ms)
16%(média)
100
LISTA ENCADEADA - JAVA
LISTA ENCADEADA - C++
10
1
Quantidade
COMPARATIVOS LINUX
• VETOR ESTÁTICO
• VETOR DINÂMICO(ARRAYLIST)
• LISTA ENCADEADA
JAVA X C++ - VETOR ESTÁTICO - LINUX
Comparação entre Vetor Estático Java versus Vetor Estático C++
10
4x(média)
Tempo (ms)
1
Vetor Estático C++
Vetor Estático Java
0.1
0.01
Quantidade
JAVA X C++ - VETOR DINÂMICO - LINUX
Comparação entre Vetor Dinâmico Java versus Vetor Dinâmico C++
1000
100
Tempo (ms)
49x(média)
10
Vetor Dinâmico Java
1
Vetor Dinâmico C++
0.1
0.01
Quantidade
JAVA X C++ - LISTA ENCADEADA LINUX
Comparativo entre as Listas Encadeadas em Java e C++ / Linux
10000
1000
Tempo (ms)
8x(média)
100
10
LISTA ENCADEADA - JAVA
LISTA ENCADEADA - C++
1
Quantidade
WINDOWS X LINUX
COMPARATIVO WINDOWS X LINUX
Comparativo entre as Listas Encadeadas em Java / Windows x Linux
1000
Tempo (ms)
16%(média) -Windows
100
10
LISTA ENCADEADA JAVA - WINDOWS
LISTA ENCADEADA JAVA - LINUX
1
Quantidade
•
PERGUNTAS?!!!
Download