BouncyCastle Provider Jar导致Java堆空间错误

时间:2012-10-12 04:29:25

标签: java android ssl out-of-memory bouncycastle

有没有人遇到过这个问题?

我正在尝试使用BouncyCastle在Android中创建证书但是一旦我添加了BouncyCastle Provider Jar,我就会遇到Java堆空间问题,Eclipse崩溃时会出现OutOfMemory错误。

我正在做的就是跟随,这类似于充气城堡中的示例代码,

public static X509Certificate createMasterCert(
    PublicKey pubKey,
    PrivateKey privKey)
    throws Exception
{
    //
    // signers name
    //
    String issuer = "C=AU, O=The Legion of the Bouncy Castle, OU=Bouncy Primary Certificate";

    //
    // subjects name - the same as we are self signed.
    //
    String subject = "C=AU, O=The Legion of the Bouncy Castle, OU=Bouncy Primary Certificate";

    //
    // create the certificate - version 1
    //
    X509v1CertificateBuilder v1CertBuilder = new JcaX509v1CertificateBuilder(
        new X500Name(issuer),
        BigInteger.valueOf(1),
        new Date(System.currentTimeMillis() - 1000L * 60 * 60 * 24 * 30),
        new Date(System.currentTimeMillis() + (1000L * 60 * 60 * 24 * 30)),
        new X500Name(subject),
        pubKey);

    X509CertificateHolder cert = v1CertBuilder.build(new JcaContentSignerBuilder("SHA1withRSA").setProvider(BC).build(privKey));

    return new JcaX509CertificateConverter().setProvider(BC).getCertificate(cert);
}

4 个答案:

答案 0 :(得分:0)

要增加堆空间,请执行以下步骤:

  1. 右键单击Package Explorer中的项目,然后转到Run As并单击Run Configuration并找到您的类的名称。
  2. 在标签为VM参数的框内的Arguments选项卡(Main选项卡旁边)中写-mx256m

答案 1 :(得分:0)

我怀疑程序有问题,例如长循环,高内存需要等等。没有意识到jar无法发表评论。

如果你想用增加的堆运行eclipse,请运行以下命令启动eclipse:

    eclipse [normal arguments] -vmargs -Xmx512M

根据您的需要设置尺寸。

或者,您可以在eclipse.ini根目录下打开eclipse并更新vmargs参数:

  .......
  -vmargs
  -Xms40m
  -Xmx512m <---Update this value

完成后,重启日食。

答案 2 :(得分:0)

修改

--launcher.XXMaxPermSize
256m

--launcher.XXMaxPermSize
512m

答案 3 :(得分:0)

如果在Android中执行此代码,增加Eclipse的堆大小将对您无效,因为它与它无关。 Android应用程序的堆大小是固定的,你不能增加它(不管怎样在Honeycomb之前)。您使用的是哪个版本的Android?另外,BouncyCastle库是Android的一部分,所以即使你将它们添加到你的项目中,它也会使用系统的库,它们略有不同,这可能导致细微(而不是那么微妙)的错误。如果您想在预蜂窝(3.0)平台上使用BC,您需要更改包名称或包括已经为您执行此操作的Spongy Castle。