Por que os tamanhos dos programas são tão grandes?

186

Se observarmos o programa vintage Netscape Navigator ou uma versão anterior do Microsoft Word, esses programas tinham tamanho inferior a 50 MB. Agora, quando instalo o google chrome, ele tem 200 MB e a versão desktop do Slack, 300 MB. Eu li sobre alguma regra que os programas terão toda a memória disponível, não importa quanto, mas por quê?

Por que os tamanhos atuais de programas são tão grandes em comparação com 10 ou 15 anos atrás? Os programas não estão executando significativamente mais funções e não parecem muito diferentes. O que é que é o porco do recurso agora?

Niklas Rosencrantz
fonte
134
Apenas 4 vezes o tamanho ?! Isso é incrível, considerando como muito mais um navegador moderno faz
Richard Tingle
23
Como uma observação lateral, acredito que "algumas regras dizem que os programas terão toda a memória disponível, não importa quanto, mas por quê?" provavelmente se refere à memória de acesso aleatório, e não ao espaço físico em disco, pelo menos essa seria minha interpretação. Pode estar errado.
precisa saber é o seguinte
103
Então, o que você está dizendo é que um programa que antes ocupava US $ 10 em espaço no disco rígido agora ocupa cerca de 30 centavos no espaço em disco? Acho isso difícil de se preocupar.
Eric Lippert
49
“Os programas não estão executando significativamente mais funções” - bom senhor. Basta dar uma olhada nas especificações HTML 4 e CSS 1 (não se preocupe, vou esperar - não vai demorar muito, mesmo que você as leia). O Netscape 4 nem conseguiu implementá-los adequadamente. Apenas a quantidade de HTML e CSS novos e malucos suportados pelo Chrome é considerável. Além disso, tem guias. E se atualiza a cada seis semanas.
Paul D. Waite
13
Entre. Os 50 MB nos tempos do Netscape eram grandes, mas, para o registro, incluía não apenas o navegador da Web, mas também o cliente de email e o editor HTML, e talvez até outra coisa.
el.pescado 25/09

Respostas:

266

"Parecer muito diferente" é uma questão de percepção. Os gráficos de hoje precisam ter uma resolução de tela totalmente diferente da que costumavam ser, com o resultado de que uma imagem de 100x100 que costumava ser mais do que suficiente para um logotipo agora fica terrivelmente pegajosa. Ele teve que ser substituído por uma imagem de 1000x1000 da mesma coisa, que é um fator de 100 ali. (Eu sei que você pode usar gráficos vetoriais, mas isso apenas enfatiza o ponto - o código de renderização de gráficos vetoriais teve que ser adicionado a sistemas que não precisavam dele antes, então isso é apenas uma troca de um tipo de aumento de tamanho para outro.)

"Trabalhar de maneira diferente" também é uma questão de percepção. O navegador de hoje faz muito mais do que um, desde 1995. (Tente navegar na Internet com um laptop histórico em um dia chuvoso - você achará quase inutilizável.) % deles, mas estão lá.

Além disso, é claro, há a tendência geral de gastar menos tempo na otimização de espaço e mais na introdução de novos recursos. Esse é um efeito colateral natural de computadores maiores, mais rápidos e mais baratos para todos. Sim, seria possível escrever programas tão eficientes em termos de recursos quanto em 1990, e o resultado seria surpreendentemente rápido e preciso. Mas não seria mais econômico; seu navegador levaria dez anos para ser concluído, quando os requisitos teriam mudado completamente. As pessoas costumavam programar com extrema atenção à eficiência, porque as máquinas pequenas e lentas do passado as obrigavam, e todo mundo fazia isso também. Assim que isso mudou, o gargalo para o sucesso do programa deixou de ser capaz de executar em tudo a corrermais e mais coisas brilhantes , e é aí que estamos agora.

