3 votos

¿Pueden las bibliotecas compartir memoria como en linux?

¿Es posible que las bibliotecas compartan memoria como la memoria compartida en linux? (La característica de memoria compartida adoptada en System V y posteriormente adoptada a linux)

Por ejemplo: Cuando dos aplicaciones están trabajando simultáneamente y ambas utilizan la biblioteca OkHttp, ¿se carga la biblioteca en memoria dos veces?

3voto

Andy Brudtkuhl Puntos 1714

La misma función de memoria compartida sigue estando presente en Android, y funciona con las bibliotecas compartidas incorporadas, como OpenGL ES, pero no se utiliza para las bibliotecas de terceros, como estás preguntando. Cada aplicación que utiliza una biblioteca de terceros tiene que incluir la biblioteca en su archivo APK. Entonces no son bibliotecas compartidas (en el .so sentido): sólo son archivos duplicados que pueden contener el mismo código. (Normalmente no contendrán el mismo código porque diferentes aplicaciones habrán sido construidas contra diferentes versiones de la biblioteca).

Así se evitan posibles incompatibilidades o problemas de seguridad causados por la actualización de librerías de diferentes apps. Las incompatibilidades de las bibliotecas compartidas son un gran problema en los sistemas GNU/Linux. Las distribuciones se esfuerzan mucho en evitarlas probando diferentes combinaciones de aplicaciones y bibliotecas, pero aun así a veces salen mal. En Android, donde nadie es responsable de asegurar que las diferentes aplicaciones funcionen juntas, ese tipo de sistema de bibliotecas compartidas daría lugar a que las aplicaciones se rompieran a menudo cuando se actualiza una biblioteca compartida. Los problemas de seguridad podrían surgir en un sistema que utilizara las bibliotecas compartidas de esta manera, porque una aplicación podría actualizar una biblioteca compartida a una "versión más nueva" que en realidad está hackeada para filtrar información o controlar la aplicación. Las bibliotecas tendrían que ser tratadas como paquetes separados, firmados por el autor, al igual que las aplicaciones, y entonces tendría que haber un proceso complejo para manejar las actualizaciones de versiones.

0 votos

Supongo que la excepción son las "bibliotecas básicas" preinstaladas.

0 votos

No creo que las bibliotecas centrales tengan una excepción en este caso.

0 votos

Esto es incorrecto. Al igual que Linux, Android crea un mmap de copia-en-escritura de las bibliotecas, el kernel compartirá automáticamente la memoria para el mmap cuando sea posible. Todas las bibliotecas del núcleo del sistema también son cargadas por zygote y compartidas cuando se bifurca un nuevo proceso. Referencia .

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X