GVKun编程网logo

改造内部 for 循环调用,java.lang.OutOfMemoryError:(java内外循环)

9

在本文中,我们将带你了解改造内部for循环调用,java.lang.OutOfMemoryError:在这篇文章中,我们将为您详细介绍改造内部for循环调用,java.lang.OutOfMemory

在本文中,我们将带你了解改造内部 for 循环调用,java.lang.OutOfMemoryError:在这篇文章中,我们将为您详细介绍改造内部 for 循环调用,java.lang.OutOfMemoryError:的方方面面,并解答java内外循环常见的疑惑,同时我们还将给您一些技巧,以帮助您实现更有效的Android:java.lang.OutOfMemoryError:、Android:java.lang.OutOfMemoryError:线程创建失败、Gradle java.lang.OutOfMemoryError:元空间、java error ------java.lang.OutOfMemoryError:Direct buffer memory 直接内存溢出

本文目录一览:

改造内部 for 循环调用,java.lang.OutOfMemoryError:(java内外循环)

改造内部 for 循环调用,java.lang.OutOfMemoryError:(java内外循环)

如何解决改造内部 for 循环调用,java.lang.OutOfMemoryError:?

我在 for 循环内有一个嵌套的改造服务器请求调用,但出现错误

java.lang.OutOfMemoryError: 分配 2359304 失败
我该如何解决这个问题。有没有其他方法可以循环 Retrofit 服务器调用..

List<ID> idList = new Arraylist<>();
int idCompleted = 0;

idList.size() 大于 30000;