Kilian Foth
fonte
120
Exemplos concretos de coisas que um navegador moderno deve incluir seriam bibliotecas de criptografia, banco de dados Unicode, tempo de execução JavaScript e compilador JIT otimizado, codecs de vídeo, renderizador de PDF, além de um mecanismo de renderização complicado e analisadores para todos os tipos de MIME suportados. Isso aumenta, mas, ao contrário dos navegadores de jogos, não exige muitos recursos de alta resolução. Um download moderno do Firefox pesa apenas 40–50 MB compactados.
amon
23
"o resultado seria incrivelmente rápido e liso" - soa como uma ilusão.
Doc Brown
16
@amon Não se esqueça que os navegadores também incluem outros tipos de recursos e uma API inteira para plugins e outros itens. Eles ainda vêm com ferramentas de depuração (criadores de perfil, analisadores de rede, inspetores de elementos, um console totalmente funcional, depuradores e muito mais). Os navegadores estão se aproximando de todo um sistema operacional do que todos podemos imaginar. Há até uma discussão em andamento para usar o Web Assembly! O OP deve se surpreender com a tonelada de porcaria que pode amontoar em um navegador.
Ismael Miguel
10
@IsmaelMiguel No que diz respeito ao Chrome OS, os navegadores já são um sistema operacional inteiro. ;-P
Ajedi32
111
tendency to spend less time on optimizing things for space Este. Quando escrevo código, não otimizo espaço ou velocidade. Otimizo para manutenção. É mais importante que a base de código possa mudar facilmente do que ser rápida ou pequena. Posso esperar que, para cada reclamação sobre a velocidade do programa, receba dez solicitações de novos recursos e zero solicitações para reduzi-lo.
user2023861
109

Se você comparar o Netscape Navigator a um navegador moderno, há uma enorme diferença na funcionalidade. Basta comparar a especificação do HTML 3.2 (51 páginas quando eu faço uma visualização de impressão) com a especificação do HTML atual (a versão em PDF é 1155 páginas). Isso é um aumento de 20x no tamanho.

O Netscape Navigator não tinha um DOM e não tinha CSS! Não houve alterações dinâmicas no documento, nenhum JavaScript modificou o DOM ou as folhas de estilo. Sem guias. Sem áudio ou vídeo. Um navegador moderno é um programa muito mais complexo.

JacquesB
fonte
12
Sim, navegadores recentes realizam animações, gradientes, efeitos de filtros de imagem, JavaScript, gráficos 2D (tela), gráficos 3D com WebGL, geração de áudio, gamepad (!), Decodificação de vídeo, armazenamento avançado do lado do cliente, comunicação ponto a ponto (WebRTC), georeferenciada, WebSocket, WebCryptography, MIDI, o acesso ao microfone / webcam, avisos, etc
ysdx
11
Adicione fazer mais coisas (DOM, CSS, Javascript) para também ter mais propriedades (vários monitores, aumento maciço de resolução: telas de computador cada vez maiores: 1999 a 2011 ) - 800x600 vs 1920x1080 vs 4k ... 8k e mais ... 1080 a 4k é quadruplicar a resolução ... 8k é quadruplicar novamente.
WernerCD
7
@WernerCD Simplesmente ter uma tela maior não requer um binário maior. Um ícone de 64 por 64 pixels e 32 bits exigirá a mesma quantidade de espaço no disco, seja ele exibido em um monitor de 800x600 ou 2560x1440. Redimensionar sua janela não altera o tamanho do binário. O que importa com os monitores é quando você começa a fazer coisas como duplicação de pixels e precisa de recursos maiores para continuar com uma aparência mais nítida.
precisa saber é o seguinte
11
@ 8bittree, pode colocar uma demanda maior no desempenho do software. E um código com melhor desempenho pode ser mais complexo (por exemplo, um site que usa o Canvas provavelmente precisa de mais complexidade e código do que um que usa SVGs). Mas sim, você está correto.
Paul Draper
11
Embora seja certamente verdade que o HTML atual faça muito mais do que o HTML 3.2, a especificação em si também é muito mais detalhada, o que adiciona uma quantidade significativa de conteúdo à especificação. Compare o comprimento da descrição do EMelemento do HTML 3.2 - oito ou nove palavras completas - com o comprimento do mesmo na especificação do HTML 5 - para mim, mais do que uma tela incluindo o material circundante que descreve o elemento, em que é aplicável e qual é o seu uso pretendido.
um CVn
79

