I had a problem with the ESP32 implementation specifically. The micropython implementation itself runs as a task under ESP-IDF, rather than bare metal, which is the case on some other microcontrollers like rp2350. So it doesn’t have access to the full resources of the board - as a good chunk is reserved for IDF.
I had a project where I had would make repeated API calls, which returned small to moderate json payloads.
To avoid running out of heap, I had to constantly force python garbage collection. That took a long time, so I wasn’t able to call the APIs on the intervals I needed.
Eventually I gave up and moved to using ESP IDF directly, which IMO was super easy to do - Espressif has made a great integration with VS Code. If anyone’s on ESP32, i would skip micropython.