Parfois, il est nécessaire de contourner la limite de mémoire de segment de l'application et d'en utiliser plus qu'elle ne le permet.Utilisation de la mémoire native via java
J'ai pensé à une solution qui inclura un mécanisme de mise en cache qui stockera des octets dans la mémoire native (pas dans la mémoire de tas, mais dans la mémoire non gérée).
Bien sûr, je prendrai en compte la taille maximale disponible du système.
Alors, sachant un peu direct buffers, j'ai utilisé ce pour stocker un tableau d'octets dans la mémoire native:
final ByteBuffer nativeBytes=ByteBuffer.allocateDirect(bytes.length);
nativeBytes.put(bytes);
Cependant, il semble que sur Android, la mémoire utilisée pour cela est utilisé dans le tas et pas dans la mémoire native.
Que se passe-t-il? Y at-il une alternative facile pour stocker & chargement des données de la mémoire native?
Il n'existe pas de "mémoire native"; la mémoire n'a aucune compréhension de native vs bytecode. Cela rend votre question très floue. – mah
il y a de la mémoire gérée et de la mémoire non gérée. la mémoire gérée a une limite d'environ 48 Mo et lorsque vous la passez, vous obtenez une exception de MOO. La mémoire non gérée correspond à peu près à la taille de la RAM de l'appareil, mais vous devez prendre soin de la libérer. une telle chose est disponible lorsque vous utilisez NDK ou OpenGL. –
Je n'appellerais pas cela facile (donc digne d'un commentaire peut-être pas une réponse), mais à partir de votre description, il semble que vous pourriez créer une classe avec des méthodes natives, où ces méthodes natives effectuent malloc() et free(). Si votre description de la façon dont DalvikVM gère la mémoire est correcte, cela devrait vous permettre de contourner la vérification DVM (en supposant qu'Android ne prenne pas de mesures actives pour l'empêcher). Le problème à résoudre serait alors de savoir comment accéder à cette mémoire à partir de Java. – mah