程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了无法在4GB iMac OSX 10.6.3 Snow Leopard(32位)上使用Java的2542线程大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决无法在4GB iMac OSX 10.6.3 snow Leopard(32位)上使用Java的2542线程?

开发过程中遇到无法在4GB iMac OSX 10.6.3 snow Leopard(32位)上使用Java的2542线程的问题如何解决?下面主要结合日常开发的经验,给出你关于无法在4GB iMac OSX 10.6.3 snow Leopard(32位)上使用Java的2542线程的解决方法建议,希望对你解决无法在4GB iMac OSX 10.6.3 snow Leopard(32位)上使用Java的2542线程有所启发或帮助;

2542似乎是一个任意数字:

@H_301_2@我关闭了所有程序,除了运行测试的一个终端窗口,然后进入2545为止,这告诉我这是一个任意限制。

@H_301_2@要获取OSX 10.6.3的线程数,请执行以下操作:

> sysctl kern.num_threads
kern.num_threads: 2560
@H_301_2@和

> sysctl kern.num_taskthreads
kern.num_taskthreads: 2560
@H_301_2@该2560数字与2542和匹配,2545因为显然在后台运行其他线程。根据官方文档kern.num_taskthreads,无法在桌面版OSX中进行调整。

解决方法

我正在运行以下程序,试图弄清楚如何配置JVM以获取机器可以支持的最大线程数。对于那些可能不知道的人,snow Leopard附带了Java 6。

我尝试使用默认值和以下命令行启动它,无论将JVM选项设置为什么,总是会在线程2542遇到内存不足错误。

java TestThreadStackSizes 100000
java -Xss1024 TestThreadStackSizes 100000
java -Xmx128m -Xss1024 TestThreadStackSizes 100000
java -Xmx2048m -Xss1024 TestThreadStackSizes 100000
java -Xmx2048m -Xms2048m -Xss1024 TestThreadStackSizes 100000

不管我通过什么,都得到相同的结果,出现内存不足错误(2542)

public class TestThreadStackSizes
{
    public static void main(final String[] args)
    {
        Thread.currentThread().setUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
            public void uncaughtException(final Thread t,final Throwable E)
            {
                System.err.println(e.get@R_801_8798@ge());
                System.exit(1);
            }
        });
        int numThreads = 1000;
        if (args.length == 1)
        {
            numThreads = Integer.parseInt(args[0]);
        }

        for (int i = 0; i < numThreads; i++)
        {
            try
            {
                Thread t = new Thread(new SleeperThread(i));
                t.start();
            }
            catch (final OutOfMemoryError E)
            {
                throw new RuntimeException(String.format("Out of Memory Error on Thread %d",i),E);
            }
        }
    }

    private static class SleeperThread implements Runnable
    {
        private final int i;

        private SleeperThread(final int i)
        {
            this.i = i;
        }

        public void run()
        {
            try
            {
                System.out.format("Thread %d about to sleep\n",this.i);
                Thread.sleep(1000 * 60 * 60);
            }
            catch (final InterruptedException E)
            {
                throw new RuntimeException(E);
            }
        }
    }
}

关于如何影响这些结果的任何想法?

我写这个程序是为了弄清楚Windows Server 2003的功能,因为我得到的out of memory can't create native threads数量很少,例如几百个。我需要查看特定盒子具有不同-Xss参数的功能,然后在OSX上遇到这个任意限制。

大佬总结

以上是大佬教程为你收集整理的无法在4GB iMac OSX 10.6.3 Snow Leopard(32位)上使用Java的2542线程全部内容,希望文章能够帮你解决无法在4GB iMac OSX 10.6.3 Snow Leopard(32位)上使用Java的2542线程所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: