ENTENDENDO A PERFORMANCE

Tamanho: px
Começar a partir da página:

Download "ENTENDENDO A PERFORMANCE"

Transcrição

1 FACULDADE LOURENÇO FILHO Curso de Ciência da Computação José Tiago Ribeiro Filho ENTENDENDO A PERFORMANCE EM APLICAÇÕES JAVA Fortaleza Ceará Dezembro de 2010

2 FACULDADE LOURENÇO FILHO Curso de Ciência da Computação José Tiago Ribeiro Filho ENTENDENDO A PERFORMANCE EM APLICAÇÕES JAVA Monografia apresentada ao Curso de Ciência da Computação da Faculdade Lourenço Filho, como requisito parcial para obtenção do grau de Bacharel em Ciência da Computação. Orientador: Prof. MSc. João Frederico Roldan Viana. Fortaleza Ceará Dezembro de 2010

3 FACULDADE LOURENÇO FILHO Curso de Ciência da Computação Título do Trabalho: Entendendo a performance em aplicações java Autor: José Tiago Ribeiro Filho Banca Examinadora João Frederico Roldan Viana, MSc. (FLF) Orientador André Barros Pereira, MSc. (FLF) 1º Membro Francisco Nauber Góis, MSc. (FLF) 2º Membro Aprovado em 21 de Dezembro de 2010.

4 É melhor tentar e falhar, que preocupar-se e ver a vida passar. É melhor tentar, ainda que em vão que sentar-se, fazendo nada até o final. Eu prefiro na chuva caminhar, que em dias frios em casa me esconder. Prefiro ser feliz embora louco, que em conformidade viver. Martin Luther King.

5 AGRADECIMENTOS Agradeço em primeiro lugar a Deus, origem da vida e fonte de sabedoria. A meus pais pelo estímulo em todos os momentos, e educação a mim dada. A meus irmãos que sempre que precisei estiveram ao meu lado. Ao professor Frederico Viana, pelo incentivo constante e pela segura orientação. E a todos aqueles que, direta ou indiretamente, contribuíram para a elaboração desta monografia. Muito Obrigado.

6 RESUMO A monografia traz a definição de performance computacional, focando desempenho em aplicações desenvolvidas em Java, explica aspectos importantes que influenciam no desempenho tais como: utilização da memória RAM, tempo de inicialização, escalabilidade e a performance percebida pelo usuário do sistema. Apresenta uma técnica muito importante para medição de desempenho, chamada benchmark de desempenho, explica o quanto o seu uso pode auxiliar o desenvolvedor a ter um acompanhamento de possíveis mudanças de desempenho no processo evolutivo da aplicação. Fornece uma visão sobre algoritmos e estruturas de dados, como sua escolha pode influenciar muito na velocidade de um software, define garbage collection, sua importância para bom funcionamento da aplicação e traz uma visão sobre arquitetura da maquina virtual HotSpot.

7 ABSTRACT The monograph has a definition of computational performance, focusing on performance in applications developed in Java, explains important aspects influencing the performance such as: use of RAM, startup time, scalability and performance as perceived by the user of the system. Presents a very important technique for measuring performance, called performance benchmark, explains how their use can help the developer to have a monitoring of possible changes in performance in the evolutionary process of the application. Provides an overview on algorithms and data structures, such as your choice can greatly influence the speed of a software defined garbage collection, its importance for proper functioning of the application and provides an insight into the architecture of the HotSpot virtual machine.

8 SUMÁRIO 1 INTRODUÇÃO Motivação Objetivos Estrutura da Monografia DEFINIÇÕES DE PERFORMANCE Performance computacional Utilização de memória RAM Tempo de inicialização Escalabilidade Performance Percebida TÉCNICAS PARA MEDIR PERFORMANCE Benchmarking Profiling Usando Hprof e Perfanal RELAÇÃO DE PERFORMANCE COM A IMPLEMENTAÇÃO DE ALGORITIMOS RELAÇÃO DE PERFORMANCE COM ESTRUTURAS DE DADOS PARTICULARIDADES DO JAVA Garbage collection Java HotSpot Virtual Machine CONCLUSÃO REFERÊNCIAS BIBLIOGRAFICAS

9 LISTA DE FIGURAS Figura 1 Representação da memória Usada, Livre e o total perante o HEAP da JVM Figura 2 Gerenciador de Tarefas do Windows XP Figura 3 Sistema Não Escalar Figura 4 Sistema Escalar Figura 5 Comparação entre Desempenho computacional e Performance percebida Figura 6 Técnica de sincronização Figura 7 Simula o teste do cronômetro Figura 8 Recriação da classe teste com o uso da classe cronômetro Figura 9 Método recursivo para inverter String Figura 10 Exceção lançada após estouro de pilha Figura 11 Diagrama de classe Figura 12 Fábrica de Sincronismo Figura 13 Benchmark para testar o desempenho de diversos tipos de coleções Figura 14 Arquitetura da maquina virtual

10 9 1 Introdução O presente trabalho irá discorrer sobre desempenho de aplicações desenvolvidas na linguagem Java, irá definir o que é performance e como ela é percebida pelo usuário, apresentará boas práticas para o desenvolvedor não sofrer com perca de desempenho, assim como utilizar técnicas e ferramentas para medir a velocidade da aplicação e se existem objetos ou métodos consumindo muitos recursos de memória, apresentará vantagens e desvantagens de se utilizar algumas estruturas de dados bem como algoritmos e explicará a importância do coletor de lixo na performance final do software. 1.1 Motivação A motivação para discorrer sobre este assunto é auxiliar aos desenvolvedores que trabalham com a linguagem Java a entender os malefícios de uma aplicação mal estruturada, fazer com que passe a observar o todo e não só uma pequena parte do código quando se está em fase de desenvolvimento, adquirir o hábito de realizar testes de desempenho e sempre buscar a excelência em se tratando de velocidade do software. Hoje em dia devido à grande complexidade de funcionalidades exigidas quando se desenvolve um software, torna-se cada vez mais importante a otimização do tempo de processamento ao realizar tarefas. O que acontece é que grande parte dos desenvolvedores de softwares ainda não atentaram para o estudo e analise de como melhorar o tempo de processamento de uma aplicação. Um tempo perdido a mais no planejamento do software para escolher os algoritmos e estruturas de dados adequadas para cada tarefa pode ser revertido em ganho de performance e tempo mais a frente

11 10 no decorrer do projeto, pois reduzirá tempo e gastos com refatoração de código para tentar melhorar o desempenho do sistema. 1.2 Objetivos O objetivo deste trabalho é explicar o que é desempenho e qual a importância de ter uma aplicação com grau satisfatório de performance, assim como ensinar técnicas para medir a velocidade de métodos, algoritmos e estrutura de dados usados quando se desenvolve na linguagem Java. 1.3 Estrutura da Monografia Esta monografia está dividida em seis capítulos. O primeiro traz a introdução, motivação e a estrutura deste trabalho; o segundo capítulo aborda a performance, utilização de memória RAM e como pode-se medir o seu consumo em aplicações Java; trata também de tempo de inicialização e escalabilidade bem como a performance percebida pelo usuário quando está usando um sistema; o terceiro capítulo trata de técnicas para medir desempenho quando se está desenvolvendo um sistema, explica o que é benchmark e como fazer uso dele para melhorar a aplicação, explica a importância de ferramentas de perfis e apresenta dois tipos que acompanham a plataforma Java; no quarto capítulo é explicado como a escolha errada do algoritmo pode influenciar no produto final do software; No quinto capítulo serão apresentadas algumas estruturas de dados utilizadas no Java, bem como suas vantagens, desvantagens e onde elas podem ser melhor aproveitadas; por último o sexto capítulo explica como funciona o coletor de lixo, sua importância e o que ele afeta em se tratando de desempenho de uma aplicação; descreve também a máquina virtual Hotspot, desenvolvida pela Sun, explicando um pouco de sua arquitetura e ensinando alguns parâmetros de configuração da mesma.

12 11 2 Definições de Performance 2.1 Performance Computacional Performance computacional, ou desempenho computacional, é um termo que se refere afim de descrever uma metodologia onde analisa-se o sistema com o objetivo de melhorar a capacidade de produção, eliminando ações desnecessárias que reduzem a capacidade computacional global do sistema (MANGAN, 2008, p.2). Capacidade computacional é á quantidade total de trabalho útil que pode ser realizado em um sistema em um determinado período fixo de tempo. São planilhas recalculadas, os relatórios gerados, os trabalhos de impressão, a rotação de uma imagem 3D, ou apenas jogando paciência se o sistema não é bloqueado (MANGAN, 2008, p.2). Os algoritmos implementados pelos desenvolvedores assim como a estrutura de dados escolhida são alguns dos principais fatores que podem afetar o desempenho global de uma aplicação. Acontece que isso é apenas uma parte no quadro de desempenho para quem quer realmente produzir um software de alta performance. Para compreender os diferentes tipos de problemas que podem ser encontrados na hora do desenvolvimento, devem-se considerar todos os diferentes aspectos do desempenho computacional (WILSON, 2001, p.3). Além da Performance computacional temos: Utilização da Memória RAM Tempo de inicialização

