为什么程序在特定的智能手机上抛出OutOfMemoryError?

吉布森夫

编写了一个图形游戏程序。当我在模拟器和智能手机上编写测试时。一切正常。然后,他决定在另一部智能手机上进行尝试-该程序在很短的时间后就退出了。引发错误-java.lang.OutOfMemoryError: Failed to allocate a 576012 byte allocation with 45728 free bytes and 44KB until OOM

使用AndroidStudio中的事件探查器查看了已用内存的大小。

对于程序正常运行的智能手机,我得到了以下结果(可用RAM-750MB,版本android 7.1.1):

Total - 115MB; Java - 74MB; Native - 5,8MB; Graphics - 7,6MB; Stack - 0,6MB; Code - 21,5 MB; Others - 5MB.

除Java之外,所有值都是常量。此参数增长到大约-90MB。然后,垃圾收集器将删除所有不必要的内容,然后将参数(Java)再次降低为初始值。

在另一部智能手机上,一切也都正常运行(可用RAM-500MB,Android版本-10):

Total - 161MB; Java - 13MB; Native - 100MB; Graphics - 9MB; Stack - 0,6MB; Code - 34 MB; Others - 7MB.

在这种情况下,只有本机参数从60变为100MB

在第3部智能手机上,游戏1-2分钟后程序崩溃。来自探查器的数据:

Total - 166MB; Java - 81MB; Native - 11MB; Graphics - 35MB; Stack - 0,6MB; Code - 29 MB; Others - 5MB.

在这种情况下,只有Java参数从70更改为80MB(大约)引发错误-java.lang.OutOfMemoryError:未能分配576012字节的分配,其中包含45728个可用字节和44KB,直到OOM(可用RAM-400MB,Android版本- 7.0)我注意到第3个智能手机更强烈地加载Graphics参数,具有更少的可用RAM,而android版本是7.0。我不知道这是否会影响错误的外观。

告诉我可能是什么问题?

我发布了LOG文件的一个片段:

2021-02-26 12:51:22,824 [6294715]   INFO - ools.idea.run.tasks.DeployTask - Installing application: com.medinq.superlines 
2021-02-26 12:51:23,291 [6295182]   INFO - a.run.tasks.AbstractDeployTask - 284363961ms TRC_BEG [22751][22751] : installer 
2021-02-26 12:51:23,291 [6295182]   INFO - a.run.tasks.AbstractDeployTask - 284363965ms TRC_BEG [22751][22751] : Command Dump 
2021-02-26 12:51:23,291 [6295182]   INFO - a.run.tasks.AbstractDeployTask - 284363966ms TRC_BEG [22751][22751] : get process ids 
2021-02-26 12:51:23,292 [6295183]   INFO - a.run.tasks.AbstractDeployTask - 284364116ms LOG_ERR [22751][22751] : Could not get package user id: run-as: Could not set capabilities: Operation not permitted
 