这里是我的功能:

 public void getNewList(){
        for(int i=0;i<idList.size();i++) {
            int iValue = i;
            Call<String> call = RetrofitClient.getInstance().getMyApi().getList(idList.get(i).getId(),"A");
            call.enqueue(new Callback<String>() {
                @Override
                public void onResponse(Call<String> call,Response<String> response) {
                    String responseA = response.body().toString();

                    Call<String> call1 = RetrofitClient.getInstance().getMyApi().getList(idList.get(iValue).getId(),"B");
                    call1.enqueue(new Callback<String>() {
                        @Override
                        public void onResponse(Call<String> call,Response<String> response) {

                            String responseB = response.body().toString();
                            

                            addToFile(responseA,responseB);

                            idCompleted ++;
                            if (idCompleted == idList.size()) {
                                
                                    Log.i("Finished : ","Yes")
                            }else {
                               getNewList();
                            }

                        }

                        @Override
                        public void onFailure(Call<String> call,Throwable t) {
                           idCompleted ++;
                            if (idCompleted == idList.size()) {
                                
                                    Log.i("Finished : ","Yes")
                            }else {
                               getNewList();
                            }
                        }
                    });
                }

                @Override
                public void onFailure(Call<String> call,Throwable t) {
                    idCompleted ++;
                            if (idCompleted == idList.size()) {
                                
                                    Log.i("Finished : ","Yes")
                            }else {
                               getNewList();
                            }

                }
            });

        }

解决方法

如果数据要显示在 RecyclerView 上,你应该在 RecyclerView Adapter 中调用网络请求,这样它一次只能做几个。

如果没有,你应该修改你的循环,让它一次只能调用几个,而不是像现在那样同时调用所有。

没有设备有足够的 RAM 同时处理 30000 个网络请求。只需同时做 2-3 个。

Android:java.lang.OutOfMemoryError:

Android:java.lang.OutOfMemoryError:

我开发了一个在 Android上使用大量图像的应用程序.

在drawable文件夹中有大量的图像说超过100,我正在开发图像的动画应用程序.我使用imageview来显示gif图像.我已经将Split gif图像的概念用于多个PNG格式的图像,然后使用它.

每当用户进入应用程序时,我可以看到内存越来越多,直到用户获取java.lang.OutOfMemoryError为止.

那么处理许多图像的最佳/正确的方法是什么?

以下是我的代码:

dog_animation.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/DogView"
android:orientation="vertical" >

<ImageView
    android:id="@+id/dog_animation"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_weight="0.19" />

dog_animation.xml(可绘制文件夹)

<?xml version="1.0" encoding="utf-8"?>
<item
    android:drawable="@drawable/image"
    android:duration="50"/>
<item
    android:drawable="@drawable/image1"
    android:duration="50"/>
<item
    android:drawable="@drawable/image2"
    android:duration="50"/>
<item
    android:drawable="@drawable/image3"
    android:duration="50"/>
<item
    android:drawable="@drawable/image4"
    android:duration="50"/>
<item
    android:drawable="@drawable/image5"
    android:duration="50"/>
<item
    android:drawable="@drawable/image6"
    android:duration="50"/>
<item
    android:drawable="@drawable/image7"
    android:duration="50"/>
<item
    android:drawable="@drawable/image8"
    android:duration="50"/>
<item
    android:drawable="@drawable/image9"
    android:duration="50"/>
<item
    android:drawable="@drawable/image10"
    android:duration="50"/>
<item
    android:drawable="@drawable/image11"
    android:duration="50"/>
<item
    android:drawable="@drawable/image12"
    android:duration="50"/>
<item
    android:drawable="@drawable/image13"
    android:duration="50"/>
<item
    android:drawable="@drawable/image14"
    android:duration="50"/>
<item
    android:drawable="@drawable/image15"
    android:duration="50"/>
<item
    android:drawable="@drawable/image16"
    android:duration="50"/>
<item
    android:drawable="@drawable/image17"
    android:duration="50"/>
<item
    android:drawable="@drawable/image18"
    android:duration="50"/>
<item
    android:drawable="@drawable/image19"
    android:duration="50"/>
<item
    android:drawable="@drawable/image20"
    android:duration="50"/>
<item
    android:drawable="@drawable/image21"
    android:duration="50"/>
<item
    android:drawable="@drawable/image22"
    android:duration="50"/>
<item
    android:drawable="@drawable/image23"
    android:duration="50"/>
<item
    android:drawable="@drawable/image24"
    android:duration="50"/>
<item
    android:drawable="@drawable/image25"
    android:duration="50"/>
<item
    android:drawable="@drawable/image26"
    android:duration="50"/>
<item
    android:drawable="@drawable/image27"
    android:duration="50"/>
<item
    android:drawable="@drawable/image28"
    android:duration="50"/>
<item
    android:drawable="@drawable/image29"
    android:duration="50"/>
<item
    android:drawable="@drawable/image30"
    android:duration="50"/>
<item
    android:drawable="@drawable/image31"
    android:duration="50"/>
<item
    android:drawable="@drawable/image32"
    android:duration="50"/>
<item
    android:drawable="@drawable/image33"
    android:duration="50"/>
<item
    android:drawable="@drawable/image34"
    android:duration="50"/>
<item
    android:drawable="@drawable/image35"
    android:duration="50"/>
<item
    android:drawable="@drawable/image36"
    android:duration="50"/>
<item
    android:drawable="@drawable/image37"
    android:duration="50"/>
<item
    android:drawable="@drawable/image38"
    android:duration="50"/>
<item
    android:drawable="@drawable/image39"
    android:duration="50"/>
<item
    android:drawable="@drawable/image40"
    android:duration="50"/>
<item
    android:drawable="@drawable/image41"
    android:duration="50"/>
<item
    android:drawable="@drawable/image42"
    android:duration="50"/>
<item
    android:drawable="@drawable/image43"
    android:duration="50"/>
<item
    android:drawable="@drawable/image44"
    android:duration="50"/>
<item
    android:drawable="@drawable/image45"
    android:duration="50"/>
<item
    android:drawable="@drawable/image46"
    android:duration="50"/>
<item
    android:drawable="@drawable/image47"
    android:duration="50"/>
<item
    android:drawable="@drawable/image48"
    android:duration="50"/>
<item
    android:drawable="@drawable/image49"
    android:duration="50"/>
<item
    android:drawable="@drawable/image50"
    android:duration="50"/>
<item
    android:drawable="@drawable/image51"
    android:duration="50"/>
<item
    android:drawable="@drawable/image52"
    android:duration="50"/>
<item
    android:drawable="@drawable/image53"
    android:duration="50"/>
<item
    android:drawable="@drawable/image54"
    android:duration="50"/>
<item
    android:drawable="@drawable/image55"
    android:duration="50"/>
<item
    android:drawable="@drawable/image56"
    android:duration="50"/>

Dog_Animation.java

public class Dog_Animation extends Activity {

Timer timer = new Timer();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestwindowFeature(Window.FEATURE_NO_TITLE);
    getwindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
    setContentView(R.layout.dog_animation);

    ImageView img = (ImageView) findViewById(R.id.dog_animation);
    img.setBackgroundResource(R.drawable.dog_animation);
    AnimationDrawable frameAnimation = (AnimationDrawable) img
            .getBackground();
    frameAnimation.start();

    timer.schedule(new TimerTask() {
        public void run() {
            Intent intent = new Intent(Dog_Animation.this,Man_Animation.class);
            startActivity(intent);
        }
    },10000);
}
}

