相关疑难解决方法(0)

在哪里可以找到Sun/Oracle JVM的默认XSS值?

有没有default XSS sizes人为各种版本的Sun/Oracle JVM以及不同的操作系统找到了单个JVM文档列表?

我已经能够在jrockit jdk 5.0 docs中找到这个表,但这对那些使用"普通"Sun/Oracle JVM的人没有帮助.

我确实感谢XSS每个操作系统(和JVM版本)的值会有所不同,所以可能没有一个文档列出了所有最近的组合.但是,如果这里的任何读者都知道任何单个文档至少列出每个 JVM版本(或至少1.6和1.5)的默认XSS值,或者即使仅针对某些操作系统,那将是一个很好的开始.

我要补充一点,这是有价值的原因是我们经常看到人们推荐(错误的,我认为)有人可以通过改变XSS价值来解决问题.但是如果你不知道自己的默认值,那么就无法知道你是否通过某人推荐的改变来提高或降低价值.他们通常不会指出他们所使用的版本/操作系统,因此他们的建议是否会"帮助"你是一个废话.

甚至比某些文档更好,如果有人知道查询JVM以获取当前值的方法,无论是从命令行还是通过API调用,这将更有价值.谢谢.

java size stack jvm

56
推荐指数
4
解决办法
6万
查看次数

如何预测递归方法的最大调用深度?

为了估计最大调用深度,递归方法可以用给定量的存储器实现,在堆栈溢出错误可能发生之前计算所用存储器的(近似)公式是什么?

编辑:

许多人回答"它依赖",这是合理的,所以让我们通过使用一个微不足道但具体的例子来删除一些变量:

public static int sumOneToN(int n) {
    return n < 2 ? 1 : n + sumOneToN(n - 1);
}
Run Code Online (Sandbox Code Playgroud)

很容易证明,在我的Eclipse IDE中运行它会爆炸n不到1000(对我来说非常低).这个调用深度限制是否可以在不执行的情况下估算?

编辑:我不禁认为Eclipse有一个固定的最大调用深度1000,因为我得到了998,但是有一个用于main,一个用于初始调用方法,1000总而言之.这是一个"太圆"的数字恕我直言,是一个巧合.我会进一步调查.我只是Dux开销-Xss vm参数; 它是最大的堆栈大小,所以Eclipse运行器必须-Xss1000设置在某处

java memory stack-overflow recursion jvm

49
推荐指数
2
解决办法
7515
查看次数

-Xss JVM选项实际上做了什么

从文档中,-Xss用于设置JVM的堆栈大小.但我对此声明感到非常困惑.

在Java中,每个线程都有自己的堆栈.是否由-Xss指定了数字:

  1. 所有线程可以用作堆栈的总内存?例如,如果-Xss设置为256K,则所有线程将在此256K内存中创建自己的堆栈.

  2. 每个线程堆栈的大小.例如,如果-Xss设置为256K,则每个线程将具有256K大的堆栈.因此10个线程将共使用2560K.

非常感谢你.

编辑:

谢谢你的回答.它看起来像是上面的(2)senario.-Xss指定特定线程的最大堆栈大小.

然后我有一个跟进问题:这些内存将分配在哪里?

我们可以使用-Xmx和-Xms指定保留的堆内存.是否使用这些保留的内存分配堆栈?或者直接从本机内存分配?

java jvm

9
推荐指数
1
解决办法
9693
查看次数

StackOverflowError何时发生?

据Oracle称,StackOverflowError是:

在发生堆栈溢出时抛出,因为应用程序过于严重.

我知道递归是什么,通常递归函数,如果没有正确终止,会导致StackOverflowError.为了检查StackOverflowError抛出之前发生的递归调用的数量,我写了这段代码:

package ErrorCases;

public class StackOverFlowError {
static int i=0;
void a()
{

    //System.out.println("called "+(++i));
    try{
        ++i;
    a();
    }catch(Error e)
    {
        System.out.println(e.getClass());
        System.out.println(i);
    }
}

public static void main(String[] args) {

       new StackOverFlowError().a();

   }

}
Run Code Online (Sandbox Code Playgroud)

在JVM抛出StackOverflowError之前,i给出递归调用计数的值a().每次运行
的价值i都不同,如:

output 1: class java.lang.StackOverflowError
           10466
Output 2: class java.lang.StackOverflowError
           10470
Run Code Online (Sandbox Code Playgroud)

我的疑问是?

  1. 在JVM抛出之前递归有多深 StackOverflowError

  2. 一旦StackOverflowError投掷,我们可以恢复吗?

java stack-overflow recursion stack

8
推荐指数
1
解决办法
3573
查看次数

xml转换的堆栈溢出异常

我在sun solaris 中托管的weblogic server 10g 中的 xml 转换中收到以下 java stackoverflow 错误。这仅发生在特定的 xml 转换中,其余所有 xml 转换都可以正常工作。使用的 xsl 文件也不是很大。

我正在使用 rt.jar 中提供的 Transformation api,但是从com.sun.org.apache.xalan.internal.xsltc.dom.SimpleResultTreeImpl我没有打包到我的应用程序中的xalan apache package( )得到这个错误。

