Existe muito de tal código. Todos os dias você usa dezenas de sites que precisam disso. Embora esses dias sejam escritos principalmente em JavaScript e, às vezes, no ActionScript do Flash, a idéia geral permanece a mesma.
(Lembre-se de que um dos principais usos do Java foi para applets em sites - semelhante ao Flash mais tarde e ao JavaScript atualmente.)
Há também muito mais arquiteturas do que "PC e dispositivos móveis". Nas últimas duas décadas, os PCs usaram algumas dezenas de diferentes arquiteturas de CPU - por exemplo: 68000 , PowerPC , x86, amd64, Alpha, SPARC , ARM , ARM64 - e são apenas os populares .
Isso cria problemas em distribuição dos programas compilados.
Com código nativo, todos os proprietários desse site teriam que distribuir muitas versões diferentes do mesmo programa - uma para cada arquitetura de CPU (lembre-se, não são apenas duas), ou talvez para todos os sistemas operacionais × Combinação de CPU (como sistemas operacionais diferentes têm serviços diferentes, APIs diferentes, convenções de chamada diferentes na mesma CPU).
(Mesmo dentro da mesma arquitetura, muitos programas compilados para o Intel i686 não serão executados no i486, embora seja tecnicamente o mesmo x86 - mas com recursos diferentes. Por exemplo, o Debian Linux compila tudo para o i486, por isso não Faça uso de quaisquer recursos modernos da CPU, o que significa que os programas podem ser um pouco mais lentos. Por outro lado, o Arch Linux é compilado para i686, portanto, ele não será executado em uma CPU i486 antiga.)
Com o bytecode, a Sun / Oracle pode distribuir JVMs para todas as arquiteturas e os webmasters não precisam fazer nada além disso - eles precisam apenas de um arquivo .jar para todos.