现在的问题是当我尝试从一个活动移动到另一个具有相同的其他图像的动画,它给我的错误java.lang.OutOfMemory.

我尝试过如此多的不同解决方案

@Override
protected void onDestroy() {
    super.onDestroy();

    unbindDrawables(findViewById(R.id.DogView));
    System.gc();
}

private void unbindDrawables(View view) {
    if (view.getBackground() != null) {
        view.getBackground().setCallback(null);
    }
    if (view instanceof ViewGroup) {
        for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) {
            unbindDrawables(((ViewGroup) view).getChildAt(i));
        }
        ((ViewGroup) view).removeAllViews();
    }
}

所以别的,但任何解决方案都不适合我.请帮我解决这个问题.即使我已经提到http://androidactivity.wordpress.com/2011/09/24/solution-for-outofmemoryerror-bitmap-size-exceeds-vm-budget/这个链接,但没有解决问题.

解决方法

在您的AndroidManifest.xml中,保留内部的应用程序标签,添加largeHeap,如下所示:
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:largeHeap="true"/>

Android:java.lang.OutOfMemoryError:线程创建失败

Android:java.lang.OutOfMemoryError:线程创建失败

我最近在 Android市场上传了我的应用程序,我收到以下错误,我无法追溯它:

java.lang.OutOfMemoryError: thread creation Failed
at java.lang.VMThread.create(Native Method)
at java.lang.Thread.start(Thread.java:1327)
at java.util.concurrent.ThreadPoolExecutor.addWorker(ThreadPoolExecutor.java:901)
at java.util.concurrent.ThreadPoolExecutor.processWorkerExit(ThreadPoolExecutor.java:950)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1086)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561)
at java.lang.Thread.run(Thread.java:1096)

我知道它是内存不足错误但stacktrace没有提供任何信息,它在我的代码中启动.所以我正在努力追踪它,因为我有一个相对较大的应用程序(20个活动),有很多AsyncTasks和线程.不知道从哪里开始.任何帮助都是有益的

解决方法

您需要重新设计您的应用.在任何情况下,您都不应该有20项活动.添加大量AsyncTasks和Threads只会使问题恶化.考虑将一些活动或AsyncTasks压缩在一起,以便使用更少的内存.不幸的是,没有神奇的方法来解决这个问题.您可以在DDMS中使用线程分析,以查看哪些线程使用的内存最多;这应该可以帮助您找到从哪里开始.为此,请插入设备/启动模拟器.在Eclipse中,转到DDMS并在左侧面板中选择应用程序的包名称.单击“更新线程”按钮,您的应用程序正在使用的所有线程将显示在右侧面板上.您可以单击一个并点击刷新以获取更多信息.要查看内存的来源,请单击应用程序包并点击“更新堆”(看起来像一个小小的绿色垃圾桶.)转到右侧面板上的堆,然后点击Cause GC.这将显示您的应用程序在内存中的所有内容.这应该至少可以帮助你开始.

Gradle java.lang.OutOfMemoryError:元空间

