代码运行出现了堆栈溢出错误及解决方法

本文讨论了由于对象循环依赖导致的Java堆栈溢出错误,具体表现为`java.lang.StackOverflowError`。错误源于在IndexView、JobView和JobService之间形成的无限循环引用。为解决此问题,文章提出了使用对象池模式,预先创建并存储对象,避免运行时创建新对象导致的内存消耗。通过在`ObjectPool`类中静态初始化各种视图和服务对象,确保在需要时直接调用,从而防止堆栈溢出错误的发生。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 出现了堆栈溢出错误

“Exception in thread "main" java.lang.StackOverflowError”

出现原因:

在创建对象时出现循环依赖,在IndexView中创建对象:

JobView jv =  new JobView;
IndexView iv = new IndexView;

在JobView中创建对象:

private JobService js = new JobService;

在JobService中创建对象:

IndexView iv= new IndexView;

形成了一个完整的闭环,不停地循环,超出了堆栈空间,造成了溢出。

解决方法:

创建了一个对象池模式(Object Pool Pattern),是创建型设计模式的一种,将对象预先创建并初始化后放入对象池中,对象提供者就能利用已有的对象来处理请求,减少频繁创建对象所占用的内存空间和初始化时间。

package Project.campusparttimejob3;

import Project.campusparttimejob3.service.JobService;
import Project.campusparttimejob3.service.UserService;
import Project.campusparttimejob3.view.IndexView;
import Project.campusparttimejob3.view.JobView;
import Project.campusparttimejob3.view.LoginView;
import Project.campusparttimejob3.view.NameView;
import Project.team.service.LoginService;

public class ObjectPool {
    /**** 视图对象 **/
    public static IndexView INDEX_VIEW = new IndexView();
    public static JobView JOB_VIEW = new JobView();
    public static LoginView LOGIN_VIEW = new LoginView();
    public static NameView NAME_VIEW = new NameView();

    /** 服务对象 */
    public static JobService JOB_SERVICE = new JobService();
    public static LoginService LOGIN_SERVICE = new LoginService();
    public static UserService USER_SERVICE = new UserService();

}

 使用时直接从对象池中调用即可,这样就不会出现堆栈溢出的错误啦!



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值