2021-02-26 12:51:23,292 [6295183]   INFO - a.run.tasks.AbstractDeployTask - 284364117ms TRC_END [22751][22751] :  
2021-02-26 12:51:23,292 [6295183]   INFO - a.run.tasks.AbstractDeployTask - 284364117ms TRC_BEG [22751][22751] : CmdCommand::GetApksFromDump 
2021-02-26 12:51:23,292 [6295183]   INFO - a.run.tasks.AbstractDeployTask - 284364222ms TRC_END [22751][22751] :  
2021-02-26 12:51:23,292 [6295183]   INFO - a.run.tasks.AbstractDeployTask - 284364222ms TRC_BEG [22751][22751] : processing APK 
2021-02-26 12:51:23,292 [6295183]   INFO - a.run.tasks.AbstractDeployTask - 284364222ms TRC_END [22751][22751] :  
2021-02-26 12:51:23,292 [6295183]   INFO - a.run.tasks.AbstractDeployTask - 284364222ms TRC_END [22751][22751] :  
2021-02-26 12:51:23,292 [6295183]   INFO - a.run.tasks.AbstractDeployTask - 284364222ms TRC_END [22751][22751] :  
2021-02-26 12:51:25,216 [6297107]   INFO - a.run.tasks.AbstractDeployTask - Install successfully finished in 2 s 382 ms.. App restart successful without requiring a re-install. 
2021-02-26 12:51:26,834 [6298725]   INFO - run.AndroidLogcatOutputCapture - startCapture("samsung-sm_a510f-3300376233021439") 
2021-02-26 12:52:04,874 [6336765]   INFO - run.AndroidLogcatOutputCapture - stopCapture("samsung-sm_a510f-3300376233021439") 
2021-02-26 12:52:04,874 [6336765]   INFO - run.AndroidLogcatOutputCapture - stopAll() 
2021-02-26 12:52:19,115 [6351006]   INFO - j.ide.actions.RevealFileAction - Exit code 1 
2021-02-26 12:52:19,645 [6351536]   INFO - rationStore.ComponentStoreImpl - Saving appRegistry took 16 ms 
2021-02-26 12:54:04,487 [6456378]   INFO - ild.invoker.GradleBuildInvoker - About to execute Gradle tasks: [:app:assembleDebug] 
2021-02-26 12:54:04,503 [6456394]   INFO - s.plugins.gradle.GradleManager - Instructing gradle to use java from C:/Program Files/Android/Android Studio/jre 
2021-02-26 12:54:04,519 [6456410]   INFO - ild.invoker.GradleBuildInvoker - Build command line options: [-Pandroid.injected.invoked.from.ide=true, -Pandroid.injected.studio.version=10.4.1.1, -Pandroid.injected.attribution.file.location=C:\Users\Ura\AppData\Local\Temp\1614333244503-0, -Pandroid.injected.build.api=24, -Pandroid.injected.build.density=xxhdpi, -Pandroid.injected.build.abi=armeabi-v7a,armeabi] 
2021-02-26 12:54:04,519 [6456410]   INFO - xecution.GradleExecutionHelper - Passing command-line args to Gradle Tooling API: -Pandroid.injected.invoked.from.ide=true -Pandroid.injected.studio.version=10.4.1.1 -Pandroid.injected.attribution.file.location=C:\Users\Ura\AppData\Local\Temp\1614333244503-0 -Pandroid.injected.build.api=24 -Pandroid.injected.build.density=xxhdpi -Pandroid.injected.build.abi=armeabi-v7a,armeabi 
2021-02-26 12:54:05,266 [6457157]   INFO - ild.invoker.GradleBuildInvoker - Gradle build finished in 750 ms 
2021-02-26 12:54:05,267 [6457158]   INFO - a.gradle.run.MakeBeforeRunTask - Couldn't get post build models. 
2021-02-26 12:54:05,267 [6457158]   INFO - a.gradle.run.MakeBeforeRunTask - Gradle invocation complete, success = true 
2021-02-26 12:54:05,275 [6457166]   INFO - idea.run.AndroidProcessHandler - Adding device samsung-sm_a510f-3300376233021439 to monitor for launched app: com.medinq.superlines 
2021-02-26 12:54:05,278 [6457169]   INFO - notification.NotificationGroup - Notification group LaunchTaskRunner is already registered 
java.lang.Throwable
    at com.intellij.notification.NotificationGroup.<init>(NotificationGroup.kt:48)
    at com.intellij.notification.NotificationGroup.<init>(NotificationGroup.kt:28)
    at com.intellij.notification.NotificationGroup.<init>(NotificationGroup.kt:36)
    at com.intellij.notification.NotificationGroup.<init>(NotificationGroup.kt:36)
    at com.intellij.notification.NotificationGroup$Companion.toolWindowGroup(NotificationGroup.kt:93)
    at com.intellij.notification.NotificationGroup$Companion.toolWindowGroup$default(NotificationGroup.kt:92)
    at com.intellij.notification.NotificationGroup.toolWindowGroup(NotificationGroup.kt)
    at com.android.tools.idea.run.LaunchTaskRunner.run(LaunchTaskRunner.java:183)
    at com.intellij.openapi.progress.impl.CoreProgressManager$TaskRunnable.run(CoreProgressManager.java:932)
    at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$runProcessWithProgressAsync$5(CoreProgressManager.java:434)
    at com.intellij.openapi.progress.impl.ProgressRunner.lambda$null$3(ProgressRunner.java:233)
    at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$runProcess$2(CoreProgressManager.java:166)
    at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun(CoreProgressManager.java:627)
    at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:572)
    at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:61)
    at com.intellij.openapi.progress.impl.CoreProgressManager.runProcess(CoreProgressManager.java:153)
    at com.intellij.openapi.progress.impl.ProgressRunner.lambda$submit$4(ProgressRunner.java:233)
    at java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1604)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)
