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,

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

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

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

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

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

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

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

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

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

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

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

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

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

Pós Graduação Engenharia de Software

Pós Graduação Engenharia de Software Pós Graduação Engenharia de Software Ana Candida Natali COPPE/UFRJ Programa de Engenharia de Sistemas e Computação FAPEC / FAT Estrutura do Módulo Parte 1 QUALIDADE DE SOFTWARE PROCESSO Introdução: desenvolvimento

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

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

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

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

Professor: Curso: Disciplina:

Professor: Curso: Disciplina: Professor: Curso: Disciplina: Aula 1 Turma: Esp. Marcos Morais de Sousa Sistemas de informação Engenharia de Software I Dinâmica da disciplina, plano de curso e avaliação 03º semestre Prof. Esp. Marcos

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

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

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

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

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

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

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

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

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

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

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

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

Engenharia de Software Introdução. Ricardo Argenton Ramos UNIVASF Engenharia de Software I - Aula 1

Engenharia de Software Introdução. Ricardo Argenton Ramos UNIVASF Engenharia de Software I - Aula 1 Engenharia de Software Introdução Ricardo Argenton Ramos UNIVASF Engenharia de Software I - Aula 1 Tópicos Apresentação da Disciplina A importância do Software Software Aplicações de Software Paradigmas

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

5 Mecanismo de seleção de componentes

5 Mecanismo de seleção de componentes Mecanismo de seleção de componentes 50 5 Mecanismo de seleção de componentes O Kaluana Original, apresentado em detalhes no capítulo 3 deste trabalho, é um middleware que facilita a construção de aplicações

Leia mais

Sistemas Distribuídos

Sistemas Distribuídos Sistemas Distribuídos Processos I: Threads, virtualização e comunicação via protocolos Prof. MSc. Hugo Souza Nesta primeira parte sobre os Processos Distribuídos iremos abordar: Processos e a comunicação

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

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

Memory Leak em Java?

Memory Leak em Java? 1 Memory Leak em Java? Saiba como memory leaks se manifestam em Java e como evitá-los Sobre o Autor Carlos Eduardo G. Tosin (carlos@tosin.com.br) é formado em Ciência da Computação pela PUC-PR, pós-graduado

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

Engenharia de Software Introdução. Ricardo Argenton Ramos UNIVASF Engenharia de Software I - Aula 1

Engenharia de Software Introdução. Ricardo Argenton Ramos UNIVASF Engenharia de Software I - Aula 1 Engenharia de Software Introdução Ricardo Argenton Ramos UNIVASF Engenharia de Software I - Aula 1 Tópicos Apresentação da Disciplina A importância do Software Software Aplicações de Software Paradigmas

Leia mais

Metodologia de Desenvolvimento de Sistemas

Metodologia de Desenvolvimento de Sistemas Metodologia de Desenvolvimento de Sistemas Aula 1 Ementa Fases do Ciclo de Vida do Desenvolvimento de Software, apresentando como os métodos, ferramentas e procedimentos da engenharia de software, podem

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

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

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

Notas da Aula 17 - Fundamentos de Sistemas Operacionais

Notas da Aula 17 - Fundamentos de Sistemas Operacionais Notas da Aula 17 - Fundamentos de Sistemas Operacionais 1. Gerenciamento de Memória: Introdução O gerenciamento de memória é provavelmente a tarefa mais complexa de um sistema operacional multiprogramado.

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

Prevayler. Perola. André Luís Sales de Moraes Juliana Keiko Yamaguchi Tatiana Yuka Takaki

Prevayler. Perola. André Luís Sales de Moraes Juliana Keiko Yamaguchi Tatiana Yuka Takaki Prevayler Perola André Luís Sales de Moraes Juliana Keiko Yamaguchi Tatiana Yuka Takaki Prevayler Prevayler é a implementação em Java do conceito de Prevalência. É um framework que prega uma JVM invulnerável

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

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

Kerio Exchange Migration Tool

