为什么程序在特定的智能手机上抛出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

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

来自分类Dev

Bootstrap布局在智能手机上过宽

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

在智能手机上运行VBA

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

Related 相关文章

  1. 1

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

  2. 2

    Bootstrap布局在智能手机上过宽

  3. 3

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

  4. 4

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

  5. 5

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

  6. 6

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

  7. 7

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

  8. 8

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

  9. 9

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

  10. 10

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

  11. 11

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

  12. 12

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

  13. 13

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

  14. 14

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

  15. 15

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

  16. 16

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

  17. 17

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

  18. 18

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

  19. 19

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

  20. 20

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

  21. 21

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

  22. 22

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

  23. 23

    在智能手机上运行VBA

  24. 24

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

  25. 25

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

  26. 26

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

  27. 27

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

  28. 28

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

  29. 29

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

热门标签

归档