13 12 Escalabilidade Performance Percebida 2.2 Utilização da Memória RAM A quantidade de memória necessária para executar o software pode ser de uma importância crucial para o desempenho global do sistema. Todos os sistemas operacionais modernos fornecem um sistema de memória virtual onde o espaço em disco pode ser utilizado no lugar de uma RAM física. Contudo mesmo o disco mais rápido, é muito mais lento que o modulo de memória mais lento com isso os aplicativos acabam forçando o Sistema Operacional a ter um fraco desempenho na paginação da memória virtual. É muito comum um sistema ter um bom desempenho na época de desenvolvimento e esse desempenho cair quando é implantado no cliente (WILSON, 2001, p.53). Isso pode ocorrer porque muitas vezes os desenvolvedores possuem uma maquina mais robusta que as do usuário, consequentemente um software que roda mais confortavelmente na maquina do desenvolvedor, pode vir a ter um fraco desempenho no terminal do usuário. É preciso desenvolver o software com uma configuração alvo em mente, algumas medidas devem ser pensadas antes de começar a desenvolver algum software, tem que se imaginar que a sua aplicação poderá não ser a única em execução na maquina do usuário, usuários geralmente mantém duas ou três aplicações rodando ao mesmo tempo, Não é interessante que um programa consuma todos os recursos da maquina do usuário. A API Java contém alguns mecanismos que ajudam a descobrir quanto de memória RAM seu programa esta consumindo.

14 13 Existem dois métodos na classe Java.lang.Runtime que ajudam a dar uma idéia de quanta memória esta sendo consumida, esses métodos verificam o tamanho do Heap na maquina virtual Java (WILSON, 2001, p.53). Runtime.totalMemory retorna o tamanho (em bytes) da pilha usada para alocar os objetos. Runtime.freeMemory retorna a quantidade de memória que não esta sendo usada na pilha de objetos Para descobrir se os objetos estão consumindo muito espaço na memória é feito um calculo simples, subtrai-se a memória livre do total de memória como demonstrado na figura 1. Figura 1: Representação da memória Usada, Livre e o total perante o HEAP da JVM. Fonte: Wilson, 2001 Esse método de inspeção de memória e útil em varias situações, como para averiguar o uso da pilha do programa em intervalos regulares de tempo a fim de descobrir se está ocorrendo vazamento de memória se o uso da pilha fica aumentando ao longo do tempo.

15 14 O Java não fornece nenhum método para verificar a velocidade do programa, para medir com precisão a velocidade do seu aplicativo Java é preciso apelar para utilitários específicos de uso do Sistema Operacional. O Windows XP, por exemplo, fornece uma ferramenta chamada Gerenciador de tarefas que nos fornece informações do uso de memória pelos processos que estão em execução (ver Figura 2). Figura 2: Gerenciador de Tarefas do Windows XP Fonte: Elaborado pelo autor Vários outros fatores contribuem também para o desempenho do sistema e um melhor aproveitamento da memória e devem ser analisados com muita calma pelo desenvolvedor (WILSON, 2001,p.53). Objetos Classes Tópicos Estrutura Nativa de Dados Código Nativo

16 15 O consumo de memória relativa desses itens varia de acordo com a aplicação, plataforma ou ambiente de execução, porém objetos e classes requem um pouco mais de atenção, pois normalmente são os que consomem mais memória, o seu consumo varia de aplicativo para aplicativo. Por exemplo, aplicações desktop que utilizam interfaces gráficas, as classes tendem a utilizar mais a memória da maquina-cliente pelo fato de que para iniciar uma interface gráfica sejam necessárias várias classes, já uma aplicação web utiliza a memória mais com objetos, pois geralmente criamos mais objetos para trafegarem as informações entre a Web (WILSON, 2001,p.53). 2.3 Tempo de Inicialização Historicamente os sistemas desenvolvidos em Java possuem um tempo de inicialização mais lento (WILSON, 2001, p.24). O tempo de inicialização de um aplicativo é medido pelo tempo que ele leva para levantar o serviço, carregar e ficar pronto para o usuário utilizar, isso inclui tanto o tempo de inicialização da JVM como do aplicativo Java em si. Para medir o tempo de inicialização de uma aplicação Java o desenvolvedor pode fazer uso de dois métodos contidos na API Java (ORACLE, 2009, p.26-3). System.nanoTime(): retorna um valor em nano segundos. (recupera o valor do Sistema Operacional). System.currentTimeMillis(): retorna o tempo atual em milissegundos. O Tamanho da pilha também influencia no tempo de inicialização da JVM e da aplicação, isso porque a máquina virtual reserva um espaço na memória para o tamanho máximo da pilha (-Xmx) e compromete a memória com o tamanho da pilha inicial (-Xms).(ORACLE, 2009, p. 10-2).

17 16 Para aplicações de grande porte é inevitável ter essas duas variáveis definidas com valores muito altos, mas para uma aplicação de pequeno ou médio porte valores altos podem ocasionar uma lentidão desnecessária na inicialização da máquina virtual. Por outro lado se a pilha está definida com um valor muito pequeno ela vai ocasionar uma sobrecarga na inicialização da maquina virtual, consequentemente forçará a mesma a realizar constantes coletas de lixo ate que a pilha tenha crescido a um tamanho razoável. 2.4 Escalabilidade Escalabilidade é a capacidade de o sistema permanecer operando de forma efetiva mesmo diante de um aumento significativo do número de usuários ou/e de recursos disponíveis. É uma característica almejada por todos que estão desenvolvendo um sistema e está ligada ao desempenho da aplicação (MOREIRA, 2009, p.3). A aplicação pode ter um ótimo desempenho quando enfrenta a concorrência de 100 acessos simultâneos mais será que ela conseguirá suportar um aumento de acessos na ordem 100 vezes. As figuras 3 e 4 mostram a diferença de tempo entre um sistema escalar e um não escalar. Figura 3: Sistema Não Escalar Fonte: Wilson, 2001

18 17 Figura 4: Sistema Escalar Fonte: Wilson, 2001 O tempo de resposta sofre um aumento quase que exponencial quando o número de usuários do sistema cresce em uma aplicação Não Escalar o que torna praticamente inviável o seu uso. (figura 3) Já em um sistema Escalar, o aumento no tempo de resposta é bem menor, devido à sua característica de se readaptar de acordo com a demanda (figura 4). Faz-se necessário antes de implantar um sistema no cliente, sempre submetê-lo a testes de Desempenho com uma carga aproximada de acessos concorrentes para que se tenha uma real noção de seu desempenho quando o mesmo realmente estiver em pleno funcionamento. É importante estar ciente dos principais problemas de escalabilidade e desenhar um sistema que esteja preparado para um eventual crescimento futuro, existem algumas boas praticas no Java que ajudam a construir uma aplicação preparada para expansão um deles é o encapsulamento que Craig Larman (2003) define como: um mecanismo usado para ocultar os dados, a estrutura interna e detalhes de implementação de um objeto

19 18 O encapsulamento propõe que se isole a estrutura interna dos Objetos do resto do programa, por isso seu uso é muito aconselhado em sistemas escalares e de alto desempenho, a vantagem que ele traz é de se poder avaliar rapidamente diferentes algoritmos e estruturas de dados, como também evoluir facilmente o projeto para acomodar requisitos novos ou alterados (WILSON, 2001, p.12). 2.5 Performance Percebida Performance percebida esta ligada com a percepção do ser humano sobre o desempenho do software, muitas pessoas da área de tecnologia da informação confundem desempenho computacional com performance percebida, esses são dois estudos diferentes enquanto o desempenho computacional age mais em cima do desempenho do software(apesar de poder afetar o usuário em si), a percepção de performance pensa somente no usuário (MANGAN, 2008, p2). O processo de reflexão e análise do desempenho percebido tem vários objetivos. A figura 5 retrata as diferenças entre desempenho computacional e performance percebida. Figura 5: Comparação entre Desempenho computacional e Performance percebida Fonte: Mangan, 2008

20 19 3 Técnicas para Medir Performance 3.1. Benchmarking Benchmarking é o processo de comparação de operações de uma maneira que produza resultados quantitativos. Ele desempenha um papel fundamental para garantir uma boa execução do software. Os processos a serem comparados podem ser desde dois algoritmos diferentes que produzem o mesmo resultado, ou duas maquinas virtuais executando o mesmo código (WILSON, 2001, p.21). O aspecto fundamental do benchmarking é a comparação. Um único resultado produzido por ele não tem muito valor, só é válido quando ocorre a comparação. Benchmarks tipicamente medem a quantidade de tempo que se leva para realizar uma tarefa específica, mas também podem ser usadas para medir outras variáveis tais como a quantidade de memória necessária para realizar determinada tarefa. Existe uma técnica de benchmarking simples e útil que pode ser usada para medir o desempenho de um software. Chama-se Cronômetro Benchmarking. Como o próprio nome já sugere, essa técnica consiste em medir a performance com um cronômetro na mão e apesar de não ter a precisão de milissegundos, ela é bastante útil em diversas situações, como as listadas abaixo (WILSON, 2001, p.21). Medir quanto tempo demora ao lançar um aplicativo Medir o tempo que se leva para abrir um documento grande Medir o tempo que se leva para percorrer uma tabela muito grande de dados