Kerio Exchange Migration Tool Kerio Exchange Migration Tool Versão: 7.3 2012 Kerio Technologies, Inc. Todos os direitos reservados. 1 Introdução Documento fornece orientações para a migração de contas de usuário e as pastas públicas

Leia mais

UFG - Instituto de Informática

UFG - Instituto de Informática UFG - Instituto de Informática Especialização em Desenvolvimento de Aplicações Web com Interfaces Ricas EJB 3.0 Prof.: Fabrízzio A A M N Soares professor.fabrizzio@gmail.com Aula 10 Persistência de Dados

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

Sistema Operacional. Processo e Threads. Prof. Dr. Márcio Andrey Teixeira Sistemas Operacionais

Sistema Operacional. Processo e Threads. Prof. Dr. Márcio Andrey Teixeira Sistemas Operacionais Sistema Operacional Processo e Threads Introdução a Processos Todos os computadores modernos são capazes de fazer várias coisas ao mesmo tempo. Enquanto executa um programa do usuário, um computador pode

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

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

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

ARQUITETURA DE SISTEMAS. Cleviton Monteiro (cleviton@gmail.com)

ARQUITETURA DE SISTEMAS. Cleviton Monteiro (cleviton@gmail.com) ARQUITETURA DE SISTEMAS Cleviton Monteiro (cleviton@gmail.com) Roteiro Definição Documento de arquitetura Modelos de representação da arquitetura Estilos arquiteturais Arquitetura de sistemas web Arquitetura

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

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

11/3/2009. Software. Sistemas de Informação. Software. Software. A Construção de um programa de computador. A Construção de um programa de computador

11/3/2009. Software. Sistemas de Informação. Software. Software. A Construção de um programa de computador. A Construção de um programa de computador Sistemas de Informação Prof. Anderson D. Moura Um programa de computador é composto por uma seqüência de instruções, que é interpretada e executada por um processador ou por uma máquina virtual. Em um

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

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

ANÁLISE E IMPLEMENTAÇÃO DE ALGORITMOS DE COMPRESSÃO DE DADOS. Maria Carolina de Souza Santos 1 Orientador: Prof.º Ms.

ANÁLISE E IMPLEMENTAÇÃO DE ALGORITMOS DE COMPRESSÃO DE DADOS. Maria Carolina de Souza Santos 1 Orientador: Prof.º Ms. ANÁLISE E IMPLEMENTAÇÃO DE ALGORITMOS DE COMPRESSÃO DE DADOS Maria Carolina de Souza Santos 1 Orientador: Prof.º Ms. Mauricio Duarte 2 Centro Universitário Euripides de Marilia UNIVEM FATEC Faculdade de

Leia mais

Considerações no Projeto de Sistemas Cliente/Servidor

Considerações no Projeto de Sistemas Cliente/Servidor Cliente/Servidor Desenvolvimento de Sistemas Graça Bressan Graça Bressan/LARC 2000 1 Desenvolvimento de Sistemas Cliente/Servidor As metodologias clássicas, tradicional ou orientada a objeto, são aplicáveis

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

4 Estrutura do Sistema Operacional. 4.1 - Kernel

4 Estrutura do Sistema Operacional. 4.1 - Kernel 1 4 Estrutura do Sistema Operacional 4.1 - Kernel O kernel é o núcleo do sistema operacional, sendo responsável direto por controlar tudo ao seu redor. Desde os dispositivos usuais, como unidades de disco,

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

PDS - DATASUS. Processo de Desenvolvimento de Software do DATASUS

PDS - DATASUS. Processo de Desenvolvimento de Software do DATASUS PDS - DATASUS Processo de Desenvolvimento de Software do DATASUS Coordenação Geral de Arquitetura e Engenharia Tecnológica Coordenação de Padronização e Qualidade de Software Gerência de Padrões e Software

Leia mais

Seminário: Google File System (GFS)

