线程“线程-8”中出现异常,java.lang.ClassLoader.defineClass1(本地方法)处出现堆栈溢出错误[已关闭]

6jjcrrmo  于 2023-01-11  发布在  Java
关注(0)|答案(1)|浏览(98)

编辑问题以包含desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem。这将有助于其他人回答问题。
3天前关闭。
Improve this question

`Exception in thread "Thread-8" java.lang.StackOverflowError
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:756)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
'''
'''
'''
'''
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:362)
at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:355)
at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
at io.netty.channel.nio.NioEventLoop.newTaskQueue0(NioEventLoop.java:279)
at io.netty.channel.nio.NioEventLoop.newTaskQueue(NioEventLoop.java:150)
at io.netty.channel.nio.NioEventLoop.\<init\>(NioEventLoop.java:138)
at io.netty.channel.nio.NioEventLoopGroup.newChild(NioEventLoopGroup.java:146)
at io.netty.channel.nio.NioEventLoopGroup.newChild(NioEventLoopGroup.java:37)
at io.netty.util.concurrent.MultithreadEventExecutorGroup.\<init\>(MultithreadEventExecutorGroup.java:84)
at io.netty.util.concurrent.MultithreadEventExecutorGroup.\<init\>(MultithreadEventExecutorGroup.java:58)
at io.netty.channel.MultithreadEventLoopGroup.\<init\>(MultithreadEventLoopGroup.java:52)
at io.netty.channel.nio.NioEventLoopGroup.\<init\>(NioEventLoopGroup.java:96)
at io.netty.channel.nio.NioEventLoopGroup.\<init\>(NioEventLoopGroup.java:91)
at io.netty.channel.nio.NioEventLoopGroup.\<init\>(NioEventLoopGroup.java:72)
at io.netty.channel.nio.NioEventLoopGroup.\<init\>(NioEventLoopGroup.java:52)
at handling.mina.ServerConnection.\<init\>(ServerConnection.java:36)`

执行以下代码时会报告错误

this.bossGroup = (EventLoopGroup)new NioEventLoopGroup(1);

问题存在于部署时,在IDEA中运行时不存在Java版本为"1. 8. 0_351",在其他版本中似乎不存在问题谁知道是什么问题?

kulphzqa

kulphzqa1#

在jvm选项中将堆栈大小从-Xss=256k调整为-Xss=512K,您可能需要增加堆栈空间。
java.lang.StackOverflowError是一个运行时错误,该错误指示应用程序堆栈在有限次递归调用后未终止。由于从未满足基本条件,因此递归将无限继续。
通常发生在应用程序堆栈持续增长直到达到最大限制时。

  • 深度递归或无限递归-如果一个方法递归调用自己而没有终止条件。
  • 类之间的循环关系-如果类A示例化类B的对象,后者又示例化类A的对象。
  • 内存密集型应用程序-依赖资源密集型对象(如XML文档、GUI或java 2D类)的应用程序。

例如

public class StackOverflowErrorExample {
    public void print(int myInt) {
        System.out.println(myInt);
        print(myInt);
    }

    public static void main(String[] args) {
        StackOverflowErrorExample example = new StackOverflowErrorExample();
        example.print(0);
    }
}

方法print()导致无限递归,您可以在堆栈跟踪中将其检查为(...java:3, ...java:4)。当您确定导致错误的位置时,需要设置适当的条件以避免错误。

...
at StackOverflowErrorExample.print(StackOverflowErrorExample.java:3)
at StackOverflowErrorExample.print(StackOverflowErrorExample.java:4)
at StackOverflowErrorExample.print(StackOverflowErrorExample.java:4)
at StackOverflowErrorExample.print(StackOverflowErrorExample.java:4)
at StackOverflowErrorExample.print(StackOverflowErrorExample.java:4)

另外,类路径上可以有多个版本的netty。请确保只有一个版本。
那么你的应用应该看起来像这样:

@Inject private lateinit var configuration: RSEEnvironment
@Inject private lateinit var channelHandler: LoginChannelHandler
private val bossGroup = NioEventLoopGroup(1)
private val workerGroup = NioEventLoopGroup(Runtime.getRuntime().availableProcessors())

private lateinit var future: ChannelFuture
override fun startUp()
{
    val hostAddress = configuration.getString("default_host")
    val hostPort = configuration.getInt("default_port")
    bootstrap = ServerBootstrap()
    bootstrap
        .group(bossGroup, workerGroup)
        .channel(NioServerSocketChannel::class.java)
        .childHandler(channelHandler)
        .option(ChannelOption.SO_KEEPALIVE, true)
        .option(ChannelOption.TCP_NODELAY, true)
    future = bootstrap.bind(hostAddress, hostPort).syncUninterruptibly()
    future.channel().closeFuture().sync()
}

相关问题