Uma razão é que os dados empacotados nos aplicativos são maiores porque são de maior resolução e qualidade. Um ícone na época do Netscape tinha no máximo 32x32 pixels, com profundidade de 8 bits (possivelmente apenas 4), enquanto agora provavelmente é algo como 64x64 e está em cores reais com transparência, o que significa profundidade de 32 bits. Isso é 16 vezes maior. E o espaço é tão barato que as pessoas nem se dão ao trabalho de verificar a opção "compactado" ao gerar um PNG.

Outro motivo é que hoje em dia os aplicativos carregam uma quantidade impressionante de dados, o que os aplicativos mais antigos não possuíam. Hoje existem aplicativos que são enviados juntamente com uma apresentação de "introdução" em vídeo .

Outro motivo é que as linguagens de programação atuais tendem a combinar com ambientes ricos em tempo de execução, que são razoavelmente grandes, na faixa de 100 MB cada. Mesmo se você não usar todos os recursos do seu ambiente de tempo de execução, ainda precisará empacotar tudo com seu aplicativo.

Mas a principal razão é que hoje existem toneladas e muitas bibliotecas por aí que podemos usar em nossos aplicativos, e desenvolvemos uma cultura de uso de bibliotecas para evitar a constante reinvenção da roda. Obviamente, uma vez que você começa a usar bibliotecas, várias perguntas aparecem e nós desenvolvemos o hábito de dar as respostas mais liberais para elas:

  • Vale a pena incluir mais uma biblioteca se ela for usada por apenas uma de minhas funções? - Sim.

  • Vale a pena incluir mais uma biblioteca se eu precisar apenas de um pequeno subconjunto de toda a riqueza de funcionalidades oferecidas por essa biblioteca? - Sim.

  • Vale a pena incluir mais uma biblioteca se a sua inclusão me salvar de 2 dias de trabalho? - Sim.

  • Vale a pena incluir várias bibliotecas que atendem mais ou menos ao mesmo objetivo, apenas porque diferentes programadores na minha folha de pagamento já estão familiarizados com diferentes bibliotecas? - Sim.

    (Observe que estou apenas observando essas tendências, não estou fazendo nenhuma declaração quanto a concordar ou discordar delas.)

Outro motivo que vale a pena mencionar é que, ao tentar decidir qual aplicativo usar entre várias opções, alguns usuários pensam que aquele que ocupa mais espaço terá mais recursos, terá gráficos mais sofisticados etc. (o que é um absurdo completo, é claro .)

Então, para concluir, o software se comporta como o gás? Tende a ocupar todo o espaço disponível? Em certo sentido, sim, mas não de forma alarmante. Se olharmos para o que ocupa mais espaço em nossas unidades, para a maioria de nós, a resposta é que não são aplicativos, mas mídias, como filmes e música, de longe . O software não tem inchado na mesma proporção em que a capacidade de armazenamento está se expandindo, e é improvável que isso aconteça, portanto, no futuro, os aplicativos provavelmente representarão uma fração desprezível do espaço de armazenamento disponível para os usuários.

Mike Nakis
fonte
17
Essa é a resposta correta. Os comentários (atualmente) de classificação mais alta mencionam mais funcionalidade, mas isso não explica completamente o tamanho aumentado. O tamanho vem das bibliotecas incluídas que fornecem essas funcionalidades.
user1936
5
@IsmaelMiguel bem, eu estava falando sobre usuários regulares. Além disso, os jogos são um caso especial, porque esses 35 GB são principalmente de mídia, não de código nem de bibliotecas. Por acaso são mídias que você só pode ver através de um aplicativo especial, que é o jogo. Mas mesmo para um jogador, 35 GB não são nada nas unidades de vários terabytes de hoje. De qualquer forma, suponha que se você é um jogador que insiste em possuir uma pequena unidade, não está nem perto do representante dos usuários por aí.
Mike Nakis
2
@MikeNakis Nem todo jogador tem uma unidade de 1 TB ou o dinheiro para comprar um SSD de 256 GB. Alguns, como eu, têm um SSD de 128 GB ou um laptop com menos de 500 GB. Há um tempo atrás, 80% do meu espaço em SSD era simplesmente jogos. Foram simplesmente 3-4 jogos, comendo o espaço. E no próprio jogo, quase todo mundo tem um laptop e joga nele.
Ismael Miguel
5
@ Mike oh, isso não importa. Quando falamos do tamanho de um aplicativo, queremos dizer o tamanho do arquivo de instalação para download ou o espaço total ocupado pelo aplicativo no disco, uma vez instalado. Isso inclui bibliotecas, mídia, dados, tudo. Hoje em dia, para evitar problemas de incompatibilidade, os aplicativos geralmente são enviados junto com a maioria das bibliotecas necessárias, em vez de esperar que as bibliotecas já estejam instaladas e sejam da versão correta etc. O tamanho do arquivo executável principal realmente não tem nenhum interesse nem conseqüência.
Mike Nakis
3
@IsmaelMiguel Para um programador, é provável que sejam diferentes máquinas virtuais, contêineres de encaixe e outros. Não há melhor do que inchar multiplicando sistemas inchado inteiros ;-)
cmaster
16

