Dúvida sobre JVM

Galera, to com uma dúvida fundamental.
As linguagens C, C++ etc, precisam de um compilador para cada tipo de S.O, assim como na linguagem Java cada S.O precisa de uma JVM compatível.
Agora vem minha pergunta, já que a JVM interpreta os bytecodes para linguagem de máquina em tempo de execução, qual seriam as dependências que ela tem com o S.O? Seriam os APIs de cada sistema?
Obrigado! 8)

  1. A JVM não somente interpreta os bytecodes como também compila os bytecodes para linguagem de máquina, usando um recurso chamado “JIT” (Just-in-Time Compiler).
  2. Ela tem várias dependências:
    a) As APIs do sistema operacional (como você suspeitou)
    b) O código de ‘run-time’ do compilador C e C++ que foi usado para compilar uma determinada versão da JVM
    c) Mais algum código (normalmente em C ou C++) que foi usado para implementar determinadas funcionalidades que não são possíveis diretamente em Java.
    Um exemplo clássico é o código do ZLIB que é necessário para descompactar os arquivos .JAR e transformá-los em .CLASS em tempo de execução.

Dica: se quiser, baixe o fonte COMPLETO do JDK e veja tudo que foi necessário para criar uma versão Windows, uma versão Linux e uma versão Solaris em um mesmo fonte. (A versão dos fontes para o MacOSX encontra-se em um fonte separado, mas fora a parte © que mencionei acima, é muito semelhante ao código Linux e Solaris.

http://www.java.net/download/openjdk/jdk7u4/promoted/b22/openjdk-7u4-fcs-src-b22-02_may_2012.zip

[quote=entanglement]1) A JVM não somente interpreta os bytecodes como também compila os bytecodes para linguagem de máquina, usando um recurso chamado “JIT” (Just-in-Time Compiler).
2) Ela tem várias dependências:
a) As APIs do sistema operacional (como você suspeitou)
b) O código de ‘run-time’ do compilador C e C++ que foi usado para compilar uma determinada versão da JVM
c) Mais algum código (normalmente em C ou C++) que foi usado para implementar determinadas funcionalidades que não são possíveis diretamente em Java.
Um exemplo clássico é o código do ZLIB que é necessário para descompactar os arquivos .JAR e transformá-los em .CLASS em tempo de execução.

Dica: se quiser, baixe o fonte COMPLETO do JDK e veja tudo que foi necessário para criar uma versão Windows, uma versão Linux e uma versão Solaris em um mesmo fonte. (A versão dos fontes para o MacOSX encontra-se em um fonte separado, mas fora a parte © que mencionei acima, é muito semelhante ao código Linux e Solaris.

http://www.java.net/download/openjdk/jdk7u4/promoted/b22/openjdk-7u4-fcs-src-b22-02_may_2012.zip
[/quote]

entendi, obrigado mesmo