2021-02-26 12:54:05,279 [6457170]   INFO - ools.idea.run.tasks.DeployTask - Installing application: com.medinq.superlines 
2021-02-26 12:54:05,717 [6457608]   INFO - a.run.tasks.AbstractDeployTask - 284526413ms TRC_BEG [23108][23108] : installer 
2021-02-26 12:54:05,717 [6457608]   INFO - a.run.tasks.AbstractDeployTask - 284526413ms TRC_BEG [23108][23108] : Command Dump 
2021-02-26 12:54:05,717 [6457608]   INFO - a.run.tasks.AbstractDeployTask - 284526413ms TRC_BEG [23108][23108] : get process ids 
2021-02-26 12:54:05,717 [6457608]   INFO - a.run.tasks.AbstractDeployTask - 284526563ms LOG_ERR [23108][23108] : Could not get package user id: run-as: Could not set capabilities: Operation not permitted
 
2021-02-26 12:54:05,717 [6457608]   INFO - a.run.tasks.AbstractDeployTask - 284526564ms TRC_END [23108][23108] :  
2021-02-26 12:54:05,717 [6457608]   INFO - a.run.tasks.AbstractDeployTask - 284526564ms TRC_BEG [23108][23108] : CmdCommand::GetApksFromDump 
2021-02-26 12:54:05,717 [6457608]   INFO - a.run.tasks.AbstractDeployTask - 284526651ms TRC_END [23108][23108] :  
2021-02-26 12:54:05,717 [6457608]   INFO - a.run.tasks.AbstractDeployTask - 284526651ms TRC_BEG [23108][23108] : processing APK 
2021-02-26 12:54:05,717 [6457608]   INFO - a.run.tasks.AbstractDeployTask - 284526651ms TRC_END [23108][23108] :  
2021-02-26 12:54:05,717 [6457608]   INFO - a.run.tasks.AbstractDeployTask - 284526651ms TRC_END [23108][23108] :  
2021-02-26 12:54:05,717 [6457608]   INFO - a.run.tasks.AbstractDeployTask - 284526651ms TRC_END [23108][23108] :  
2021-02-26 12:54:06,969 [6458860]   INFO - a.run.tasks.AbstractDeployTask - Install successfully finished in 1 s 689 ms.. App restart successful without requiring a re-install. 
2021-02-26 12:54:09,280 [6461171]   INFO - run.AndroidLogcatOutputCapture - startCapture("samsung-sm_a510f-3300376233021439") 
2021-02-26 12:54:49,324 [6501215]   INFO - run.AndroidLogcatOutputCapture - stopCapture("samsung-sm_a510f-3300376233021439") 
2021-02-26 12:54:49,324 [6501215]   INFO - run.AndroidLogcatOutputCapture - stopAll() 
2021-02-26 12:55:27,086 [6538977]   INFO - rationStore.ComponentStoreImpl - Saving appBuiltInServerOptions took 15 ms, PropertiesComponent took 16 ms 
2021-02-26 12:55:27,117 [6539008]   INFO - rationStore.ComponentStoreImpl - Saving Project (name=SuperLines, containerState=ACTIVE, componentStore=C:\Users\Ura\AndroidStudioProjects\SuperLines) ProjectView took 16 ms 
2021-02-26 12:55:37,825 [6549716]   INFO - j.ide.actions.RevealFileAction - Exit code 1 
2021-02-26 12:55:38,340 [6550231]   INFO - rationStore.ComponentStoreImpl - Saving appExportableFileTemplateSettings took 16 ms 
酥脆的

每个设备上的最大Java堆大小是不同的。您可以通过调用getMemoryClass来找到其大小如果您的应用尝试分配更多空间,则无论设备的总体RAM状况如何(即使仍有可用RAM),都将引发OutOfMemoryError。JVM将在引发异常之前调用GC,但如果没有足够的空间可以释放下一个分配(因为已使用所有空间,或者因为它已被分割/不连续),则除了引发异常外,它别无选择。此堆限制不适用于本机代码,本机代码可能会超出该限制,具体取决于操作系统可以为您的应用程序保留多少。

出于调试目的,您可以在清单中设置largeHeap属性,但可能无法解决任何问题。您可以尝试逐步分配/初始化变量,以使其递增或将大型数据结构移至本机端以解决堆限制。您也可以将应用程序分成多个进程,因为堆限制是每个进程的,尽管通常在游戏中没有用。但是,在这种内存受限的设备(RAM少于2 GB)上,除了删除功能或使用质量较低的资产外,您无能为力。您可能希望将可以安装游戏的设备限制为具有最小RAM的设备,尽管我不认为Google Play具有此类过滤器。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么PDF中的超链接在智能手机上不起作用?