Além dos outros ansers, há dez anos, normalmente havia versões separadas para versões localizadas / internacionalizadas. Agora é geralmente o caso de programas oferecerem suporte completo à localização em todas as versões lançadas que atendam ao tamanho do programa.

Eterm
fonte
5
Posso estar errado, mas estou trabalhando com a ilusão de que as cordas são a menor parte desse problema. É verdade que existem muitos idiomas por aí, mas ainda assim a quantidade de strings que um usuário vê é muito limitada. Afinal, uma das maneiras mais seguras de falhar na interface do usuário é incluir muito texto.
25/09/2015
5
Somando-se o que @cmaster disse, Firefox especificamente que não agrupar localização completa (e enquanto eu estou pensando sobre isso, nem o OpenOffice.)
BenjiWiebe
2
@cmaster Strings, não. Mas vídeo e áudio localizados, especialmente no contexto de jogos? No IIRC, houve um jogo de 60 GB (GTA V?) Em que> 10 GB eram apenas áudio localizado. Essa é uma parte significativa.
Bob
@ Bob certo, eu não estava pensando em jogos, eles parecem ser a grande exceção ao que eu escrevi.
C28
Para cada idioma, a tabela de cadeias pode adicionar até alguns K bytes extras. Apenas os ícones de aplicativos sozinhos normalmente anão o tamanho total de todos os conteúdos string (possíveis exceções são aplicações com dicionários incorporados)
andyb
13

Uma razão é dependências. Um programa com funcionalidade rica e boa aparência precisa de muitas coisas - criptografia, verificação ortográfica, trabalho com XML e JSON, edição de texto e muitas outras coisas. De onde eles viriam? Talvez você faça o seu próprio e mantenha-o o menor possível. Provavelmente você usa componentes de terceiros (de código aberto licenciado pelo MIT, talvez) que possuem muitas funcionalidades que você realmente nunca precisa, mas depois que você precisa de uma única função de um componente de terceiros, geralmente precisa carregar todo o componente. Assim, você adiciona cada vez mais dependências e, à medida que elas próprias evoluem e crescem, seu programa que depende delas também cresce.

dente afiado
fonte
Estou meio curioso por que isso teve dois votos negativos da noite para o dia.
Sharptooth #
6
Não, mas não acho que isso realmente responda à pergunta com profundidade suficiente. Simplesmente diz "o software fica maior porque faz mais coisas", e você verá pelas outras respostas que realmente há mais do que isso.
Lightness Races in Orbit
11
Um fator relacionado é que, em sistemas que usam vinculação estática, um vinculador pode precisar apenas inserir código que é realmente usado [alguns vinculadores sempre inserem tudo, mas os melhores tentam ser seletivos]. Ao usar a vinculação dinâmica, especialmente se os módulos puderem ser compartilhados, mesmo que o primeiro código que instale um módulo precise apenas de uma função, não há como saber quais funções podem ser necessárias por outro código que deseja compartilhar o módulo.
supercat
@ sharptooth Eu nem me pergunto mais. Enquanto na maioria dos casos, o sistema funciona também vejo horrivelmente errado respostas quebrados se upvoted como um louco e aceito enquanto os corretos são downvoted no esquecimento, muitas vezes ...
Brian Knoblauch
10

Embora os gráficos / usabilidade sejam de fato fatores contribuintes, há uma quantidade enorme de códigos compilados em excesso de biblioteca / excesso.

