Как исправить ошибку OutOfMemory/Зависание моего Android-приложения?

Когда перехожу на эту активность, приложение зависает намертво, и после отвисания, иногда выдаёт OutOfMemory. Я не думаю, чтобы этот код мог занимать много памяти. Что мне делать?

package mate.files;

import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.ViewGroup;
import android.widget.RelativeLayout;
import android.widget.Toast;

import androidx.appcompat.widget.Toolbar;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.annotations.Expose;


import java.io.IOException;;
import java.util.List;

public class MainPageBasicLayout extends AppCompatActivity {

    int Layout1BottomLvl1Num = 0;
    String[] Layout1BottomLvl1Features = new String[9];
    String[] Layout1BottomLvl1Items = new String[9];

    //JSON Fields
    @Expose
    String Layout1Bottom = null;
    @Expose
    List<String> Layout1BottomContent;
    @Expose
    List<String> Layout1BottomAppearance;
    @Expose
    String ExitBehavior = " ";

    int Layout1BottomNum = 0;

    MainPageBasicLayout obj = new MainPageBasicLayout();


    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main_page);

        //Get JSON file content

        String JSON = null;
        try {
            JSON = new CfgMgr().GetJsonFileContent(this);
        } catch (IOException e) {
            e.printStackTrace();
        }

        GsonBuilder builder = new GsonBuilder();
        Gson gson = builder.excludeFieldsWithoutExposeAnnotation().create();
        MainPageBasicLayout obj = gson.fromJson(JSON, MainPageBasicLayout.class);

        //Prepare GSON objects to GC
        gson = null;
        builder = null;
        JSON = null;
        obj = null;
        System.gc();

        assert obj != null;
        Toast.makeText(this, obj.ExitBehavior, Toast.LENGTH_LONG).show();

        //Initialize
        RelativeLayout Layout = findViewById(R.id.RelativeLayout);
        Toolbar Layout1BottomUI = findViewById(R.id.Layout1Bottom);

        //Set the Layout Parameters (Height & Width)

        Toolbar.LayoutParams params = new Toolbar.LayoutParams(Integer.parseInt(obj.Layout1BottomAppearance.get(0)), ViewGroup.LayoutParams.MATCH_PARENT);
        Layout1BottomUI.setLayoutParams(params);

        //These settings will be applied when this Layout in Normal Bar Mode
        if ("NormBarPinned".equals(obj.Layout1Bottom) || "NormBarUnpinned".equals(obj.Layout1Bottom)) {

            //Get number of items & each item data (level 1)
            Layout1BottomNum = obj.Layout1BottomContent.size();

            int Counter2 = 0;
            for (int Counter = 0; Counter != Layout1BottomNum; Counter++) {
                if (!obj.Layout1BottomContent.get(Counter).contains("*")) {
                    Layout1BottomLvl1Num++;
                    Layout1BottomLvl1Items[Counter] = obj.Layout1BottomContent.get(Counter2);
                    Counter2++;
                }
            }
            //Extract Item's Feature (level 1)
            for (int CounterFeature = 0; CounterFeature != Layout1BottomLvl1Num; CounterFeature++) {
                int FeatureEndIndex = Layout1BottomLvl1Items[CounterFeature].indexOf('\'') - 1;
                Layout1BottomLvl1Features[CounterFeature] = Layout1BottomLvl1Items[CounterFeature].substring(0, FeatureEndIndex);
            }


        }

    }

    //Exit by pressing BACK
    public void onDestroy() {

        super.onDestroy();

        if (obj.ExitBehavior.equals("NoReq")) {
            System.exit(0);
        } else {
            Intent i = new Intent(this, MainPageBasicLayout.class);
            startActivity(i);

            AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this);
            dialogBuilder.setTitle(R.string.Confirmation);
            dialogBuilder.setMessage(R.string.ReallyExit);
            dialogBuilder.setCancelable(true);
            // Exit Button
            dialogBuilder.setPositiveButton(R.string.Exit, (dialog, which) -> {
                dialog.dismiss();
                System.exit(0);
            });




        }




    }


}

Ошибка:

java.lang.OutOfMemoryError: Failed to allocate a 112 byte allocation with 0 free bytes and 0B until OOM, max allowed footprint 536870912, growth limit 536870912
        at java.util.Arrays.copyOf(Arrays.java:3260)
        at java.lang.AbstractStringBuilder.ensureCapacityInternal(AbstractStringBuilder.java:125)
        at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:451)
        at java.lang.StringBuilder.append(StringBuilder.java:137)
        at java.lang.Daemons$FinalizerWatchdogDaemon.finalizerTimedOut(Daemons.java:398)
        at java.lang.Daemons$FinalizerWatchdogDaemon.runInternal(Daemons.java:283)
        at java.lang.Daemons$Daemon.run(Daemons.java:103)
        at java.lang.Thread.run(Thread.java:784)

Ответы (0 шт):