我想知道通过启用 NMT 时的真实/典型开销是多少\xe2\x80\x91XX:NativeMemoryTracking=summary(我之后的完整命令选项是-XX:+UnlockDiagnosticVMOptions \xe2\x80\x91XX:NativeMemoryTracking=summary \xe2\x80\x91XX:+PrintNMTStatistics)
我在任何地方都找不到太多信息 - 无论是在 SO、博客文章还是官方文档上。\n文档说:
\n\n\n注意:启用NMT会导致5%-10%的性能开销。
\n
但他们没有说明哪种模式预计会有这种性能开销(摘要和详细信息?)\n以及这种开销到底是什么(CPU、内存……)。\n在本机内存跟踪指南中,他们声称:
\n\n\n启用 NMT 将导致 JVM 性能下降 5-10%,并且 NMT 的内存使用会向所有 malloc 内存添加 2 个机器字作为 malloc 标头。NMT 内存使用情况也会被 NMT 跟踪。
\n
但同样,对于摘要模式和详细模式来说都是如此吗?
\n我所追求的基本上是为生产应用程序永久添加是否安全\xe2\x80\x91XX:NativeMemoryTracking=summary(类似于连续JFR 记录)以及潜在成本是多少。\n到目前为止,在我们的应用程序上测试这一点时,我没有发现差异但很难
是否有包含有关此性能开销的更多详细信息的权威信息源?\n是否有人有为生产应用程序永久启用此功能的经验?
\n我在实施SSO时使用bouncycastle(JAVA)进行签名,加密,解密和签名验证.我有原始的PGP公钥和私钥,我需要将它们存储在Java密钥库中.这些PGP公钥没有证书.
据我所知,对于公钥(根据Keystore的javadoc:http://docs.oracle.com/javase/6/docs/api/java/security/KeyStore.html),我必须创建证书.创建证书后,我可以将其作为KeyStore.TrustedCertificateEntry导入密钥库.但是,我无法为类型org.bouncycastle.openpgp.PGPPublicKey创建证书条目.
我在网上搜索过但找不到任何有效的例子:
Bouncycastle示例 - org.bouncycastle.openpgp.examples.DirectKeySignature:将证书(PGPSignature类型的对象)直接添加到PGPPublicKey.总而言之 - 我签署了(认证的)PGPPublicKey但我无法将这种类型的密钥存储到java密钥库中.
OutputStream out = new ByteArrayOutputStream();
if (armor)
{
out = new ArmoredOutputStream(out);
}
PGPPrivateKey pgpPrivKey = secretKey.extractPrivateKey(secretKeyPass.toCharArray(), "BC");
PGPSignatureGenerator sGen = new PGPSignatureGenerator(secretKey.getPublicKey().getAlgorithm(), PGPUtil.SHA1, "BC");
sGen.initSign(PGPSignature.DIRECT_KEY, pgpPrivKey);
BCPGOutputStream bOut = new BCPGOutputStream(out);
sGen.generateOnePassVersion(false).encode(bOut);
PGPSignatureSubpacketGenerator spGen = new PGPSignatureSubpacketGenerator();
boolean isHumanReadable = true;
spGen.setNotationData(true, isHumanReadable, notationName, notationValue);
PGPSignatureSubpacketVector packetVector = spGen.generate();
sGen.setHashedSubpackets(packetVector);
bOut.flush();
return PGPPublicKey.addCertification(keyToBeSigned, sGen.generate()).getEncoded();
Run Code Online (Sandbox Code Playgroud)我主要对编程解决方案(java源代码)感兴趣,但使用某些工具的示例也会有所帮助.
谢谢!
我已经配置了gradle build来使用我们公司的nexus repo,但maven似乎无法正确授权 - 我不断获得如erros
Failed to get resource: HEAD. [HTTP HTTP/1.1 401 Authorization Required: https://maven.gooddata.com/nexus/content/repositories/gooddata/org/codehaus/groovy/groovy-all/2.0.4/groovy-all-2.0.4.pom]
Run Code Online (Sandbox Code Playgroud)
奇怪的是,部署到相同的nexus repo(通过mavenDeployer)可以无缝地工作.
以下是与maven repo配置相关的构建脚本的一部分(maven_user和maven_password在〜/ .gradle/gradle.properties中定义).
apply plugin: 'maven'
ext {
repos = [
my : "<my_repo_url>",
my_snapshot : "<my_snapshots_repo_url>"
]
}
repositories {
mavenLocal()
maven {
url repos.my
credentials {
username = maven_user
password = maven_password
}
}
maven {
url repos.my_snapshot
credentials {
userName = maven_user
password = maven_password
}
}
mavenCentral()
maven { url "http://repository.codehaus.org/" }
maven { url "http://sardine.googlecode.com/svn/maven" }
maven …Run Code Online (Sandbox Code Playgroud) 将 Clojure 应用程序作为 jar 运行时,是否应该默认启用断言?
我们使用 leiningen 构建一个 uberjar 然后java -jar ...运行它,我刚刚发现这*assert*是真的。
我找不到这个动态变量应该保持什么默认值,但我认为它是假的(并且只在 REPL 开发环境中设置为真)。
这导致了一个令人讨厌的问题,future其中前提条件断言错误导致未来线程死亡,我们不知道发生了什么(因为我们只捕获了Exceptionnot Throwable)。
我浏览了的源代码,clojure.lang.RT但我无法弄清楚*assert*var在哪里设置为 true。
我还发现选项:global-vars中leinigen示例项目(这是在提到如何禁用Clojure的断言,包括先决条件?)。这看起来很合理,但我认为对于“生产”构建,我会*assert* false自动获得。
编辑:我错过了T用于*assert*在RT.java. 但是,仍然很好奇为什么这是默认设置以及关闭断言的推荐方法是什么(如果甚至推荐的话)。