Exemplo de como o código ainda pode ser pequeno: MenuetOS, um sistema operacional completo de 64 bits com aplicativos poderosos que se encaixam em um único disquete.

Exemplo de como o código pode ser grande sem motivo óbvio: criei uma saída de texto simples "Olá, mundo!" em Ada recentemente. O executável compilado tinha mais de 1 MiB !. O mesmo executável no assembly é apenas um KiB ou 2 (e a maior parte disso é sobrecarga executável, o código em execução real é dezenas de bytes).

Brian Knoblauch
fonte
3
O que é um disquete? ;)
500 - Erro interno do servidor
@ 500-InternalServerError O que é Ada? : D
BenjiWiebe
3
para recém, disquete é de cerca de 1,4 MIB
Sarge Borsch
3
Eu vi executáveis ​​modernos do Ada com menos de 200 bytes. Mas se o seu compilador obtém coisas como um tempo de execução completo de tarefas por padrão, se você usa tarefas ou não, então é esperado 1 MB ou mais. E geralmente não vale a pena aborrecê-lo.
Brian Drummond
@BrianDrummond, parece um tempo de execução realmente ruim, ou um tempo de execução ruim e uma biblioteca e vinculador. Em um vídeo de treinamento que eu vi muitos anos atrás, Jean Ichbiah et al mencionaram que um tempo de execução típico da Ada (para a versão original da linguagem) seria de cerca de 4K. Por curiosidade, verifiquei isso no pacote de tempo de execução da TI 320C30 que estávamos usando. Ele estava certo sobre o dinheiro.
John R. Strohm
7

É trivialmente verdade que o software precisa ser construído para se ajustar a duas coisas: os usuários e o hardware disponível. Um programa é adequado a sua finalidade se ele faz o que o usuário deseja em tempo hábil com o hardware à sua disposição. Bem, duh. Mas, à medida que o hardware melhora basicamente todas as dimensões mensuráveis, aumenta o número de programas discretos que passam do impróprio para o adequado - o espaço do design aumenta:

  • Linguagens de nível superior tornam possível expressar idéias em menos tempo e código do que antes. Essa complexidade reduzida, por outro lado, torna possível expressar idéias cada vez mais complexas.
  • Agrupar mais dados com o aplicativo pode torná-lo instantaneamente mais utilizável. Por exemplo, provavelmente não demorará muito para que os aplicativos de verificação ortográfica sejam incluídos em todos os idiomas conhecidos pela humanidade - são apenas alguns gigabytes, afinal.
  • Os trade-offs de hardware permitem que desenvolvedores e usuários tenham mais opções de recursos. Veja, por exemplo, índices de banco de dados FLAC / OGG vs WAV, SVG vs PNG.
  • Interfaces humanas geralmente trocam o que anteriormente equivaleria a grandes quantidades de hardware para usabilidade. Anti-aliasing, altas resoluções, atualização rápida e troca entre o que equivale a painéis discretos contribuem para uma experiência mais realista e, portanto, intuitiva e relacionável.
l0b0
fonte
6

Definitivamente, isso vale para aplicativos Android. Há quatro anos, um aplicativo simples ocupava espaço de 2 a 5 megabytes. Atualmente, um aplicativo simples ocupa cerca de 10 a 20 megabytes de espaço.

Quanto mais espaço disponível, maior o tamanho do aplicativo.

Eu acho que existem duas razões principais no caso do Android:

  • O Google expandiu a estrutura do Android, adicionou muitas novas funcionalidades.

  • Os desenvolvedores não se importam mais. As imagens são incluídas em uma resolução muito mais alta (é claro que as resoluções de tela do smartphone aumentaram), as bibliotecas de terceiros são incluídas sem pensar.

Mike76
fonte
11
Esse último ponto é exatamente correto.
Lightness Races in Orbit
3
Fiz um total de um aplicativo para Android e o APK é de 0,05 MB. Então, novamente, isso não faz muito. Ainda estou me perguntando por que um aplicativo de cronômetro (com uma quantidade semelhante de funcionalidade como a minha, embora completamente diferente) leva vários MB.
immibis 26/09/2015
5
O último ponto é errado, os desenvolvedores fazem cuidado. Nós apenas temos que conciliar várias prioridades e tornar esse aplicativo um pouco maior faz sentido.
NPSF3000 26/09/2015
Também não ajudou o fato de o SDK (na época) insistir em adicionar uma biblioteca de 5 + MB ao meu aplicativo de 0,05 MB que eu não precisava, e lembrei de removê-lo antes da compilação do lançamento.
immibis
4