另一个有趣的事情是,当我在 Windows 机器上托管的 weblogic 10g 服务器中运行应用程序时,我没有得到这个异常,我只在 sun solaris 中得到这个。

任何人都可以让我知道为什么我会收到此错误。

你能告诉我是哪个 jar 文件导致了异常吗?weblogic 会有 xalan.jar 吗?如果是这样,我可以尝试升级 jar 文件,看看它是否有效?

Caused by: java.lang.StackOverflowError
    at com.sun.org.apache.xalan.internal.xsltc.dom.SimpleResultTreeImpl.characters(SimpleResultTreeImpl.java)
    at com.sun.org.apache.xalan.internal.xsltc.dom.SimpleResultTreeImpl.copy(SimpleResultTreeImpl.java:438)
    at com.sun.org.apache.xalan.internal.xsltc.runtime.BasisLibrary.copy(BasisLibrary.java:1317)
    at GregorSamsa.replace()
    at GregorSamsa.replace()
    at GregorSamsa.replace()
    at GregorSamsa.replace()
    at GregorSamsa.replace()
    at GregorSamsa.replace()
    at GregorSamsa.replace()
    at GregorSamsa.replace()
    at GregorSamsa.replace()
    at GregorSamsa.replace()
    at GregorSamsa.replace() …
Run Code Online (Sandbox Code Playgroud)

java xml stack-overflow xslt

5
推荐指数
1
解决办法
2631
查看次数

如何解决'初始化VM'java期间出错?

我已经使用ssh连接到基于linux的服务器.最近,我使用以下命令安装了JDK:

sudo yum install java-1.6.0-openjdk-devel

并且jdk安装成功,但每当我运行命令javajavac我得到以下错误:

Error occurred during initialization of VM
Could not reserve enough space for object heap
Could not create the Java virtual machine.
Run Code Online (Sandbox Code Playgroud)

甚至,运行命令java -version,都会带来错误.当我尝试给java使用更多空间时java -Xmx512m -Xms256m -version,我会得到以下错误:

*** glibc detected *** java: double free or corruption (!prev): 0x00007fc84400e270 ***
*** glibc detected *** java: double free or corruption (fasttop): 0x00007fc8440089f0 ***
#
Aborted (core dumped)
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题?

提前致谢

java jvm

5
推荐指数
1
解决办法
2万
查看次数

什么是给jvm的线程堆栈大小选项(-Xss)?为什么Windows PC中至少有68k的限制?

我见过JVM选项-Xss - 它究竟做了什么?这个链接,但我的问题是这个选项是如何有用的.

因为,如果我们为-Xss值设置了一个非常小的限制,那么线程可能无法正常工作,因为它可能会在大多数情况下抛出stackOverflow错误.

为什么这个值至少有64k的限制?
我是如何得到这个64k限制的,当我试图在IntelliJ iDE上配置运行时vm选项时,我试图给出一些像10k这样的东西,它弹出这个错误,说它需要至少64k的线程堆栈大小.

另一个问题是,如何从java程序中找到我的嵌入式设备中运行的jvm的默认线程堆栈大小?

谢谢,

java stack jvm jvm-arguments

3
推荐指数
1
解决办法
4193
查看次数

stackoverflow异常的原因是什么?

import java.math.BigInteger;
import java.util.HashMap;

/**
 *
 * @author cypronmaya
 */
public class test {
    static HashMap<Integer, BigInteger> cache = new HashMap<Integer, BigInteger>();
    public static void main(String[] args) {
     System.out.println(factorial(20000));
  }

    public static BigInteger factorial(int n) {
        BigInteger ret;
        if (n == 0) {
            return BigInteger.ONE;
        }
        if (null != (ret = cache.get(n))) {
            return ret;
        }
        ret = BigInteger.valueOf(n).multiply(factorial(n - 1));
        cache.put(n, ret);
        return ret;
    }
}
Run Code Online (Sandbox Code Playgroud)

java.util.HashMap.get中的线程"main"java.lang.StackOverflowError中的异常(未知来源)

嗨,为什么我得到这个程序的stackoverflow异常?

我知道stackoverflow通常意味着你有一个无限循环,但是当我使用10000或其他一些较小的数字时,这种方法可以正常工作,而大数字突然变得无限大?

java stack-overflow map

2
推荐指数
1
解决办法
5294
查看次数

使用specs2指定测试顺序(scala/play框架)

我目前正在使用Specs2库为Scala Play应用程序编写一组测试.

我在编译过程中遇到了一些堆栈溢出错误,因为测试字符串太长,所以我将它拆分成几个类.

问题是测试是使用多线程进程同时运行的.我需要指定那些测试的顺序.有没有办法做到这一点?问候.

scala specs2

1
推荐指数
1
解决办法
2176
查看次数

标签 统计

java ×8

jvm ×5

stack-overflow ×4

stack ×3

recursion ×2

jvm-arguments ×1

map ×1

memory ×1

scala ×1

size ×1

specs2 ×1

xml ×1

xslt ×1