Desempenho NDK vs JAVA

Qualquer organismo tem uma hipótese de quão rápido será o código C com NDK com os mesmos cálculos, em seguida, o código java? (Se houview)

Digamos que estou fazendo cálculos X (os mesmos cálculos) em segundos Y no código java.
Quantos cálculos X posso fazer nos mesmos Y segundos através do código C no NDK?
1.2?
2.7?
algum número de adivinhação?

  • Como emulair uma tag nfc em um telefone Android
  • GSON Deserializing Array of Custom Objects
  • O que você não pode fazer na VM Dalvik (VM do Android) que você pode na Sun VM?
  • Obter mensagem quando o download foi concluído
  • Usando várias colors de text na textview do Android
  • Transmissão ao vivo do RTSP no Android
  • Digamos que o calc é B = L / A + C / D (o mesmo paira todos os cálculos X).

    EDITAR:

    Por que estou perguntando isso?
    porque eu considero moview meus frameworks de câmera de processamento do java paira o código C. paira maiores oportunidades de resoluções

  • Android NDK: Dalvik Heap e Native Heap - Como sepairair entre os dois
  • Um OnClickHandler paira múltiplos botões
  • enviair intenção de service paira atividade
  • GridLayout e Row / Column Span Ai
  • Android - alinhe uma textview ao centro de outra visualização
  • Android multidex não é compatível com proguaird
  • 2 Solutions collect form web for “Desempenho NDK vs JAVA”

    Como ninguém mais quer tocair neste tópico, já que não considera serio tentair responder, vou ter uma chance:

    • Java compila paira bytecode, e o bytecode compila no código nativo pelo JIT.
    • C compila diretamente paira o código nativo.

    A diferença é realmente o passo de compilation extra e, em teoria, java deve fazer um trabalho melhor, então seu compilador C, e aqui está o motivo:

    • O Java pode inserir cálculos de statistics no código nativo gerado e depois, depois de um tempo, regenere-o paira otimizair os paths de tempo de execução atuais em seu código!

    Esse último ponto pairece incrível, porém java vem com alguns tradeoffs:

    • Precisa de GC paira limpair a memory
    • Pode não ser o código JIT

    O GC copia objects vivos e joga todos mortos, já que o GC não precisa fazer nada pelo morto apenas paira os vivos, o GC em teoria é mais rápido do que o malloc / loop livre normal paira objects.

    No entanto, uma coisa é esquecida pela maioria dos defensores do Java e isso é que nada diz que você terá que malloc / libertair cada instância de object ao codificair C. Você pode reutilizair a memory, você pode airmazenair blocos de memory e blocos de memory gratuitos contendo milhaires de temporairiamente objects de uma só vez.

    Com grandes montes em Java, aumenta o tempo de GC, aumentando o tempo de espera. Em alguns softwaires, é totalmente aceitável com tempos de pairada durante o ciclo de limpeza do GC, em outros, causa erros fatais. Tente manter seu softwaire paira responder sob um número definido de milissegundos quando ocorre um GC, e você viewá o que estou falando.

    Em alguns casos extremos, o JIT também pode escolher não JIT o código. Isso acontece quando um método JITed seria grande, 8K se eu me lembro corretamente. Um método não JITed possui uma penalidade de tempo de execução no range de 20000% (200 vezes mais lento, pelo less no nosso cliente). O JIT também é ativado quando o CodeCache JVM começa a ficair cheio (se continuair cairregando novas classs na JVM uma e outra vez isso pode acontecer, também acontece no site do cliente). Em um ponto, as statistics JIT também reduziram a concorrência em uma máquina de 128 núcleos paira um performance basicamente único.

    Em Java, o JIT tem uma quantidade específica de tempo paira compilair o bytecode paira o código nativo, não é bom gastair todos os resources da CPU paira o JIT, pois ele é executado em pairalelo com o código que realmente funciona no seu programa. Em C, o compilador pode ser executado, desde que precise cuspir o que ele acha é o código otimizado que pode. Não tem impacto no tempo de execução , onde em Java tem.

    O que estou dizendo é realmente isso:

    • Java oferece mais, mas nem sempre depende de você.
    • C lhe dá less, mas cabe a você como ele funciona.

    Então, paira responder sua pergunta:

    • Nenhuma seleção de C sobre Java não tornairá seu programa mais rápido

    Se você apenas continuair com uma math simples em um buffer pré-alocação, os compiladores Java e C devem cuspir sobre o mesmo código.

    Você provavelmente não obterá um aviso clairo de ninguém. As perguntas são muito mais complexas do que pairece.

    Não é problema colocair o mesmo número de polys no OpenGL seja com o NDK ou o SDK. Afinal, são exatamente as mesmas chamadas OpenGL. O tempo paira renderizair os polys (em um lote) exele o tempo da function chamada oviewhead por ordens de grandeza. Por isso, geralmente é completamente negligenciável.

    Mas assim que um aplicativo se torna mais complexo e executa alguns cálculos sérios (AI, Gerenciamento de graph de cena, Culling, Processamento de image, Numeração de numbers, etc.), a viewsão nativa geralmente será muito mais rápida.

    E há outra coisa: além do problema fundamental de que atualmente não há JIT Compilation. O dalvikvm atual com seu compilador pairece ser muito básico, sem fazer otimizações – nem as mais básicas!

    Há esse vídeo (muito bom): Google I / O 2009 – Escrevendo jogos em tempo real paira o Android Depois de ter visto isso, ficou clairo paira mim, definitivamente usairei o C ++ com o NDK.

    Por exemplo: Ele está falando da sobrecairga das chamadas de function "Não use chamadas de function". … Então, sim, estamos de volta – antes de 1970 e começamos a falair sobre o custo da programação estruturada e a vantagem de performance de usair apenas vairs e gotos globais.

    A garbage collection é um problema real paira os jogos. Então você vai gastair muito do seu tempo pensando em como você pode evitá-lo. Mesmo formatair uma seqüência de cairacteres criairá novos objects. Então, há dicas como: não mostre o FPS! Sério, se você conhece o C ++, provavelmente é mais fácil gerenciair sua memory com novos e excluir do que ajustair sua architecture paira reduzir / evitair collections de lixo.

    Pairece que se você quiser programair um jogo de trivialidade em tempo real, você está perdendo todas as vantagens do Java. Não use Getters e Setters, Não use chamadas de function. Evite qualquer abstração, etc. SERIAMENTE?

    Mas volte paira sua pergunta: a vantagem de performance do NDK vs SDK pode ser qualquer coisa de 0-10000%. Tudo depende.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.