Muito disso se resume ao tempo do desenvolvedor e ao custo desse tempo. Nos dias em que o Visual Basic chegou à cena, ele estava competindo com C / C ++ e a grande vantagem foi que você poderia escrever 'Hello World' no ANSI C para Windows em talvez 15K. O problema com o VB era que você sempre teve o albatroz da biblioteca de tempo de execução de 300K.

Agora, você poderia 10x o tamanho do seu programa VB e ainda seria apenas mais alguns K, mas 10x o tamanho do seu programa C / C ++ e você está olhando para alguns meses a mais de desenvolvimento.

No final, o inchaço de seus aplicativos é um preço pequeno a pagar pelos enormes saltos na produção de desenvolvimento, redução de preço e enorme vastidão de recursos que nunca seriam possíveis nos velhos dias de desenvolvimento artesanal; quando os programas eram pequenos e rápidos, mas também fracos, incompatíveis entre si, com pouco desempenho e desenvolvimento dispendioso.

andyb
fonte
2
é difícil ler este post (parede de texto). Você se importaria de editá -lo em uma forma melhor?
gnat
11
"10x o tamanho" do Hello World requer "meses a mais de desenvolvimento"? Escovar os dentes dez vezes envolve ficar em frente a um espelho sem parar por um mês?
bcrist
Escovar os dentes x vezes é uma função linear de x, mas a programação geralmente não é uma função linear. Se você criar todas as linhas de código usando as funções de linguagem de nível mais baixo, obterá código rápido e pequeno, mas com um custo mais alto por nível de complexidade. Linguagens de nível superior incham mais, mas mantêm o custo mais próximo de uma função linear da complexidade.
andyb
2

Com o tempo, as necessidades do usuário estão evoluindo e se tornando cada vez mais exigentes, de modo que fornecedores / autores de diferentes softwares são forçados a satisfazer essas necessidades em nome da concorrência.

Mas satisfazer uma nova necessidade significa muitas vezes adicionar novo código. Novo código significa novas vulnerabilidades para corrigir. A correção de novas vulnerabilidades pode adicionar código ou abrir portas para novas vulnerabilidades.

Cada recurso adicionado para satisfazer a necessidade de um usuário pode precisar de mais potência do processador para velocidade (todos reclamamos da velocidade deste ou daquele navegador), novos recursos gráficos para melhores efeitos visuais ... etc.

Tudo isso significa adicionar novas camadas de aplicativos (código), segurança e, às vezes, hardware.


fonte
0

Muito do tamanho vem de bibliotecas integradas. Atualmente, muitas aplicações são construídas usando elétrons, que agregam uma quantidade enorme à aplicação. Se você instalar aplicativos no Linux, eles geralmente são muito menores, porque grande parte do aplicativo já está instalado através de bibliotecas compartilhadas que outros programas também estão usando.

Qwertie
fonte
-1

Ao construir um software, se você precisar da função A, importará um módulo A *. A * pode resolver A, mas A * pode resolver problemas mais do que A, e A * pode ser grande. Todos os módulos grandes resultam no software de tamanho grande.

Talvez não seja o mesmo caso, mas algo como isto: Se você só precisa imprimir "olá mundo" no console usando Java, precisa do JRE (> 60 MB) instalado.

Se o exemplo de Java não for bom, tente o seguinte: Se o software precisar fazer logon no arquivo, ele poderá usar um módulo de log que pode realmente fazer logs no banco de dados, na rede e em alguns outros recursos, mas as funções nunca são usadas no o projeto.