21 20 Medir quanto tempo leva para executar uma consulta de uma tabela de banco de dados complexa. A tabela abaixo faz um comparativo das vantagens e desvantagens de usar o cronometro benchmarking na medição de desempenho de um software: Prós Fácil Não precisa modificar fonte código ou a utilização de instrumentos complexos de software Não vai distorcer os resultados Contras Pode ser Impreciso Difícil de automatizar os testes Sujeito a erro humano Outra técnica recomendada para uma ampla variedade de situações é a de adicionar a funcionalidade de sincronismo ao código que está sendo avaliado. No Java existe a classe java.lang.system que contem vários métodos estáticos uteis incluindo um método chamado currenttimemillis. Esse método retorna uma variável do tipo long que contém o número de milissegundos que se passaram desde a meia noite do dia 01 de janeiro de Portanto para usar esse método para descobrir quanto tempo uma determinada parte do código demora a ser executada, é necessário armazenar o tempo antes e após a seção de código que se quer testar, e depois subtrair o tempo final do inicial. A figura 6 mostra o exemplo dessa técnica em uma classe Java (WILSON, 2001, p.21).

22 21 Figura 6: Técnica de sincronização Fonte: Elaborado pelo autor Essa técnica essencialmente é o mesmo que usar um cronômetro exceto que o computador inicia e para o relógio automaticamente e também faz com que o teste fique automatizado, o que acaba reduzindo o percentual de erro no resultado do teste. Uma boa prática para esse tipo de técnica consiste no encapsulamento, ou seja, criar uma classe que emule o comportamento do cronômetro (figura 7) e fazendo uso dela na parte de código que se deseja testar, isso facilitará a vida do desenvolvedor alem de seguir um dos princípios da Orientação a Objeto que é reutilização de código, pois não terá que replicar o mesmo tipo de teste em diferentes partes do programa e também exclui possíveis erros que poderiam vir a acontecer por desatenção na hora de escrever o teste. A figura 8 demonstra como ficaria o teste anterior, agora fazendo uso de uma classe cronômetro.

23 22 Figura 7: Simula o teste do cronômetro Fonte: Elaborado pelo autor

24 23 Figura 8: Recriação da classe teste com o uso da classe cronômetro Fonte:Elaborado pelo autor Existem várias ferramentas de benchmarks criados pelas comunidades de desenvolvedores Java, projetados para comparar implementações em tempo de execução que podem ser uteis na hora de testar o desempenho de um software. Alguns exemplos dessas soluções são (WILSON, 2001, p.21): SpecJvm2008 desenvolvido pela Standard Performance Evaluation Corporation (SPEC) é utilizado para medir o desempenho de diferentes maquinas virtuais Java. VolanoMark desenvolvido pela Volano, permite determinar a conexão e as limitações de desempenho do hardware, sistema operacional e plataforma Java. SciMark desenvolvido por Roldan Pozo e Bruce Miller, tem como finalidade medir o desempenho de códigos numéricos que ocorrem na engenharia e aplicações cientificas. CaffeineMark desenvolvido pela Pendragon Software Corporation, consiste em uma serie de testes que medem a velocidade dos programas Java rodando em vários hardwares e softwares de configurações diferente.

25 24 Embora essas soluções sejam ótimas para avaliar a aplicação em tempo de execução, faz-se necessário a criação de benchmarks específicos para avaliar o desempenho do software, ou seja, que testem seu próprio código, as vantagens desse tipo de abordagem são que se pode comparar desempenho de soluções alternativas, acompanhar o desempenho e realizar a analise de tendência ao longo do ciclo de desenvolvimento. A comparação, aliás, é o uso mais óbvio dos benchmarks personalizados, por exemplo, quando o desenvolvedor precisa escolher entre dois algoritmos para implementar determinada função, então ele pode criar um ponto de referência e comparar as duas soluções. Uma das grandes vantagens dos benchmarkings é que se pode acompanhar e analisar as tendências do programa ao longo do desenvolvimento, com isso ao adicionarmos novas funcionalidades ou corrigirmos erros encontrados no meio desse processo, pode-se facilmente descobrir o quanto a aplicação ficou mais lenta e ter o real controle de onde isso está ocorrendo. Benchmarks podem ser divididos em duas categorias, microbenchmarks e macro-benchmarks (WILSON, 2001, p.21): Micro-Benchmarks são micro-pontos de referência que muitas vezes podem ser escritos em poucas linhas de código e são tipicamente muito fáceis de descrever. Macro-Benchmarks Realizam testes no sistema como o usuário final vai vê-lo. Para construí-lo é preciso entender como o cliente irá utilizar o produto. Saber analisar e interpretar os resultados gerados nos testes é essencial, é preciso ter em mente que eles geralmente variam de execução para execução, para facilitar a analise é recomendável realizar diversas tiradas de tempo, após colher os dados com tempos diferentes precisa-se realizar a analise estatística, existem muitos tipos de estatísticas que podem ser uteis,

26 25 mas é recomendável que se determine três números chaves, para o melhor caso, pior caso e processo médio, para informar o pior caso basta pegar o pior tempo, o melhor caso pega-se o melhor tempo e o processo médio tira-se uma media do tempos colhidos. Como benchmark sustenta-se em comparações deve-se fazê-las ao logo do desenvolvimento do sistema para que possa acompanhar as mudanças de desempenho Profiling Profiling é uma forma dinâmica de analisar um determinado programa, ou seja, é uma forma de investigar o comportamento de um programa usando informações recolhidas após a execução do mesmo. O objetivo dessa análise é detectar quais seções de um programa precisam ser otimizadas, seja para aumentar a velocidade geral ou diminuir o uso da memória, ou ás vezes ambos. Ferramentas de profiling devem ser capazes de responder algumas perguntas, tais como: quais os métodos que são utilizados com maior frequência, quais métodos estão chamando os métodos mais utilizados, quais o métodos estão alocando mais memória, qual a percentagem de tempo que cada método e utilizado. Essas ferramentas são na maioria das vezes ricas em interfaces e permitem que possa escolher que tipo de teste deseja-se realizar. Profiling pode ajudar ao desenvolvedor identificar se existe algum método critico na aplicação, se este esta tomando a maior parte do tempo de processamento da mesma, então o desenvolvedor poderá direcionar seu esforço para melhorar o desempenho do método avaliado (WILSON, 2001, p.21). Existem dois tipos de abordagens para otimizar a aplicação a qual o desenvolvedor pode fazer uso quando descobre onde esta ocorrendo a queda de desempenho do sistema (WILSON, 2001, p.21). Fazer com que métodos que sejam utilizados com maior frequência tornem-se mais rápidos

27 26 Fazer com que métodos mais lentos sejam chamados com menor frequência. Muitas vezes programadores partem logo para a primeira alternativa, sendo que às vezes é mais fácil descobrir o porquê do método ser chamado com muita freqüência e com isso tentar diminuir o numero de vezes que esse método é acessado. Ferramentas de profiling são interessantes para descobrir o quanto de objetos seu programa tem, e quanto os mesmos estão consumindo de memória, fazendo com que o programador tente minimizar a criação de objetos, muitas vezes a uma relação entre métodos que utilizam muitos objetos e métodos que são chamados várias vezes na aplicação, sempre é bom verificar se todos os objetos criados no método são realmente necessários. Um exemplo comum de criação de muitos objetos em um método e que com o uso dessas ferramentas o programador pode minimizar é quando um método cria um objeto dentro de um laço de repetição, a cada interação será criado um novo objeto, e esse vai sendo alocado na pilha de objetos da jvm fazendo com que o desempenho da aplicação caia, podendo gerar até um estouro de pilha, movendo a criação para fora do laço faz com que o consumo de memória seja reduzido. O vazamento de memória também é um dos problemas críticos quando se está desenvolvendo um sistema, vazamento de memória ocorre quando a memória é alocada, mas não é liberada, embora a maquina virtual Java seja responsável pela liberação de memória através do garbage collector, a mesma não garante que horas isso ocorrerá, o que pode atrapalhar o desempenho do sistema (WILSON, 2001, p.21). O isolamento do vazamento de memória pode ser uma tarefa muito difícil, é ai que o uso de profiling pode tornar-se uma arma a favor do desenvolvedor, as ferramentas são bastante uteis para: Acompanhar o numero de instâncias de todas as classes em determinado momento.

