Ae Leandro,
Vou tentar dar uma explicaçãozinha.
Vamos supor que vc tem uma classe chamada MarceloQuinho.java, que tem o método main. Certo, vamos começar:
Quando vc compila a classe, vai fazer um MarceloQuinho.class (é naaaaaaada) que tem tudo que o .java tem, sendo que agora em escrito em linguagem de máquina da JVM. Quando essa classe vai ser acessada ocorre o seguinte:
O ClassLoader é chamado, carregando a classe MarceloQuinho para a mémoria, juntamente com todos os campos e superclasses da classe. Geralmente, ele é escrito em C.
Depois é chamado o Verificador de Bytecodes, que verifica se a classe não foi violada depois de compilada. Verifica se as variaveis são incializadas direitinho, as chamadas de métodos, …
Depois vem o SecurityManager, que verifica determinadas operações: se a Thread pode cirar um novo ClassLoader, subprocesso, VM, …
Dicas:
E vc pode fazer o seu ClassLoader 
Vc pode mandar rodar a classe sem verificar os bytecodes. :roll:
Por default, nenhum securitymanager vem, ae vc pode definir o seu próprio. 
Da uma olhada ainda aqui: http://www.securingjava.com/
[]'s