neoedmund
fonte
Por que exatamente há cinco votos negativos e nenhum comentário explicando o porquê?
Kromster 26/09
11
@KromStern A primeira seção mostra muito sobre como as bibliotecas funcionam e o faz de uma maneira muito clara com o uso inconsistente de code. Eu diria que realmente não responde à pergunta. A segunda seção usa Java como exemplo (apesar de tentar reivindicar que o JRE deve ser considerado parte do crescimento do tamanho do aplicativo - que novamente perde o objetivo da pergunta e não é um exemplo justo e continua a perpetuar o mal-entendidos de Java). Em suma, está errado ou repete pontos nas respostas anteriores, melhor escritas.
11
Seu exemplo de logon na rede ou no arquivo também não é bom - porque, do ponto de vista do código, ambos são arquivos e são tratados exatamente da mesma maneira (a distinção entre arquivo e rede é tratada pelo sistema operacional). Ainda estou para ver uma estrutura de log que "faça logon no banco de dados" como parte de sua funcionalidade principal, pois isso seria complicado pelos drivers Oracle x MySQL x Sql Server x Postgres x ... e diferenças dialéticas.
@ user40980 A distinção entre o arquivo e a rede não é tratada pelo sistema operacional. Eles precisam de diferentes chamadas do SO para se conectar e gravar. O acesso ao banco de dados é tratado através de uma camada de independência do banco de dados, como JDBC ou libdbi. (Que por sua vez pode puxar drivers para todos os diferentes bancos de dados suportados!)
immibis
-2

Eu li sobre alguma regra que os programas terão toda a memória disponível, não importa quanto, mas por quê?

Isso não é bem verdade. Os sistemas não liberarão a memória consumida até que o sistema operacional fique sob pressão da memória. Isso é uma melhoria de desempenho. Se você estava navegando em uma página com imagens, navegava para longe. Você pode navegar de volta, precisando, portanto, da imagem novamente. Se o sistema operacional tiver RAM, não há sentido em limpar a memória até ter certeza de que não será necessário novamente.

Limpar a memória imediatamente levaria os ciclos da CPU e a largura de banda da memória para longe do usuário quando eles provavelmente desejam que páginas da web altamente responsivas sejam exibidas na tela.

O sistema operacional consumirá toda a memória disponível fora do aplicativo, a maioria destinada ao cache do sistema de arquivos.

O gerenciamento de memória é um problema difícil, mas há pessoas muito inteligentes trabalhando nele o tempo todo. Nada está sendo desperdiçado de propósito e o objetivo principal é fornecer um computador muito responsivo.

Phil Hannent
fonte
3
Não é disso que se trata esse ditado. A memória virtual e a coleta de lixo acabavam de ser inventadas quando essa citação foi escrita, e elas não eram comuns.
Jörg W Mittag
-2

Pode ser verdade que os programas tendem a se expandir para preencher o espaço disponível, semelhante aos fenômenos suburbanos, nos quais você adiciona novas faixas a uma rodovia superlotada e, em poucos anos, o backup é feito novamente.

Mas se você analisar, poderá descobrir que os programas realmente fazem mais coisas. Os navegadores, por exemplo, executam gráficos mais sofisticados, possuem excelentes ferramentas de desenvolvedor que não existiam há alguns anos, etc. Eles também se vinculam a muitas bibliotecas, às vezes usando apenas uma pequena parte do código. Portanto, embora os programas possam aumentar de tamanho para preencher a memória disponível, alguns deles podem ser razões legítimas.

Paul J Abernathy
fonte
2
este não parece oferecer nada substancial sobre os pontos feitos e explicado em antes 13 respostas
mosquito
-3

As bibliotecas criadas em objetos que não são otimizados requerem mais memória para carregar, instalar e mais ciclos de computação para operar. O código do objeto é, em grande parte, inchado.

Basta percorrer o código C ++ padrão em execução para ver todas as chamadas de objeto assert () ed para garantir que eles sejam objetos válidos. Quando você cria camadas sobre camadas de objetos que encapsulam objetos, os underlayers ficam inchados e opacos. Os programadores ficam preguiçosos e enfrentam mais objetos porque é mais rápido do que redesenhar o que é limitado à funcionalidade necessária. É realmente assim tão simples.

Considere o tamanho do kernel Linux C, apenas o kernel, versus o tamanho dos aplicativos sob medida. O kernel pode executar a máquina inteira. Mas não foi construído tão rapidamente quanto os aplicativos, leva tempo lentamente para criar a melhor funcionalidade.

daemondave
fonte