Gradle java.lang.OutOfMemoryError:元空间

目前我正在使用Gradle 5.2.1配置的Spring boot 2.1项目。但是我在构建项目时遇到内存错误,无法理解确切原因。

请找到附件日志

Caused by: org.gradle.cache.CacheOpenException: Could not open proj generic class cache for build file '/Users/mac/project/build.gradle' (/Users/mac/.gradle/caches/5.2.1/scripts/eajdx6l75dt1ypyljdsfupplm/proj/proj3ca90766b0adfce53d4b035e7e9dc5fe).
        at org.gradle.cache.internal.DefaultPersistentDirectoryStore.open(DefaultPersistentDirectoryStore.java:80)
        at org.gradle.cache.internal.DefaultPersistentDirectoryStore.open(DefaultPersistentDirectoryStore.java:42)
        at org.gradle.cache.internal.DefaultCacheFactory.doOpen(DefaultCacheFactory.java:94)
        at org.gradle.cache.internal.DefaultCacheFactory.open(DefaultCacheFactory.java:68)
        at org.gradle.cache.internal.DefaultCacheRepository$PersistentCacheBuilder.open(DefaultCacheRepository.java:118)
        at org.gradle.groovy.scripts.internal.FileCacheBackedScriptClassCompiler$RemapBuildScriptsAction.execute(FileCacheBackedScriptClassCompiler.java:421)
        at org.gradle.groovy.scripts.internal.FileCacheBackedScriptClassCompiler$RemapBuildScriptsAction.execute(FileCacheBackedScriptClassCompiler.java:390)
        at org.gradle.groovy.scripts.internal.FileCacheBackedScriptClassCompiler$ProgressReportingInitializer.execute(FileCacheBackedScriptClassCompiler.java:175)
        at org.gradle.groovy.scripts.internal.FileCacheBackedScriptClassCompiler$ProgressReportingInitializer.execute(FileCacheBackedScriptClassCompiler.java:155)
        at org.gradle.cache.internal.DefaultPersistentDirectoryCache$Initializer.initialize(DefaultPersistentDirectoryCache.java:98)
        at org.gradle.cache.internal.FixedSharedModeCrossProcessCacheAccess$1.run(FixedSharedModeCrossProcessCacheAccess.java:85)
        at org.gradle.cache.internal.DefaultFileLockManager$DefaultFileLock.doWriteAction(DefaultFileLockManager.java:207)
        at org.gradle.cache.internal.DefaultFileLockManager$DefaultFileLock.writeFile(DefaultFileLockManager.java:197)
        at org.gradle.cache.internal.FixedSharedModeCrossProcessCacheAccess.open(FixedSharedModeCrossProcessCacheAccess.java:83)
        at org.gradle.cache.internal.DefaultCacheAccess.open(DefaultCacheAccess.java:142)
        at org.gradle.cache.internal.DefaultPersistentDirectoryStore.open(DefaultPersistentDirectoryStore.java:78)
        ... 133 more
Caused by: java.lang.OutOfMemoryError: Metaspace

java error ------java.lang.OutOfMemoryError:Direct buffer memory 直接内存溢出

java error ------java.lang.OutOfMemoryError:Direct buffer memory 直接内存溢出

java error ------java.lang.OutOfMemoryError:Direct buffer memory 直接内存溢出
操作系统内存已经使用完了,不针对jvm堆内存,所有操作系统内存使用完了,由于不是GC的管辖范围,所有不会进行垃圾回收;
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210630094129840.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3lqXzU4NTg1ODU4,size_16,color_FFFFFF,t_70

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

我们今天的关于改造内部 for 循环调用,java.lang.OutOfMemoryError:java内外循环的分享已经告一段落,感谢您的关注,如果您想了解更多关于Android:java.lang.OutOfMemoryError:、Android:java.lang.OutOfMemoryError:线程创建失败、Gradle java.lang.OutOfMemoryError:元空间、java error ------java.lang.OutOfMemoryError:Direct buffer memory 直接内存溢出的相关信息,请在本站查询。

本文标签: