quand vous faites celaString anss = String(ans);vous doublez le besoin en mémoire puisque vous créez une String qui va recopier le buffer ans
Quand vous faites cela anss.remove(0,(anss.indexOf("DIST1 3F800000 00000000 FFEDB080 2710 F1 ")+41));vous créez (temporairement) une nouvelle String pour faire l'extraction. Si la string est très longue vous avez donc déjà fait quasiment x3 sur le besoin mémoire
Quand ensuite vous faites cela String Value = anss.substring(0,anss.indexOf(" "));vous recréez encore une fois une String en mémoire...
et idem pour la String temporaire à la fin quand vous faites
anss.remove(0,anss.indexOf(" ")+1);
qui est à nouveau couteux.
Toutes ces opérations mettent de la pression sur la RAM et ne sont sans doute pas nécessaire.
Vous pouvez sans doute utiliser plus avantageusement strtok(), strchr(), strstr() et strtol() pour extraire les valeurs.
Si vous me donnez un exemple du buffer ans[] je peux jeter un oeil