【问题标题】:BouncyCastle Provider Jar causes Java Heap Space ErrorBouncyCastle Provider Jar 导致 Java 堆空间错误
【发布时间】:2012-10-12 04:29:25
【问题描述】:

有人遇到过这个问题吗?

我正在尝试使用 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);
}

【问题讨论】:

  • 你能给我们看看你的eclipse.ini吗?
  • -启动插件/org.eclipse.equinox.launcher_1.3.0.v20120522-1813.jar --launcher.library plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.200。 v20120522-1813 -product org.eclipse.epp.package.mobile.product --launcher.defaultAction openFile --launcher.XXMaxPermSize 256M -showsplash org.eclipse.platform --launcher.XXMaxPermSize 256m --launcher.defaultAction openFile -vmargs - Dosgi.requiredJavaVersion=1.5 -Dhelp.lucene.tokenizer=standard -Xms40m -Xmx384m
  • 查看我的答案并重启你的eclipse

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


【解决方案1】:

如果这段代码是在 Android 中执行的,那么增加 Eclipse 的堆大小对您没有任何帮助,因为它根本与它无关。 Android 应用程序的堆大小是固定的,你不能增加它(无论如何在 Honeycomb 之前)。你用的是什么版本的安卓?此外,BouncyCastle 库是 Android 的一部分,因此即使您将它们添加到项目中,它也会使用系统库,这些库略有不同,这可能会导致细微(而不是那么细微)的错误。如果您想在 Honeycomb (3.0) 之前的平台上使用 BC,您需要更改包名称或包含已经为您执行此操作的 Spongy Castle。

【讨论】:

  • 感谢您的回答。我刚刚尝试使用 Spoongycastle。不幸的是,我再次撞到了同一堵墙。知道是否有另一种方法可以在 Android 上生成证书或在外部每次安装时添加一个?
  • 另外,我需要支持 android 2.2 及更高版本,所以我想我被外部库困住了。但是,仅从知识的角度来看,我没有看到是否可以在没有外部 jar 的情况下在 android 中使用 bouncycastle 创建证书...
  • 您需要在任何版本的 Android 上使用外部库,因为 BC 不是 SDK 的一部分。不知道为什么会出现内存不足错误,此代码在桌面应用程序中是否有效?
  • 是的,代码库也用在后端.net中,跨平台很常见。我尝试执行 SpoungyCastle 为 Android link 提供的一个示例项目,但遇到了同样的问题
  • 你在什么设备上运行?它可以在其他设备上使用吗?
【解决方案2】:

要增加堆空间,请按以下步骤操作:

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

【讨论】:

    【解决方案3】:

    我怀疑程序有问题,例如长循环,高内存需求左右..不知道罐子所以无法评论。

    如果你想运行增加堆的eclipse,运行下面的命令来启动eclipse:

        eclipse [normal arguments] -vmargs -Xmx512M
    

    根据需要设置大小。

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

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

    完成后,重新启动 eclipse。

    【讨论】:

    • 你们有谁知道这个 jar 本身是否有问题,好像我删除了这个 jar 那么一切都很好,但是要为 SSL 生成证书我依赖它,
    • 不知道这个 jar(我在第一条语句中提到过)但是如果你将堆增加一点值并且它运行良好,这意味着你的 Eclipse 是在阈值堆上运行的。如果仍然失败,则说明 jar 有问题。
    • 谢谢,我尝试更新堆空间但仍然卡住,所以我认为这是一个 jar 问题:(
    • 我很肯定它在代码中的 JAR 问题,我没有看到任何循环或递归,所以不要认为您的程序代码(共享)会导致这种情况。
    【解决方案4】:

    修改

    --launcher.XXMaxPermSize
    256m
    

    --launcher.XXMaxPermSize
    512m
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-09-15
      • 2023-04-07
      • 1970-01-01
      • 2011-10-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多