Seminário: Google File System (GFS) UNIVERSIDADE FEDERAL DE SANTA CATARINA UFSC Disciplina: Sistemas Operacionais I INE5355 Alunos: Armando Fracalossi 06132008 Maurílio Tiago Brüning Schmitt 06132033 Ricardo Vieira Fritsche 06132044 Seminário:

Leia mais

Garantia de Processo Leis de Lehman Manutenção de Softwares

Garantia de Processo Leis de Lehman Manutenção de Softwares Garantia de Processo Leis de Lehman Manutenção de Softwares Garantia de Processo Acidentes são eventos raros em sistemas críticos e pode ser impossível simulá-los durante testes de um sistema. Requisitos

Leia mais

BRAlarmExpert. Software para Gerenciamento de Alarmes. BENEFÍCIOS obtidos com a utilização do BRAlarmExpert:

BRAlarmExpert. Software para Gerenciamento de Alarmes. BENEFÍCIOS obtidos com a utilização do BRAlarmExpert: BRAlarmExpert Software para Gerenciamento de Alarmes A TriSolutions conta com um produto diferenciado para gerenciamento de alarmes que é totalmente flexível e amigável. O software BRAlarmExpert é uma

Leia mais

Aspectos técnicos do desenvolvimento baseado em componentes

Aspectos técnicos do desenvolvimento baseado em componentes Aspectos técnicos do desenvolvimento baseado em componentes Um novo processo de desenvolvimento O uso de componentes traz mudanças no processo de desenvolvimento Além de desenvolver um produto, queremos

Leia mais

Sistemas Operacionais

Sistemas Operacionais Sistemas Operacionais Gerenciamento de Memória Norton Trevisan Roman Marcelo Morandini Jó Ueyama Apostila baseada nos trabalhos de Kalinka Castelo Branco, Antônio Carlos Sementille, Paula Prata e nas transparências

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

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

Introdução à Programação de Computadores

Introdução à Programação de Computadores 1. Objetivos Introdução à Programação de Computadores Nesta seção, vamos discutir os componentes básicos de um computador, tanto em relação a hardware como a software. Também veremos uma pequena introdução

Leia mais

Sistema Operacional Unidade 4.2 - Instalando o Ubuntu Virtualizado

Sistema Operacional Unidade 4.2 - Instalando o Ubuntu Virtualizado Sistema Operacional Unidade 4.2 - Instalando o Ubuntu Virtualizado Curso Técnico em Informática SUMÁRIO INTRODUÇÃO... 3 CRIAÇÃO DA MÁQUINA VIRTUAL... 3 Mas o que é virtualização?... 3 Instalando o VirtualBox...

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

OTIMIZAÇÃO E PERFORMANCE DE BANCO DE DADOS UTILIZANDO SQL TUNING

OTIMIZAÇÃO E PERFORMANCE DE BANCO DE DADOS UTILIZANDO SQL TUNING OTIMIZAÇÃO E PERFORMANCE DE BANCO DE DADOS UTILIZANDO SQL TUNING Jéssica Correa dos Santos¹, Alexandre Paulino Sierra da Silva¹ ¹Universidade Paranaense (Unipar) Paranavai-PR-Brasil jessica_07correa@hotmail.com,

Leia mais

3 A Biblioteca para Implementação de Máquinas Virtuais

3 A Biblioteca para Implementação de Máquinas Virtuais A Biblioteca para Implementação de Máquinas Virtuais 24 3 A Biblioteca para Implementação de Máquinas Virtuais O processo de criação e experimentação de uma máquina virtual no escopo deste trabalho é ilustrada

Leia mais

ATIVIDADE 1 MÁQUINAS VIRTUAIS. 1.1 Arquiteturas não virtualizadas

ATIVIDADE 1 MÁQUINAS VIRTUAIS. 1.1 Arquiteturas não virtualizadas ATIVIDADE 1 MÁQUINAS VIRTUAIS Existem hoje diversas tecnologias e produtos para virtualização de computadores e ambientes de execução, o que pode gerar uma certa confusão de conceitos. Apesar disso, cada

