JVM com recursos infinitos?

Esta aqui pensando… existe alguma forma de definir que “tal classloader só pode ocupar tantos % dos recursos da JVM” ?

Ex: uma app no tomcat… MUITO MAU COMPORTADA… comeca a entupir a HEAP… ela entope até dar um OutOfMemory… e levar com ela todo o Tomcat com outras 14 apps rodando…

Existe uma forma de “bloquear” tal comportamento ? dizer “olha… app tal soh pode consumir 20% dos recursos da JVM”

?!?!?!

Se você usar a JVM da IBM rodando sob z/OS (mainframes) você pode configurar isso, se não me engano.
Eles sabem que isso dá problemas…

credo… nao existe uma forma usando a VM da Sun em i386 ? hehehe

Cara isso me lembra um export do Oracle OWB em que vi acontecer de o windows mostrar um comsumo da memória da JVM bater os 900 MB, e detalhe a máquina tinha 1 GB… huahuaa

Java não possui isolamento interno a aplicação, algo como os AppDomains do .net, ou ainda melhor, os processos do erlang. No erlang você consegue controlar o consumo de recursos de cada processo - podendo não só limitar mas fazer provisionamento e usar estratégias que envolvam gerenciamento dinâmico.

vixe… isso é uma puta falta do java… digamos que seria um ponto para o .Net

Erlang ++

Louds estava lendo… mas no caso do AppsDomains do .Net existe um custo bastante caro para ele… cada domain tem sua heap , sua memoria… ou seja… chega a ser tão isolado que praticamente consome o dobro de recursos…

quase como se estivesse rodando 2 jvms…

o que eu li eh o correto ?

seria pedir demais para cada Classloader do java funcionar isoladamente do outro ? (ou com a possibilidade de) ??

ae poderiamos controlar recursos para tal e nao deixar estourar a bomba…

Mas tudo isso sairia mais caro, além da JVM o container teria que dispôr disso.

[quote=chun]Louds estava lendo… mas no caso do AppsDomains do .Net existe um custo bastante caro para ele… cada domain tem sua heap , sua memoria… ou seja… chega a ser tão isolado que praticamente consome o dobro de recursos…

quase como se estivesse rodando 2 jvms…

o que eu li eh o correto ?[/quote]

As heaps de cada AppDomain são conceituais, a VM pode implementá-las como quiser, inclusive usando uma só para todos AppDomains. Normalmente isso não é um problema significativo, já que os objetos criados vão ser os mesmos independente da maneira armazenada.

Domains são objetos pesados de criar, porém muito mais leves que processos. O consumo de memória é sensivelmente menor pois todos assemblies compartilhados são compilados uma única vez - imagine a economia só por conta do mscorlib.

AppDomain ainda não é solução para o seu problema, já que não é possivel gerenciar os recursos consumido por cada um, mas é um passo na direção correta.

Quanto a permitir isolamento entre classloaders, isso não é possivel pois hoje é normal existirem duzias de classloaders dentro de uma mesma aplicação, o que Java precisa é um controle de granulosidade maior, como um web-app inteira. Seria útil também se segurança fosse controlavel nesse nível também.

Um exemplo é o tal do JRuby, que cria um classloader para cada classe Ruby, se não me engano.

A JVM trabalha a questão da segurança baseada no conceito “sand box” ou caixa de areia, que permite aplicar políticas de restrição para código java e/ou aplicações.

marcio… e aonde que entra a “reserva de recursos” nesta sua afirmacoa ?

[quote=thingol]Se você usar a JVM da IBM rodando sob z/OS (mainframes) você pode configurar isso, se não me engano.
Eles sabem que isso dá problemas…[/quote]

O mesmo pra JVM da SAP que o Netweaver roda em cima.

]['s

[quote=fabio.patricio][quote=thingol]Se você usar a JVM da IBM rodando sob z/OS (mainframes) você pode configurar isso, se não me engano.
Eles sabem que isso dá problemas…[/quote]

O mesmo pra JVM da SAP que o Netweaver roda em cima.

]['s[/quote]

Tem algum link que fale sobre isso?

Pelo que eu andei lendo, a JVM da SAP não tem nada de especial, o truque deles é subir multiplas JVMs e armazenar HttpSession e SFSB em shared memory.

que xunxeira…