来自分类Dev

为什么PDF中的超链接在智能手机上不起作用?

来自分类Dev

Bootstrap布局在智能手机上过宽

来自分类Dev

OOP设计与智能手机上的性能

来自分类Dev

在智能手机上运行VBA

来自分类Dev

Android Studio:应用程序在我的智能手机上运行后崩溃

来自分类Dev

防止在智能手机上滚动特定屏幕尺寸

来自分类Dev

为什么Firefox / Chrome响应式仿真与智能手机之间有区别?

来自分类Dev

为什么我的智能手机不再呈现 Github 页面?

来自分类Dev

智能手机文本输入“完成”的 JS 事件处理程序是什么

来自分类Dev

为什么智能手机上的Wi-Fi连接比笔记本电脑上的Wi-Fi连接性能更好?

来自分类Dev

我可以在Android智能手机上调试Android Wear应用程序吗?(如何)

来自分类Dev

如何仅在智能手机上编码Bootstrap手风琴

来自分类Dev

android智能手机上的固定宽度html布局

来自分类Dev

Github仅在智能手机上页面CSS麻烦

来自分类Dev

除非已缓存,否则SVG图片不会在智能手机上加载

来自分类Dev

如何在智能手机上相邻显示两个div?

来自分类Dev

React网站按钮和输入在智能手机上不起作用

来自分类Dev

使用Three.js对球体进行纹理处理无法在智能手机上使用

来自分类Dev

我在智能手机上没有任何CSS

来自分类Dev

HTML和CSS布局在智能手机上无法正确显示

来自分类Dev

智能手机上的位置服务-它使用哪个物理网络?

来自分类Dev

在智能手机上安装两个操作系统

来自分类Dev

返回浏览器时,PHP会话在智能手机上丢失

来自分类Dev

智能手机上的媒体查询网站视图

来自分类Dev

android应用未出现在智能手机上

来自分类Dev

使用相机在Android智能手机上进行心率监测

来自分类Dev

避免在智能手机上自动下载pdf

来自分类Dev

引导A标签在平板电脑和智能手机上不起作用

Related 相关文章

  1. 1

    为什么PDF中的超链接在智能手机上不起作用?

  2. 2

    为什么PDF中的超链接在智能手机上不起作用?

  3. 3

    Bootstrap布局在智能手机上过宽

  4. 4

    OOP设计与智能手机上的性能

  5. 5

    在智能手机上运行VBA

  6. 6

    Android Studio:应用程序在我的智能手机上运行后崩溃

  7. 7

    防止在智能手机上滚动特定屏幕尺寸

  8. 8

    为什么Firefox / Chrome响应式仿真与智能手机之间有区别?

  9. 9

    为什么我的智能手机不再呈现 Github 页面?

  10. 10

    智能手机文本输入“完成”的 JS 事件处理程序是什么

  11. 11

    为什么智能手机上的Wi-Fi连接比笔记本电脑上的Wi-Fi连接性能更好?

  12. 12

    我可以在Android智能手机上调试Android Wear应用程序吗?(如何)

  13. 13

    如何仅在智能手机上编码Bootstrap手风琴

  14. 14

    android智能手机上的固定宽度html布局

  15. 15

    Github仅在智能手机上页面CSS麻烦

  16. 16

    除非已缓存,否则SVG图片不会在智能手机上加载

  17. 17

    如何在智能手机上相邻显示两个div?

  18. 18

    React网站按钮和输入在智能手机上不起作用

  19. 19

    使用Three.js对球体进行纹理处理无法在智能手机上使用

  20. 20

    我在智能手机上没有任何CSS

  21. 21

    HTML和CSS布局在智能手机上无法正确显示

  22. 22

    智能手机上的位置服务-它使用哪个物理网络?

  23. 23

    在智能手机上安装两个操作系统

  24. 24

    返回浏览器时,PHP会话在智能手机上丢失

  25. 25

    智能手机上的媒体查询网站视图

  26. 26

    android应用未出现在智能手机上

  27. 27

    使用相机在Android智能手机上进行心率监测

  28. 28

    避免在智能手机上自动下载pdf

  29. 29

    引导A标签在平板电脑和智能手机上不起作用

热门标签

归档