Leia mais

Metodologias de Desenvolvimento de Sistemas. Analise de Sistemas I UNIPAC Rodrigo Videschi

Metodologias de Desenvolvimento de Sistemas. Analise de Sistemas I UNIPAC Rodrigo Videschi Metodologias de Desenvolvimento de Sistemas Analise de Sistemas I UNIPAC Rodrigo Videschi Histórico Uso de Metodologias Histórico Uso de Metodologias Era da Pré-Metodologia 1960-1970 Era da Metodologia

Leia mais

Exercícios. Exercício 1

Exercícios. Exercício 1 Exercícios Exercício 1 Considere um sistema de processamento com os seguintes tempos entre chegadas de tarefas: Tempo entre Chegadas (horas) Probabilidade 0 0.23 1 0.37 2 0.28 3 0.12 Os tempos de processamento

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

Objetivos. Processos de Software. Tópicos abordados. O processo de software. Modelos genéricos de modelos de processo de software.

Objetivos. Processos de Software. Tópicos abordados. O processo de software. Modelos genéricos de modelos de processo de software. Processos de Software Objetivos Apresentar os modelos de processo de software Conjunto coerente de atividades para especificar, projetar, implementar e testar s de software Descrever os diferentes modelos

Leia mais

DOMAIN-DRIVEN DESIGN E TEST-DRIVEN DEVELOPMENT

DOMAIN-DRIVEN DESIGN E TEST-DRIVEN DEVELOPMENT DOMAIN-DRIVEN DESIGN E TEST-DRIVEN DEVELOPMENT Jaqueline Rissá Franco email: jaquerifr@gmail.com Karla Marturelli Mattos Luciano Mathias Doll João Almeida Resumo: Este artigo mostra novas abordagens na

Leia mais

Introdução a Informática - 1º semestre AULA 02 Prof. André Moraes

Introdução a Informática - 1º semestre AULA 02 Prof. André Moraes Introdução a Informática - 1º semestre AULA 02 Prof. André Moraes 3 MÁQUINAS VIRTUAIS Em nossa aula anterior, fizemos uma breve introdução com uso de máquinas virtuais para emularmos um computador novo

Leia mais

Introdução a Computação

Introdução a Computação Sistemas Operacionais: Software Oculto Introdução a Computação Sistemas Operacionais Serve como um intermediário entre o hardware e os softwares aplicativos. Sistema Operacional Software de sistemas Kernel

Leia mais

Gestão de Configurações II

Gestão de Configurações II Gestão de Configurações II Bibliografia Livro: Software Configuration Management Patterns: Effective Teamwork, Practical Integration Gestão de Projecto 14 Padrões de Gestão Os padrões de gestão de configurações

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

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

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

Por que os administradores de sistema devem estar atentos ao desempenho de virtualização e armazenamento

Por que os administradores de sistema devem estar atentos ao desempenho de virtualização e armazenamento Por que os administradores de sistema devem estar atentos ao desempenho de virtualização e armazenamento 2013, SolarWinds Worldwide, LLC. Todos os direitos reservados. É importante que os administradores

Leia mais

Na medida em que se cria um produto, o sistema de software, que será usado e mantido, nos aproximamos da engenharia.

Na medida em que se cria um produto, o sistema de software, que será usado e mantido, nos aproximamos da engenharia. 1 Introdução aos Sistemas de Informação 2002 Aula 4 - Desenvolvimento de software e seus paradigmas Paradigmas de Desenvolvimento de Software Pode-se considerar 3 tipos de paradigmas que norteiam a atividade

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

Padrões Arquiteturais e de Integração - Parte 1

Padrões Arquiteturais e de Integração - Parte 1 1 / 58 - Parte 1 Erick Nilsen Pereira de Souza T017 - Arquitetura e Design de Aplicações Análise e Desenvolvimento de Sistemas Universidade de Fortaleza - UNIFOR 11 de fevereiro de 2015 2 / 58 Agenda Tópicos

Leia mais