28 27 Isolar um determinado objeto e ver todas as referências que apontam pra ele. Coleta manual de lixo perdido. A primeira etapa para isolar o vazamento é colocar o programa em um estado de stress, ou seja, testá-lo com sua capacidade máxima, após isso, deve-se realizar varias operações para certificar-se se todos os tempos gastos na inicialização foram computados e que todos os objetos necessários foram carregados, após isso retorna o programa ao estado normal, e faz-se um comparativo de desempenho quando o mesmo estava submetido a sua capacidade máxima. Depois, deve-se usar uma ferramenta de análise para determinar o numero de anomalias existentes em cada classe, com o resultado da analise em mãos deve-se fazer o uso da ferramenta de profiling para processar todo o lixo disponível. Então, volta-se a usar o sistema em modo de stress e depois em modo normal, para que sejam feitas novas comparações, se terminado os testes os tempos de processamento e desempenho continuarem quase iguais é sinal que a limpeza de lixo foi bem sucedida Usando HPROF e PERFANAL Hprof é uma ferramenta de profiling para criação de estatísticas sobre o desempenho da CPU e da pilha, ele é um agente incorporado a JVM que é carregado dinamicamente através de linha de comando na sua inicialização e torna-se processo da mesma. Ao fornecer opções HPROF na inicialização, os usuários podem solicitar vários tipos de pilha e / ou recursos de CPU profiling HPROF. Os dados gerados podem ser em forma de texto ou binário, e podem ser usados para rastrear e isolar problemas de desempenho que envolve o uso de memória e de código ineficiente. O arquivo de formato binário do HPROF pode ser usado com ferramentas como HAT (Heap Analysis Toll) para procurar os objetos alocados no HEAP (O'HAIR, 2004). A partir da versão cinco do J2SE o HPROF passou a ser implementado na nova JVM TI (Java Virtual Machine Tool Interface), ele é

29 28 capaz de apresentar estatísticas sobre alocação da pilha e monitorar os perfis de contenção. Perfanal é uma ferramenta baseada em GUI (Interface Gráfica para Usuário) para analisar o desempenho de aplicações na plataforma Java, ele é usado para identificar problemas de desempenho no código e localizar o código que precise de ajustes, ela é uma ferramenta livre, licenciada pela GPL (MEYERS, 2000). O Perfanal tem a característica de simplificar bastante a analise do desempenho por que ele interpreta os dados do perfil analisado e informa o custo total dos métodos, ele apresenta os resultados em forma de gráfico o que ajuda a análise.

30 29 4 Relação de Performance com Implementação de Algoritmos Escolher o algoritmo correto é um fator primordial para obter-se um grande desempenho da aplicação, se escolher o algoritmo errado todo o ajuste feito por menor que seja não produzirá ganho de desempenho satisfatório. Um algoritmo pode ter diferentes comportamentos para diferentes aplicações, ele pode ser eficiente para algumas situações e deficiente para outras. Não existem algoritmos que sejam bons para todos os tipos de situações, deve-se analisar o algoritmo de acordo com o objetivo que se deseja alcançar e escolher a solução que proporcionar melhores resultados. Para facilitar esse tipo de escolha deve-se fazer uso de técnicas para comparação de soluções como a já mencionada Benchmark, após decidir qual algoritmo usar, deve-se levar o espaço do problema em consideração. Espaço do problema é um conjunto de problemas com os quais o algoritmo será apresentado, em outras palavras são as situações com o qual o algoritimo irá se deparar para que consiga resolver um determinado problema. Muitas vezes pode-se atingir a solução mais eficiente restringindo o algoritmo a tratar apenas o problema do espaço definido em vez de usar o algoritmo mais geral, ou seja, o que o programa não vai fazer é tão importante quanto ao que o programa faz. Algoritmos recursivos podem ser usados em muitos casos para resolver problemas lineares complexos, mas ela pode ser uma pratica não muito recomendada em se tratando de algoritmos com muitas chamadas a função recursiva, com isso ocorre o aumento de consumo de memória e consequentemente a performance da aplicação diminui.

31 30 Cada chamada sucessiva de uma função recursiva cria um novo quadro de pilha, se a função é chamada muitas vezes também pode fazer com que o programa funcione com a memória sobrecarregada. O exemplo disso é o algorítimo usado para inverter uma string (figura 9) Figura 9: Método recursivo para inverter String Fonte: Elaborado pelo autor Se passarmos uma seqüência muito grande de strings para o algoritmo inverter ele pode gerar um erro de estouro de pilha (stackoverflowerror) conforme a figura 10. Figura 10: Exceção lançada após estouro de pilha Fonte: Laskowski, 2010 Algoritmos não são apenas soluções bem definidas para tarefas normais, ao construir uma aplicação o desenvolvedor deve sempre perder um tempo a mais para analisar o algoritmo correto que utilizará, pois a escolha

32 31 errada no começo pode fazer com que todo o sistema tenha um desempenho não satisfatório.

33 32 5 Relação de Performance com Estruturas de Dados A seleção de estrutura de dados adequada é tão importante quanto a escolha do algoritmo. As estruturas de dados são normalmente conhecidas como vetores, listas, filas etc. A plataforma Java possui suas próprias implementações para algumas estruturas tais como ArrayList (listas), LinkedList (filas) SortedList( lista ordenada). Todas essas classes são implementações da interface Collection (coleções). Coleção é um objeto que agrupa múltiplos elementos em uma única unidade e são usadas para armazenar, recuperar e manipular dados. Ela também é usada para transmitir dados a partir de um método para outro. Coleções normalmente representam itens de dados que formam um grupo natural, tais como (WILSON, 2001, p.122). Coleção de carros em uma concessionária. Coleção de livros de uma biblioteca. Coleção de animais em um zoológico. A sua estrutura de uma coleção é composta de uma arquitetura unificada para representar e manipular coleções trazendo a vantagem de reduzir o esforço de programação, aumentando a performance. A estrutura foi projetada para: Promover o reuso de software. Reduzir o esforço na concepção e de aprender novas APIs. Habilitar a coleta de dados a ser manipulado independente da sua representação. Facilitar a interoperabilidade entre APIs independentes.

34 33 Coleções oferecem uma alta performance aliada com uma implementação de ótima qualidade das estruturas de dados, coleções ajudam a melhorar a qualidade e desempenho do software (WILSON, 2001, p.122). Por ser uma estrutura pronta e desenvolvida para que o programador não utilize seu tempo implementando funcionalidades para melhorar o desempenho, ou seja, reescrevendo uma estrutura que já existe e está otimizada. O uso dela acaba facilitando a vida do desenvolvedor para que ele utilize o seu tempo para dedicar-se a melhoria da qualidade e desempenho do resto da aplicação. Sua estrutura e baseada em seis interfaces como demonstrado no diagrama de classes contido na figura 11. Figura 11: Diagrama de classe Fonte: Elaborado pelo autor Cada tipo de estrutura de dados se adéqua mais a determinado tipo de tarefa, entender o que cada estrutura de dados faz ajuda ao desenvolvedor na escolha de qual será a melhor para resolver seu problema, conseqüentemente ajudará a obter um maior desempenho da aplicação. Para algumas interfaces, a estrutura oferece múltiplas implementações concretas. A lista (List) é uma interface que estende de Coleção, ela é ordenada e pode conter elementos repetidos, ao usar uma lista o desenvolvedor tem o pleno controle sobre onde cada elemento é inserido,

FBV - Linguagem de Programação II. Um pouco sobre Java

FBV - Linguagem de Programação II. Um pouco sobre Java FBV - Linguagem de Programação II Um pouco sobre Java História 1992: um grupo de engenheiros da Sun Microsystems desenvolve uma linguagem para pequenos dispositivos, batizada de Oak Desenvolvida com base

Leia mais

Introdução à Linguagem Java

Introdução à Linguagem Java Introdução à Linguagem Java Histórico: Início da década de 90. Pequeno grupo de projetos da Sun Microsystems, denominado Green. Criar uma nova geração de computadores portáveis, capazes de se comunicar

Leia mais

2.1. Princípios de garbage collection Garbage Collector

2.1. Princípios de garbage collection Garbage Collector Capítulo 2 Java Virtual Machine Com a JVM no centro da Plataforma Java, conhecer seu funcionamento interno é essencial para qualquer aplicação Java. Muitas vezes, deixamos de lado ajustes importantes de

Leia mais

Sistemas Operacionais

Sistemas Operacionais UNIVERSIDADE BANDEIRANTE DE SÃO PAULO INSTITUTO POLITÉCNICO CURSO DE SISTEMAS DE INFORMAÇÃO Sistemas Operacionais Notas de Aulas: Tópicos 7 e 8 Estrutura do Sistema Operacional São Paulo 2009 1 Sumário

Leia mais

Um sistema é constituído de um conjunto de processos que executam seus respectivos códigos do sistema operacional e processos e códigos de usuários.

Um sistema é constituído de um conjunto de processos que executam seus respectivos códigos do sistema operacional e processos e códigos de usuários. Os sistemas computacionais atuais permitem que diversos programas sejam carregados na memória e executados simultaneamente. Essa evolução tornou necessário um controle maior na divisão de tarefas entre

Leia mais

Arquitetura de Computadores. Introdução aos Sistemas Operacionais

Arquitetura de Computadores. Introdução aos Sistemas Operacionais Arquitetura de Computadores Introdução aos Sistemas Operacionais O que é um Sistema Operacional? Programa que atua como um intermediário entre um usuário do computador ou um programa e o hardware. Os 4

Leia mais

SISTEMAS OPERACIONAIS. Apostila 03 Estrutura do Sistema Operacional UNIBAN

SISTEMAS OPERACIONAIS. Apostila 03 Estrutura do Sistema Operacional UNIBAN SISTEMAS OPERACIONAIS Apostila 03 Estrutura do Sistema Operacional UNIBAN 1.0 O Sistema Operacional como uma Máquina Virtual A arquitetura (conjunto de instruções, organização de memória, E/S e estrutura

Leia mais

JAVA VIRTUAL MACHINE (JVM)

JAVA VIRTUAL MACHINE (JVM) JAVA VIRTUAL MACHINE (JVM) Por Leandro Baptista, Marlon Palangani e Tiago Deoldoto, 11 de Abril de 2009 A linguagem de programação Java proporciona o desenvolvimento aplicações que podem ser executadas

Leia mais

Processos (Threads,Virtualização e Migração de Código)

Processos (Threads,Virtualização e Migração de Código) Processos (Threads,Virtualização e Migração de Código) Roteiro Processos Threads Virtualização Migração de Código O que é um processo?! Processos são programas em execução. Processo Processo Processo tem

Leia mais

Nível 3 Sistema Operacional

Nível 3 Sistema Operacional Nível 3 Sistema Operacional Universidade Tuiuti do Paraná UTP Faculdade de Ciências Exatas - FACET Tecnologia de Análise e Desenvolvimento de Sistemas Organização de Computadores Prof. André Luiz 1 Nível

Leia mais

Capítulo 1. Introdução. 1.1 Linguagens. OBJETIVOS DO CAPÍTULO Ao final deste capítulo você deverá ser capaz de:

Capítulo 1. Introdução. 1.1 Linguagens. OBJETIVOS DO CAPÍTULO Ao final deste capítulo você deverá ser capaz de: i Sumário 1 Introdução 1 1.1 Linguagens....................................... 1 1.2 O que é um Compilador?................................ 2 1.3 Processadores de Programas: Compiladores, Interpretadores

Leia mais

Sistemas Operacionais. Prof. André Y. Kusumoto andrekusumoto.unip@gmail.com

Sistemas Operacionais. Prof. André Y. Kusumoto andrekusumoto.unip@gmail.com Sistemas Operacionais Prof. André Y. Kusumoto andrekusumoto.unip@gmail.com Estruturas de Sistemas Operacionais Um sistema operacional fornece o ambiente no qual os programas são executados. Internamente,

Leia mais

Sistemas Operacionais

Sistemas Operacionais Sistemas Operacionais Aula 6 Estrutura de Sistemas Operacionais Prof.: Edilberto M. Silva http://www.edilms.eti.br Baseado no material disponibilizado por: SO - Prof. Edilberto Silva Prof. José Juan Espantoso

Leia mais

ARQUITETURA TRADICIONAL

ARQUITETURA TRADICIONAL INTRODUÇÃO Atualmente no universo corporativo, a necessidade constante de gestores de tomar decisões cruciais para os bons negócios das empresas, faz da informação seu bem mais precioso. Nos dias de hoje,

Leia mais

Aplicações. Sistema Operacional Hardware. Os sistemas de computadores são projetados com basicamente 3 componentes: Máquinas Virtuais e Emuladores

Aplicações. Sistema Operacional Hardware. Os sistemas de computadores são projetados com basicamente 3 componentes: Máquinas Virtuais e Emuladores Máquinas Virtuais e Emuladores Marcos Aurelio Pchek Laureano Sistemas de Computadores Os sistemas de computadores são projetados com basicamente 3 componentes: hardware sistema operacional aplicações Sistemas

Leia mais

Java de missão crítica. Um artigo técnico da Oracle

Java de missão crítica. Um artigo técnico da Oracle Java de missão crítica Um artigo técnico da Oracle Java de missão crítica A família de produtos Oracle JRockit é um portfólio abrangente de soluções de tempo de execução de Java que aproveita a JVM básica

Leia mais

Programação de Computadores II: Java. / NT Editora. -- Brasília: 2014. 82p. : il. ; 21,0 X 29,7 cm.

Programação de Computadores II: Java. / NT Editora. -- Brasília: 2014. 82p. : il. ; 21,0 X 29,7 cm. Autor José Jesse Gonçalves Graduado em Licenciatura em Matemática pela Universidade Estadual de São Paulo - UNESP, de Presidente Prudente (1995), com especialização em Análise de Sistemas (1999) e mestrado

Leia mais

Sistemas Operacionais Cap 3 Estruturas de Sistemas Operacionais. Podemos analisar um sistema operacional sob diversos aspectos:

Sistemas Operacionais Cap 3 Estruturas de Sistemas Operacionais. Podemos analisar um sistema operacional sob diversos aspectos: Estruturas de Sistemas Operacionais Podemos analisar um sistema operacional sob diversos aspectos: Os serviços que o sistema operacional oferece. A interface que o sistema operacional torna disponível

Leia mais

Sistemas Operacionais

Sistemas Operacionais 7 Sistemas Operacionais 7.1 Fundamentos da ciência da computação Cengage Learning Objetivos 7.2 Compreender o papel do sistema operacional. Compreender o processo de inicialização para carregar o sistema

Leia mais

UMA ABORDAGEM COMPARATIVA ENTRE AS LINGUAGENS DE PROGRAMAÇÃO JAVA E C#

UMA ABORDAGEM COMPARATIVA ENTRE AS LINGUAGENS DE PROGRAMAÇÃO JAVA E C# UMA ABORDAGEM COMPARATIVA ENTRE AS LINGUAGENS DE PROGRAMAÇÃO JAVA E C# Robson Bartelli¹, Wyllian Fressatti¹. ¹Universidade Paranaense (Unipar) Paranavaí PR Brasil robson_lpbartelli@yahoo.com.br,wyllian@unipar.br

Leia mais

Sistemas Operacionais

Sistemas Operacionais Sistemas Operacionais Sistemas de Entrada/Saída Princípios de Hardware Sistema de Entrada/Saída Visão Geral Princípios de Hardware Dispositivos de E/S Estrutura Típica do Barramento de um PC Interrupções

Leia mais

Linguagens de. Aula 02. Profa Cristiane Koehler cristiane.koehler@canoas.ifrs.edu.br

Linguagens de. Aula 02. Profa Cristiane Koehler cristiane.koehler@canoas.ifrs.edu.br Linguagens de Programação III Aula 02 Profa Cristiane Koehler cristiane.koehler@canoas.ifrs.edu.br Linguagens de Programação Técnica de comunicação padronizada para enviar instruções a um computador. Assim

Leia mais

A Linguagem Algorítmica Estrutura de Repetição. Ex. 2

A Linguagem Algorítmica Estrutura de Repetição. Ex. 2 Estrutura de Repetição. Ex. 2 A ESTRUTURA Enquanto faça{} É MELHOR UTILIZADA PARA SITUAÇÕES ONDE O TESTE DE CONDIÇÃO (V OU F) PRECISA SER VERIFICADO NO INÍCIO DA ESTRUTURA DE REPETIÇÃO.

Leia mais

Coleções. Page 1. Coleções. Prof. Anderson Augustinho Uniandrade

Coleções. Page 1. Coleções. Prof. Anderson Augustinho Uniandrade Page 1 podem ser comparadas com arrays, visto que também apresentam a capacidade de armazenar referências para vários objetos. Entretanto, as coleções apresentam uma gama de funcionalidades bem maior do

Leia mais

Programação Concorrente Processos e Threads

Programação Concorrente Processos e Threads Programação Concorrente Processos e Threads Prof. Eduardo Alchieri Processos O conceito mais central em qualquer sistema operacional é o processo Uma abstração de um programa em execução Um programa por

Leia mais

Garbage Collection. Automatic Garbage Collection. Introdução. Fontes

Garbage Collection. Automatic Garbage Collection. Introdução. Fontes Fontes Garbage Collection Compiladores II 1 Modern Compiler Implementation in java: capítulo 13 Artigos : Garbage Collection in an Uncooperative Environment de Boehm e Weiser (Software Practice and Experience

Leia mais

Coleções Avançadas. Programação Orientada a Objetos Java. Prof. Anselmo Cardoso Paiva Prof. Geraldo Braz Junior

Coleções Avançadas. Programação Orientada a Objetos Java. Prof. Anselmo Cardoso Paiva Prof. Geraldo Braz Junior Coleções Avançadas Programação Orientada a Objetos Java Prof. Anselmo Cardoso Paiva Prof. Geraldo Braz Junior Objetivos Aprender como o conceito de coleção pode ser expresso de forma genérica Examinar

Leia mais

Sistemas Distribuídos. Professora: Ana Paula Couto DCC 064

Sistemas Distribuídos. Professora: Ana Paula Couto DCC 064 Sistemas Distribuídos Professora: Ana Paula Couto DCC 064 Questões Em uma rede de sobreposição (overlay), mensagens são roteadas de acordo com a topologia da sobreposição. Qual uma importante desvantagem

Leia mais

Organização de Computadores 1

Organização de Computadores 1 Organização de Computadores 1 4 SUPORTE AO SISTEMA OPERACIONAL Prof. Luiz Gustavo A. Martins Sistema Operacional (S.O.) Programa responsável por: Gerenciar os recursos do computador. Controlar a execução

Leia mais

Notas da Aula 15 - Fundamentos de Sistemas Operacionais

Notas da Aula 15 - Fundamentos de Sistemas Operacionais Notas da Aula 15 - Fundamentos de Sistemas Operacionais 1. Software de Entrada e Saída: Visão Geral Uma das tarefas do Sistema Operacional é simplificar o acesso aos dispositivos de hardware pelos processos

Leia mais

Sistemas Operacionais Aula 03: Estruturas dos SOs. Ezequiel R. Zorzal ezorzal@unifesp.br www.ezequielzorzal.com

Sistemas Operacionais Aula 03: Estruturas dos SOs. Ezequiel R. Zorzal ezorzal@unifesp.br www.ezequielzorzal.com Sistemas Operacionais Aula 03: Estruturas dos SOs Ezequiel R. Zorzal ezorzal@unifesp.br www.ezequielzorzal.com OBJETIVOS Descrever os serviços que um sistema operacional oferece aos usuários e outros sistemas

Leia mais

Sistemas Operacionais 2014 Introdução. Alexandre Augusto Giron alexandre.a.giron@gmail.com

Sistemas Operacionais 2014 Introdução. Alexandre Augusto Giron alexandre.a.giron@gmail.com Sistemas Operacionais 2014 Introdução Alexandre Augusto Giron alexandre.a.giron@gmail.com Roteiro Sistemas Operacionais Histórico Estrutura de SO Principais Funções do SO Interrupções Chamadas de Sistema

Leia mais

Programação Orientada a Objetos

Programação Orientada a Objetos Programação Orientada a Objetos Universidade Católica de Pernambuco Ciência da Computação Prof. Márcio Bueno poonoite@marciobueno.com Fonte: Material da Profª Karina Oliveira Introdução ao Paradigma OO

Leia mais

Desenvolvimento Web TCC-00.226 Turma A-1

Desenvolvimento Web TCC-00.226 Turma A-1 Desenvolvimento Web TCC-00.226 Turma A-1 Conteúdo Introdução ao Ambiente de Desenvolvimento Professor Leandro Augusto Frata Fernandes laffernandes@ic.uff.br Material disponível em http://www.ic.uff.br/~laffernandes/teaching/2013.2/tcc-00.226

Leia mais

ETEC RAPOSO TAVARES GESTÃO DE SISTEMAS OPERACIONAIS I. Máquina Virtual. Instalação de S.O. em dual boot. 1º Semestre 2010 PROF.

ETEC RAPOSO TAVARES GESTÃO DE SISTEMAS OPERACIONAIS I. Máquina Virtual. Instalação de S.O. em dual boot. 1º Semestre 2010 PROF. ETEC RAPOSO TAVARES GESTÃO DE SISTEMAS OPERACIONAIS I Máquina Virtual Instalação de S.O. em dual boot 1º Semestre 2010 PROF. AMARAL Na ciência da computação, máquina virtual é o nome dado a uma máquina,

Leia mais

Capítulo 8. Software de Sistema

Capítulo 8. Software de Sistema Capítulo 8 Software de Sistema Adaptado dos transparentes das autoras do livro The Essentials of Computer Organization and Architecture Objectivos Conhecer o ciclo de desenvolvimento da linguagem Java

Leia mais

4 Avaliação do Código Gerado

4 Avaliação do Código Gerado Referencial Teórico 4 Avaliação do Código Gerado Nós fizemos alguns exemplos para avaliar a eficiência da especificação proposta, tanto em termos de velocidade de execução quanto de diminuição do tamanho

Leia mais

COMPUTAÇÃO EM NUVEM: TENDÊNCIAS E OPORTUNIDADES DE NEGÓCIOS RELATÓRIO EXECUTIVO DE NEGÓCIOS

COMPUTAÇÃO EM NUVEM: TENDÊNCIAS E OPORTUNIDADES DE NEGÓCIOS RELATÓRIO EXECUTIVO DE NEGÓCIOS COMPUTAÇÃO EM NUVEM: TENDÊNCIAS E OPORTUNIDADES DE NEGÓCIOS TM RELATÓRIO EXECUTIVO DE NEGÓCIOS A visão da computação em nuvem por Aad van Schetsen, vicepresidente da Compuware Uniface, que mostra por que

Leia mais

Prof. Marcos Ribeiro Quinet de Andrade Universidade Federal Fluminense - UFF Pólo Universitário de Rio das Ostras - PURO

Prof. Marcos Ribeiro Quinet de Andrade Universidade Federal Fluminense - UFF Pólo Universitário de Rio das Ostras - PURO Conceitos básicos e serviços do Sistema Operacional Prof. Marcos Ribeiro Quinet de Andrade Universidade Federal Fluminense - UFF Pólo Universitário de Rio das Ostras - PURO Tipos de serviço do S.O. O S.O.

Leia mais

1 UML (UNIFIED MODELING LANGUAGE)

1 UML (UNIFIED MODELING LANGUAGE) 1 UML (UNIFIED MODELING LANGUAGE) Segundo Tonsig (2003), para conseguir desenvolver um software capaz de satisfazer as necessidades de seus usuários, com qualidade, por intermédio de uma arquitetura sólida

Leia mais

FAT32 ou NTFS, qual o melhor?

FAT32 ou NTFS, qual o melhor? FAT32 ou NTFS, qual o melhor? Entenda quais as principais diferenças entre eles e qual a melhor escolha O que é um sistema de arquivos? O conceito mais importante sobre este assunto, sem sombra de dúvidas,

Leia mais

EMENTA DO CURSO. Tópicos:

EMENTA DO CURSO. Tópicos: EMENTA DO CURSO O Curso Preparatório para a Certificação Oracle Certified Professional, Java SE 6 Programmer (Java Básico) será dividido em 2 módulos e deverá ter os seguintes objetivos e conter os seguintes

Leia mais

11 Conclusão. 11.1 Descobertas

11 Conclusão. 11.1 Descobertas 97 11 Conclusão 11.1 Descobertas Nesse trabalho apresentamos o McCloud Service Framework, um arcabouço para implementação de serviços baseados na Simulação de Monte Carlo na nuvem, disponibilizamos duas

Leia mais

Arquitetura de Sistemas Operacionais Machado/Maia. Arquitetura de Sistemas

Arquitetura de Sistemas Operacionais Machado/Maia. Arquitetura de Sistemas Arquitetura de Sistemas Operacionais Capítulo 4 Estrutura do Sistema Operacional Cap. 4 Estrutura do Sistema 1 Sistemas Operacionais Pitágoras Fadom Divinópolis Material Utilizado na disciplina Sistemas

Leia mais

Uma visão mais detalhada do software HP LoadRunner

Uma visão mais detalhada do software HP LoadRunner Boletim técnico Uma visão mais detalhada do software HP LoadRunner Índice Um novo enfoque no teste de desempenho: a solução HP LoadRunner 3 A solução HP LoadRunner e a terminologia dos testes de desempenho

Leia mais

SISTEMAS DISTRIBUÍDOS Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com.br

SISTEMAS DISTRIBUÍDOS Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com.br - Aula 5 PROCESSOS 1. INTRODUÇÃO Em sistemas distribuídos é importante examinar os diferentes tipos de processos e como eles desempenham seu papel. O conceito de um processo é originário do campo de sistemas

Leia mais

SISTEMAS OPERACIONAIS. Maquinas Virtuais e Emuladores

SISTEMAS OPERACIONAIS. Maquinas Virtuais e Emuladores SISTEMAS OPERACIONAIS Maquinas Virtuais e Emuladores Plano de Aula Máquinas virtuais Emuladores Propriedades Benefícios Futuro Sistemas de Computadores Os sistemas de computadores são projetados com basicamente

Leia mais

Sistemas Operacionais I Parte III Estrutura dos SOs. Prof. Gregorio Perez gregorio@uninove.br 2007. Roteiro. Componentes do Sistema

Sistemas Operacionais I Parte III Estrutura dos SOs. Prof. Gregorio Perez gregorio@uninove.br 2007. Roteiro. Componentes do Sistema Sistemas Operacionais I Parte III Estrutura dos SOs Prof. Gregorio Perez gregorio@uninove.br 2007 Roteiro Serviços Estrutura dos Sistemas Operacionais Funções do Sistema Operacional Chamadas do Sistema

Leia mais

Algumas propriedades dos objetos:

Algumas propriedades dos objetos: Orientação a Objetos Vivemos num mundo de objetos. Esses objetos existem na natureza, nas entidades feitas pelo homem, nos negócios e nos produtos que usamos. Eles podem ser categorizados, descritos, organizados,

Leia mais

Engenharia de Software

Engenharia de Software CENTRO UNIVERSITÁRIO NOVE DE JULHO Profº. Edson T. França edson.franca@uninove.br Software Sistemas Conjunto de elementos, entre os quais haja alguma relação Disposição das partes ou dos elementos de um

Leia mais

Definições. Parte 02. Java Conceitos e. Desenvolvimento de Programação Orientada a Objetos. Prof. Pedro Neto

Definições. Parte 02. Java Conceitos e. Desenvolvimento de Programação Orientada a Objetos. Prof. Pedro Neto Java Conceitos e Definições Parte 02 Prof. Pedro Neto Aracaju Sergipe - 2011 Conteúdo 2 O que é Java i. Java ii. Máquina Virtual iii. Java lento? Hotspot e JIT iv. Versões do Java e a confusão do Java2

Leia mais

TECNÓLOGO EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS PROGRAMAÇÃO DE COMPUTADORES I Aula 01: Conceitos Iniciais / Sistema Operacional

TECNÓLOGO EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS PROGRAMAÇÃO DE COMPUTADORES I Aula 01: Conceitos Iniciais / Sistema Operacional TECNÓLOGO EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS PROGRAMAÇÃO DE COMPUTADORES I Aula 01: Conceitos Iniciais / Sistema Operacional O conteúdo deste documento tem por objetivo apresentar uma visão geral

Leia mais

Softwares de Sistemas e de Aplicação

Softwares de Sistemas e de Aplicação Fundamentos dos Sistemas de Informação Softwares de Sistemas e de Aplicação Profª. Esp. Milena Resende - milenaresende@fimes.edu.br Visão Geral de Software O que é um software? Qual a função do software?

Leia mais

O que veremos nesta aula? Principais Aspectos de Sistemas Operacionais. Mas afinal, para que serve um sistema operacional? Gerenciando o hardware (--

O que veremos nesta aula? Principais Aspectos de Sistemas Operacionais. Mas afinal, para que serve um sistema operacional? Gerenciando o hardware (-- O que veremos nesta aula? Principais Aspectos de Sistemas Operacionais Arquitetura de Computadores e Software Básico Flávia Maristela (flavia@flaviamaristela.com) Tudo o que já vimos antes... Visão interna

Leia mais

Marcus Vinicius Cruz Xavier. Rascunho do trabalho de conclusão de curso

Marcus Vinicius Cruz Xavier. Rascunho do trabalho de conclusão de curso Universidade Federal de Santa Catarina Departamento de Informática e Estatística Curso de Bacharelado em Ciências da Computação Marcus Vinicius Cruz Xavier Rascunho do trabalho de conclusão de curso Título

Leia mais

Programação de Computadores - I. Profª Beatriz Profº Israel

Programação de Computadores - I. Profª Beatriz Profº Israel Programação de Computadores - I Profª Beatriz Profº Israel A linguagem JAVA A linguagem Java O inicio: A Sun Microsystems, em 1991, deu inicio ao Green Project chefiado por James Gosling. Projeto que apostava

Leia mais

Programação de Computadores II TCC-00.309 Turma A-1

Programação de Computadores II TCC-00.309 Turma A-1 Material elaborado pelo prof. Leandro A. F. Fernandes com contribuições dos profs. Anselmo A. Montenegro e Marcos Lage Programação de Computadores II TCC-00.309 Turma A-1 Conteúdo Introdução ao Ambiente

Leia mais

Curso Tecnológico de Redes de Computadores 5º período Disciplina: Tecnologia WEB Professor: José Maurício S. Pinheiro V. 2009-2

Curso Tecnológico de Redes de Computadores 5º período Disciplina: Tecnologia WEB Professor: José Maurício S. Pinheiro V. 2009-2 Curso Tecnológico de Redes de Computadores 5º período Disciplina: Tecnologia WEB Professor: José Maurício S. Pinheiro V. 2009-2 Aula 3 Virtualização de Sistemas 1. Conceito Virtualização pode ser definida

Leia mais

O CONCEITO DE TDD NO DESENVOLVIMENTO DE SOFTWARE

O CONCEITO DE TDD NO DESENVOLVIMENTO DE SOFTWARE O CONCEITO DE TDD NO DESENVOLVIMENTO DE SOFTWARE Renan Leme Nazário, Ricardo Rufino Universidade Paranaense (Unipar) Paranavaí PR - Brasil renazariorln@gmail.com, ricardo@unipar.br Resumo. Este artigo

Leia mais

Sistemas Operacionais 1/66

Sistemas Operacionais 1/66 Sistemas Operacionais 1/66 Roteiro Máquinas virtuais Emuladores Propriedades Benefícios Futuro 2/66 Sistemas de Computadores Os sistemas de computadores são projetados com basicamente 3 componentes: hardware

Leia mais

Processos e Threads (partes I e II)

Processos e Threads (partes I e II) Processos e Threads (partes I e II) 1) O que é um processo? É qualquer aplicação executada no processador. Exe: Bloco de notas, ler um dado de um disco, mostrar um texto na tela. Um processo é um programa

Leia mais

PROCESSO DE DESENVOLVIMENTO DE SOFTWARE. Modelos de Processo de Desenvolvimento de Software

PROCESSO DE DESENVOLVIMENTO DE SOFTWARE. Modelos de Processo de Desenvolvimento de Software PROCESSO DE DESENVOLVIMENTO DE SOFTWARE Introdução Modelos de Processo de Desenvolvimento de Software Os modelos de processos de desenvolvimento de software surgiram pela necessidade de dar resposta às

Leia mais

Sistemas Operacionais. Roteiro. Sistemas de Computadores. Os sistemas de computadores são projetados com basicamente 3 componentes: Marcos Laureano

Sistemas Operacionais. Roteiro. Sistemas de Computadores. Os sistemas de computadores são projetados com basicamente 3 componentes: Marcos Laureano Sistemas Operacionais Marcos Laureano 1/66 Roteiro Máquinas virtuais Emuladores Propriedades Benefícios Futuro 2/66 Sistemas de Computadores Os sistemas de computadores são projetados com basicamente 3

Leia mais

5 Planejamento dos experimentos

5 Planejamento dos experimentos 5 Planejamento dos experimentos Depois de escolher e implementar 5 modelos de concorrência e 4 modelos de sandboxes que consideramos representativos para um servidor web Lua, procuramos os principais fatores

Leia mais

Ajuste fino. OMonitor de Desempenho no Windows. Exchange e Active Directory

Ajuste fino. OMonitor de Desempenho no Windows. Exchange e Active Directory Ajuste fino Desempenho pode ser um problema se executados serviços como SharePoint, Exchange, ou SQL em um servidor Windows de uma só vez. Felizmente, algumas ferramentas podem ajudar os administradores

Leia mais

Linguagem de Programação JAVA. Professora Michelle Nery Nomeclaturas

Linguagem de Programação JAVA. Professora Michelle Nery Nomeclaturas Linguagem de Programação JAVA Professora Michelle Nery Nomeclaturas Conteúdo Programático Nomeclaturas JDK JRE JEE JSE JME JVM Toolkits Swing AWT/SWT JDBC EJB JNI JSP Conteúdo Programático Nomenclatures

Leia mais

Orientação a Objetos com Java

Orientação a Objetos com Java Orientação a Objetos com Java Julio Cesar Nardi julionardi@yahoo.com.br 2011/2 Aula 01: Começando com Java Objetivos: Compreender o que é Java, OO e suas vantagens; Entender os procedimentos para criação

Leia mais

Qualidade de Software

Qualidade de Software Qualidade de Software O software é algo abstrato, pois são as instruções que quando executadas atingem o propósito desejado no sistema computacional. (Algoritmo). As principais características são: Complexidade:

Leia mais

Notas da Aula 4 - Fundamentos de Sistemas Operacionais

Notas da Aula 4 - Fundamentos de Sistemas Operacionais Notas da Aula 4 - Fundamentos de Sistemas Operacionais 1. Threads Threads são linhas de execução dentro de um processo. Quando um processo é criado, ele tem uma única linha de execução, ou thread. Esta

Leia mais

BSI UFRPE Prof. Gustavo Callou gcallou@gmail.com

BSI UFRPE Prof. Gustavo Callou gcallou@gmail.com BSI UFRPE Prof. Gustavo Callou gcallou@gmail.com Coleções List Set Map Classes e interfaces do pacote java.util que representam listas, conjuntos e mapas. Solução flexível para armazenar objetos. Quantidade

Leia mais

ATIVIDADES PRÁTICAS SUPERVISIONADAS

ATIVIDADES PRÁTICAS SUPERVISIONADAS ATIVIDADES PRÁTICAS SUPERVISIONADAS Ciência da Computação 5ª série Sistemas Operacionais A atividade prática supervisionada (ATPS) é um método de ensinoaprendizagem desenvolvido por meio de um conjunto

Leia mais

SO Sistemas Operacionais

SO Sistemas Operacionais GOVERNO DO ESTADO DO RIO DE JANEIRO FUNDAÇÃO DE APOIO A ESCOLA TÉCNICA ESCOLA TÉCNICA ESTADUAL REPÚBLICA SO Sistemas Operacionais Curso de Informática ETE REPÚBLICA - Rua Clarimundo de Melo, 847, Quintino

Leia mais

Auslogics BoostSpeed 5 Manual

Auslogics BoostSpeed 5 Manual Página 1 Auslogics BoostSpeed 5 Manual [ Instalando e usando o Auslogics BoostSpeed 5 ] Página 2 Sumário O que é o Auslogics BoostSpeed?... 3 Recursos... 3 Comparando edições... 4 Instalação do programa...

Leia mais

Programa do Módulo 2. Processo Unificado: Visão Geral

Programa do Módulo 2. Processo Unificado: Visão Geral 9.1 Programa do Módulo 2 Orientação a Objetos Conceitos Básicos Análise Orientada a Objetos (UML) O Processo Unificado (RUP) Processo Unificado: Visão Geral 9.2 Encaixa-se na definição geral de processo:

Leia mais

1º Estudo Dirigido. Capítulo 1 Introdução aos Sistemas Operacionais

1º Estudo Dirigido. Capítulo 1 Introdução aos Sistemas Operacionais 1º Estudo Dirigido Capítulo 1 Introdução aos Sistemas Operacionais 1. Defina um sistema operacional de uma forma conceitual correta, através de suas palavras. R: Sistemas Operacionais são programas de

Leia mais

Sistemas Distribuídos: Conceitos e Projeto Threads e Migração de Processos

Sistemas Distribuídos: Conceitos e Projeto Threads e Migração de Processos Sistemas Distribuídos: Conceitos e Projeto Threads e Migração de Processos Francisco José da Silva e Silva Laboratório de Sistemas Distribuídos (LSD) Departamento de Informática / UFMA http://www.lsd.deinf.ufma.br

Leia mais

2 Auto-sintonia de Bancos de Dados e Agentes de Software

2 Auto-sintonia de Bancos de Dados e Agentes de Software 2 Auto-sintonia de Bancos de Dados e Agentes de Software A uso da abordagem de agentes de software 1 pode trazer benefícios a áreas de aplicação em que é necessário construir sistemas autônomos, ou seja,

Leia mais

Sistemas Operacionais

Sistemas Operacionais Sistemas Operacionais SINCRONIZAÇÃO E COMUNICAÇÃO ENTRE PROCESSOS MACHADO/MAIA: CAPÍTULO 07, PÁGINA 101 Prof. Pedro Luís Antonelli Anhanguera Educacional sistemas multiprogramáveis Os sistemas multiprogramáveis

Leia mais

Sistemas Operacionais Carlos Eduardo Portela Serra de Castro

Sistemas Operacionais Carlos Eduardo Portela Serra de Castro Introdução Sistemas Operacionais 1 Sistema Operacional: Um conjunto de programas, executado pelo computador como os outros programas. Função: Controlar o funcionamento do computador, disponibilizando seus

Leia mais

Maestro. Arthur Kazuo Tojo Costa 317497. Universidade Federal de São Carlos Campus Sorocaba Bacharelado em Ciência da Computação

Maestro. Arthur Kazuo Tojo Costa 317497. Universidade Federal de São Carlos Campus Sorocaba Bacharelado em Ciência da Computação Maestro Arthur Kazuo Tojo Costa 317497 Universidade Federal de São Carlos Campus Sorocaba Bacharelado em Ciência da Computação Introdução Sistema Operacional de Redes Detalhes do hardware Multiplexação

Leia mais

Capítulo 2 Processos e Threads Prof. Fernando Freitas

Capítulo 2 Processos e Threads Prof. Fernando Freitas slide 1 Capítulo 2 Processos e Threads Prof. Fernando Freitas Material adaptado de: TANENBAUM, Andrew S. Sistemas Operacionais Modernos. 3ª edição. Disponível em: http://www.prenhall.com/tanenbaum_br slide

Leia mais

TRABALHO COM GRANDES MONTAGENS

TRABALHO COM GRANDES MONTAGENS Texto Técnico 005/2013 TRABALHO COM GRANDES MONTAGENS Parte 05 0 Vamos finalizar o tema Trabalho com Grandes Montagens apresentando os melhores recursos e configurações de hardware para otimizar a abertura

Leia mais

Requisitos do Sistema

Requisitos do Sistema PJ8D - 017 ProJuris 8 Desktop Requisitos do Sistema PJ8D - 017 P á g i n a 1 Sumario Sumario... 1 Capítulo I - Introdução... 2 1.1 - Objetivo... 2 1.2 - Quem deve ler esse documento... 2 Capítulo II -

Leia mais

Sistemas Operacionais Aula 06: Threads. Ezequiel R. Zorzal ezorzal@unifesp.br www.ezequielzorzal.com

Sistemas Operacionais Aula 06: Threads. Ezequiel R. Zorzal ezorzal@unifesp.br www.ezequielzorzal.com Sistemas Operacionais Aula 06: Threads Ezequiel R. Zorzal ezorzal@unifesp.br www.ezequielzorzal.com Objetivos Introduzir o conceito de thread Discutir as APIs das bibliotecas de threads Pthreads, Win32

Leia mais

Sistemas Operacionais

Sistemas Operacionais Sistemas Operacionais Evolução Edson Moreno edson.moreno@pucrs.br http://www.inf.pucrs.br/~emoreno Sumário Introdução Componentes de um sistema computacional Conceituação Características desejáveis Organização

Leia mais

Desenvolvimento de um Framework de Jogos 3D para Celulares

Desenvolvimento de um Framework de Jogos 3D para Celulares Desenvolvimento de um Framework de Jogos 3D para Celulares Fabrício Brasiliense Departamento de Informática e Estatística(INE) Universidade Federal de Santa Catarina (UFSC) Campus Universitário Trindade-

Leia mais

Descobrindo o Profiling de

Descobrindo o Profiling de artigo Descobrindo o Profiling de Aplicações Java com JProfiler Aprenda como encontrar problemas de performance na sua aplicação com o JProfiler. Muitas vezes, nos deparamos com problemas de performance

Leia mais

Automação do Processo de Instalação de Softwares

Automação do Processo de Instalação de Softwares Automação do Processo de Instalação de Softwares Aislan Nogueira Diogo Avelino João Rafael Azevedo Milene Moreira Companhia Siderúrgica Nacional - CSN RESUMO Este artigo tem como finalidade apresentar

Leia mais

Escalonamento no Linux e no Windows NT/2000/XP

Escalonamento no Linux e no Windows NT/2000/XP Escalonamento no Linux e no Windows NT/2000/XP 1 Escalonamento no Linux Os requisitos do escalonador do Linux eram: Apresentar boa performance em programas interativos, mesmo com carga elevada; Distribuir

Leia mais

Guia de conceitos básicos API Version 2010-01-01

Guia de conceitos básicos API Version 2010-01-01 : Guia de conceitos básicos Copyright 2011 Amazon Web Services LLC ou suas afiliadas. Todos os direitos reservados. Conceitos básicos do Amazon RDS... 1 Cadastre-se no Amazon RDS... 2 Inicie uma instância

Leia mais

REVISÃO ENGENHARIA DO SOFTWARE. Isac Aguiar isacaguiar.com.br isacaguiar@gmail.com

REVISÃO ENGENHARIA DO SOFTWARE. Isac Aguiar isacaguiar.com.br isacaguiar@gmail.com REVISÃO ENGENHARIA DO SOFTWARE Isac Aguiar isacaguiar.com.br isacaguiar@gmail.com Software Sequencia de Instruções a serem seguidas ou executadas Dados e rotinas desenvolvidos por computadores Programas

Leia mais

Hardware (Nível 0) Organização. Interface de Máquina (IM) Interface Interna de Microprogramação (IIMP)

Hardware (Nível 0) Organização. Interface de Máquina (IM) Interface Interna de Microprogramação (IIMP) Hardware (Nível 0) Organização O AS/400 isola os usuários das características do hardware através de uma arquitetura de camadas. Vários modelos da família AS/400 de computadores de médio porte estão disponíveis,

Leia mais

Java & OpenJDK. Thiago S. Gonzaga. Sun Campus Ambassador thiago.gonzaga@sun.com

Java & OpenJDK. Thiago S. Gonzaga. Sun Campus Ambassador thiago.gonzaga@sun.com Java & OpenJDK Thiago S. Gonzaga Sun Campus Ambassador thiago.gonzaga@sun.com Tópicos Sobre a Sun Microsystems Algumas tecnologias da Sun Linguagem de Programação Ciclo de Desenvolvimento O que é Java?

Leia mais

- Aula 1 - ARQUITETURA DE COMPUTADORES

- Aula 1 - ARQUITETURA DE COMPUTADORES - Aula 1 - ARQUITETURA DE COMPUTADORES Em arquitetura de computadores serão estudados aspectos da estrutura e do funcionamento dos computadores. O objetivo é apresentar de forma clara e abrangente a natureza

Leia mais

1.2 Tipos de Sistemas Operacionais

1.2 Tipos de Sistemas Operacionais 1.2 Tipos de Operacionais Tipos de Operacionais Monoprogramáveis/ Monotarefa Multiprogramáveis/ Multitarefa Com Múltiplos Processadores 1.2.1 Monoprogramáveis/Monotarefa Os primeiros sistemas operacionais

Leia mais

ESTUDO DE CASO WINDOWS VISTA

ESTUDO DE CASO WINDOWS VISTA ESTUDO DE CASO WINDOWS VISTA História Os sistemas operacionais da Microsoft para PCs desktop e portáteis e para servidores podem ser divididos em 3 famílias: MS-DOS Windows baseado em MS-DOS Windows baseado

Leia mais

Otimização de Código na Criação de Animação Gráfica para Dispositivos Móveis, utilizando J2ME

Otimização de Código na Criação de Animação Gráfica para Dispositivos Móveis, utilizando J2ME Otimização de Código na Criação de Animação Gráfica para Dispositivos Móveis, utilizando J2ME Fábio Ottoni Júlio 1, Lívia Márcia Silva 1 1 Departamento de Ciência da Computação DCC Universidade Presidente

Leia mais

Um arcabouço para gerenciamento automático de máquinas virtuais em CPDsbaseado em perfil

Um arcabouço para gerenciamento automático de máquinas virtuais em CPDsbaseado em perfil VIII WORKSHOP DE PÓS-GRADUAÇÃO E PESQUISA DO CENTRO PAULA SOUZA São Paulo, 9 e 10 de outubro de 2013 Sistemas produtivos: da inovação à sustentabilidade ISSN: 2175-1897 Um arcabouço para gerenciamento

Leia mais

Tecnólogo em Análise e Desenvolvimento de Sistemas

Tecnólogo em Análise e Desenvolvimento de Sistemas Tecnólogo em Análise e Desenvolvimento de Sistemas O conteúdo deste documento tem como objetivos geral introduzir conceitos mínimos sobre sistemas operacionais e máquinas virtuais para posteriormente utilizar

Leia mais