Já procurei na internet e não encontrei nada. Alguém poderia me dizer se existe alguma forma de melhorar o desempenho de programas java que rodam sobre processadores com mais de um núcleo? Ou o escalonamento das threads fica a cargo do sistema operacional e da JVM.
Fica a cargo do Sistema Operacional. Não há comando específicos para a distribuição multi-core.
Você pode tentar faze-los em JNI, mas geralmente mexer nesse tipo de coisa realmente não vale a pena.
Ola,
Não sou um profundo pesquisador nesta área, mas devido ao pequeno conhecimento que tenho da arquitetura da JVM, programas Java, eu diria que este escalonamento é feito pelo S.O em conjunto com a JVM, pois nós, desenvolvedores Java não temos acesso ao hardware, diretamente, lembra disto, só atraves da JVM… então desta forma acredito que via java vc não consegue fazer nada referente a isto não… a não ser seguir boas práticas de programação para que seu codigo fique “performáticamente” legal.
Uma forma é vc. reescrever seu código para permitir mais operações em paralelo. Algo que significaria apenas mais overhead em uma máquina monoprocessada pode ter um ganho linear de performance, proporcional ao número de núcleos existentes, desde que não haja contenção provocada por outros recursos que tenham que ter acesso serializado. Exemplos de aplicações que enquadram-se neste cenário são os de processamento de imagem e cálculos envolvendo elementos finitos.
Já em outros cenários o maior número de núcleos acaba permitindo um maior throughput do sistema, mas sem melhoria no desempenho de tarefas individuais.