Android: Clean mapped byte buffers fails
See original GitHub issueOn Android the clean of mapped byte buffers fails with:
Caused by: java.lang.RuntimeException: unable to unmap the mapped buffer
at com.graphhopper.util.Helper.cleanMappedByteBuffer(Helper.java:426)
at com.graphhopper.storage.MMapDataAccess.clean(MMapDataAccess.java:356)
at com.graphhopper.storage.MMapDataAccess.close(MMapDataAccess.java:257)
at com.graphhopper.storage.MMapDataAccess.close(MMapDataAccess.java:249)
at com.graphhopper.storage.StorableProperties.close(StorableProperties.java:113)
at com.graphhopper.storage.GraphHopperStorage.close(GraphHopperStorage.java:277)
at com.graphhopper.GraphHopper.close(GraphHopper.java:1226)
at com.graphhopper.android.MainActivity.onDestroy(MainActivity.java:170)
at android.app.Activity.performDestroy(Activity.java:6881)
at android.app.Instrumentation.callActivityOnDestroy(Instrumentation.java:1153)
at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:4190)
at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:4221)
at android.app.ActivityThread.-wrap6(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1538)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
Caused by: java.security.PrivilegedActionException: java.lang.NoSuchMethodException: free []
at java.security.AccessController.doPrivileged(AccessController.java:71)
at com.graphhopper.util.Helper.cleanMappedByteBuffer(Helper.java:370)
at com.graphhopper.storage.MMapDataAccess.clean(MMapDataAccess.java:356)
at com.graphhopper.storage.MMapDataAccess.close(MMapDataAccess.java:257)
at com.graphhopper.storage.MMapDataAccess.close(MMapDataAccess.java:249)
at com.graphhopper.storage.StorableProperties.close(StorableProperties.java:113)
at com.graphhopper.storage.GraphHopperStorage.close(GraphHopperStorage.java:277)
at com.graphhopper.GraphHopper.close(GraphHopper.java:1226)
at com.graphhopper.android.MainActivity.onDestroy(MainActivity.java:170)
at android.app.Activity.performDestroy(Activity.java:6881)
at android.app.Instrumentation.callActivityOnDestroy(Instrumentation.java:1153)
at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:4190)
at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:4221)
at android.app.ActivityThread.-wrap6(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1538)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
Caused by: java.lang.NoSuchMethodException: free []
at java.lang.Class.getMethod(Class.java:1981)
at java.lang.Class.getMethod(Class.java:1637)
at com.graphhopper.util.Helper$1.run(Helper.java:377)
at java.security.AccessController.doPrivileged(AccessController.java:67)
at com.graphhopper.util.Helper.cleanMappedByteBuffer(Helper.java:370)
at com.graphhopper.storage.MMapDataAccess.clean(MMapDataAccess.java:356)
at com.graphhopper.storage.MMapDataAccess.close(MMapDataAccess.java:257)
at com.graphhopper.storage.MMapDataAccess.close(MMapDataAccess.java:249)
at com.graphhopper.storage.StorableProperties.close(StorableProperties.java:113)
at com.graphhopper.storage.GraphHopperStorage.close(GraphHopperStorage.java:277)
at com.graphhopper.GraphHopper.close(GraphHopper.java:1226)
at com.graphhopper.android.MainActivity.onDestroy(MainActivity.java:170)
at android.app.Activity.performDestroy(Activity.java:6881)
at android.app.Instrumentation.callActivityOnDestroy(Instrumentation.java:1153)
at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:4190)
at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:4221)
at android.app.ActivityThread.-wrap6(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1538)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
As reported here.
Issue Analytics
- State:
- Created 7 years ago
- Comments:17 (17 by maintainers)
Top Results From Across the Web
Unmapping or 'release' a MappedByteBuffer under Android
A mapped byte buffer and the file mapping that it represents remain valid until the buffer itself is garbage-collected. The content of a...
Read more >MappedByteBuffer - Android Developers
Mapped byte buffers are created via the FileChannel.map method. This class extends the ByteBuffer class with operations that are specific to memory-mapped ......
Read more >How to Fix java.lang.OufOfMemoryError: Direct Buffer Memory
2) You can use sun.misc.Cleaner class and Java reflection to call clean() method for freeing memory held by direct byte buffer. Since they...
Read more >Buffer Object - OpenGL Wiki
Allows the user to read the buffer via mapping the buffer. Without this flag, attempting to map the buffer for reading will fail....
Read more >Language Guide (proto3) | Protocol Buffers - Google Developers
When parsing a map from text format, parsing may fail if there are duplicate keys. If you provide a key but no value...
Read more >
Top Related Medium Post
No results found
Top Related StackOverflow Question
No results found
Troubleshoot Live Code
Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start Free
Top Related Reddit Thread
No results found
Top Related Hackernoon Post
No results found
Top Related Tweet
No results found
Top Related Dev.to Post
No results found
Top Related Hashnode Post
No results found
Oh, I forgot again to change in
build.gradle
the repositories. So indeed with old code I see too the exception on 5.1.1, good finding! 🙂Can be easily fixed as there is also a free method: https://android.googlesource.com/platform/libcore/+/android-5.0.2_r1/luni/src/main/java/java/nio/DirectByteBuffer.java