如果您对JavaVM调整-Xbatch和-Xcomp和javavm参数设置感兴趣,那么这篇文章一定是您不可错过的。我们将详细讲解JavaVM调整-Xbatch和-Xcomp的各种细节,并对javavm
如果您对Java VM调整-Xbatch和-Xcomp和java vm参数设置感兴趣,那么这篇文章一定是您不可错过的。我们将详细讲解Java VM调整-Xbatch和-Xcomp的各种细节,并对java vm参数设置进行深入的分析,此外还有关于android-RequestBatch.Callback onBatchCompleted()未调用、Java compiler level does not match解决方法、java – NoSuchMethodError:com.google.common.base.Stopwatch.createStarted()Lcom / google / common / base / Stopwatch、java – Try,Catch和Finally块的实用技巧。
本文目录一览:- Java VM调整-Xbatch和-Xcomp(java vm参数设置)
- android-RequestBatch.Callback onBatchCompleted()未调用
- Java compiler level does not match解决方法
- java – NoSuchMethodError:com.google.common.base.Stopwatch.createStarted()Lcom / google / common / base / Stopwatch
- java – Try,Catch和Finally块
Java VM调整-Xbatch和-Xcomp(java vm参数设置)
我正在查看用于运行Alfresco的JVM配置选项,主要是Alfresco
Wiki上的此文档。建议之一是使用JVM标志和。这样做的理由是:-Xcomp``-Xbatch
如果希望Hotspot预编译这些类,则可以添加[-Xcomp和-
Xbatch]。但是,这将显着增加服务器的启动时间,但会突出显示缺少的依赖关系,这些依赖关系可在以后找到。
从我在其他地方阅读过的有关-Xcomp
和-Xbatch
标志的信息,我想知道它们是否真的提供了任何好处。
-Xcomp
使HotSpot能够以最大的优化事先编译所有代码,从而避免了VM将通过系统的标准运行进行的任何分析。-Xbatch
停止后台编译,这意味着导致代码被编译的线程阻塞,直到编译完成。但是,在编译完成之后,先前阻塞的线程 将不会运行已编译的代码 ,而是仍将运行已解释的代码。这是Java 6(Mustang)的一个变化–在Mustang之前,-Xbatch
确保在存在编译标志的情况下,由于存在标志而被阻塞的线程可以在已编译的代码中运行。因此,我猜测该-Xbatch
标志的建议是在较旧的VM上运行Alfresco的遗留物。
有人有想法吗?我的倾向是摆脱这两个标志,并依靠VM来使事情变得正确。
我想补充两点,首先,我还没有访问Alfresco实例的能力,其次,除了查看其他设备,我真的不知道托管Alfresco的计算机规格是什么。配置选项,它必须是64位VM。尽管如此,我还是希望社区能够从HotSpot总体调整的角度获得一些有用的意见。
答案1
小编典典一般来说,让HotSpot编译器自行调整总是可取的。对于64位和某些“服务器级”计算机,甚至默认使用服务器VM(-server)。
-Xbatch主要用于调试,如您所指出的Steve Goldman的博客所述:
因此-Xbatch开关即使在穆斯林时代之前也不是特别有用的开关。对于jvm开发人员而言,它有些有用,因为它会使运行更加可预测和可重复。
-Xcomp删除了收集信息以进行有效编译的能力。从Alex Turner的帖子中:
从性能的角度来看,可能有人认为-
Xcomp是一个好主意。但是,事实并非如此!JIT编译器在编译之前使用了这1000次迭代来收集有关应如何编译该方法以获得最佳效率的信息。-Xcomp删除了这样做的能力,因此我们实际上可以看到性能下降。
没有性能考虑,我从来没有见过使用这些标志来检测丢失的依赖项(如果仍然解释了某些代码,它可能行不通),所以恕我直言,我会摆脱这两种情况。
android-RequestBatch.Callback onBatchCompleted()未调用
发送一批请求时,无法使用Android的facebook graph API库.
运行此代码时未得到回调:
RequestBatch requestBatch = new RequestBatch(requests);
requestBatch.addCallback(new com.facebook.RequestBatch.Callback() {
@Override
public void onBatchCompleted(RequestBatch batch) {
Log.e(LOG_TAG, "onBatchCompleted()");
}
});
requestBatch.executeAsync();
解决方法:
找到了答案.
您需要为每个单独的请求设置回调以获取与批处理相关的回调,因为onBatchCompleted回调将在调用所有按请求的回调之后被调用.
for (String friend : friends) {
MyLog.d(LOG_TAG, "Adding request for " + friend.getInterestFbId());
String graPHPath = friend + "/Feed";
Request request = new Request(session, graPHPath, null, HttpMethod.GET);
Bundle params = new Bundle();
params.putString("fields",
"id,"+
"name,"+
"username,"+
"Feed,");
request.setParameters(params);
// THIS IS VITAL OR THE BATCH CALLBACK WILL NEVER ARRIVE
request.setCallback(new com.facebook.Request.Callback() {
@Override
public void onCompleted(Response response) {}
});
requests.add(request);
}
Java compiler level does not match解决方法
问题产生的原因:从别的地方导入一个项目的时候,经常会遇到eclipse/Myeclipse报Description Resource Path Location Type Java compiler level does not match the version of the installed Java project facet. zxxm Unknown Faceted Project Problem (Java Version Mismatch)出现这个问题的原因是因为,eclipse/myeclipse的jdk编译版本与出现问题的项目JDK编译版本不一致所导致!
解决方案: 进入项目---proferences---Java Compiler设置编译出来的文件使用的格式是 1.7版本
进入项目---proferences--MyEclipse--Project Facet设置中 java选项 的文件的格式是 1.7
java – NoSuchMethodError:com.google.common.base.Stopwatch.createStarted()Lcom / google / common / base / Stopwatch
我也有这个代码用于引用,但我认为这不是问题:
FirewallRule rule = new PeriodicFirewallCounterRule(60,TimeUnit.SECONDS,new IpAddressCountingPolicy()); ((PeriodicFirewallCounterRule)rule).addHandler(new RateLimitationHandler(new UniqueLimitPolicy(10))); FirewallFilter firewallFiler = new FirewallFilter(getContext(),list(rule)); firewallFiler.setNext(ma);
我的应用程序正在使用Restlet APISpark:
<dependency> <groupId>org.restlet.gae</groupId> <artifactId>org.restlet.ext.apispark</artifactId> <version>${version.restlet}</version> </dependency>
当运行并访问应用程序的REST API时,它会抛出此异常
错误:
[INFO] Caused by: java.lang.NoSuchMethodError: com.google.common.base.Stopwatch.createStarted()Lcom/google/common/base/Stopwatch; [INFO] at org.restlet.ext.apispark.internal.firewall.rule.counter.PeriodicCounter.<init>(PeriodicCounter.java:65) [INFO] at org.restlet.ext.apispark.internal.firewall.rule.PeriodicFirewallCounterRule$1.load(PeriodicFirewallCounterRule.java:86) [INFO] at org.restlet.ext.apispark.internal.firewall.rule.PeriodicFirewallCounterRule$1.load(PeriodicFirewallCounterRule.java:84) [INFO] at com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3599) [INFO] at com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2379) [INFO] at com.google.common.cache.LocalCache$Segment.lockedGetorLoad(LocalCache.java:2342) [INFO] at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2257) [INFO] ... 74 more
解决方法
Downloading: http://maven.restlet.com/com/google/guava/guava/16.0.1/guava-16.0.1.jar Downloading: http://repo.maven.apache.org/maven2/com/google/guava/guava/16.0.1/guava-16.0.1.jar Downloaded: http://repo.maven.apache.org/maven2/com/google/guava/guava/16.0.1/guava-16.0.1.jar (2176 KB at 711.7 KB/sec)
它位于从头开始创建的应用程序中,具有以下maven配置:
<project (...)> <modelVersion>4.0.0</modelVersion> <groupId>org.restlet</groupId> <artifactId>restlet-apispark-firewall</artifactId> <name>${project.artifactId}</name> <packaging>jar</packaging> <version>1.0.0-snapshot</version> <properties> <java-version>1.7</java-version> <restlet-version>2.3.1</restlet-version> </properties> <dependencies> <dependency> <groupId>org.restlet.jse</groupId> <artifactId>org.restlet</artifactId> <version>${restlet-version}</version> </dependency> <dependency> <groupId>org.restlet.jse</groupId> <artifactId>org.restlet.ext.apispark</artifactId> <version>${restlet-version}</version> </dependency> </dependencies> <repositories> <repository> <id>maven-restlet</id> <name>Public online Restlet repository</name> <url>http://maven.restlet.com</url> </repository> </repositories> </project>
我整合了你的代码,它在我身边很好用.没有例外被抛出……
我认为Guava的旧版本来自另一个依赖.如果你使用Maven,你应该确定这个旧的番石榴版本来自哪里,并且可能在相应的依赖项中添加一个排除.我希望它能解决你的问题……
希望能帮助你,蒂埃里
java – Try,Catch和Finally块
public class D { void myMethod() { try { throw new IllegalArgumentException(); } catch (NullPointerException npex) { System.out.println("NullPointerException thrown "); } catch (Exception ex) { System.out.println("Exception thrown "); } finally { System.out.println("Done with exceptions "); } System.out.println("myMethod is done"); } public static void main(String args[]) { D d = new D(); d.myMethod(); }
}
我不明白为什么“myMethod完成”也被打印出来.抛出了异常,因此它假设找到一个匹配的catch并执行finally块,但它继续在myMethod方法上并打印myMethod已完成,这不是finally块的一部分.为什么?
解决方法
如果你没有抓住它,或者重新抛出它,那么“myMethod就完成了”就不会被打印出来,并且异常会在堆栈中冒出来,直到它被别人抓到.
请注意,finally块始终执行,异常或否.
今天的关于Java VM调整-Xbatch和-Xcomp和java vm参数设置的分享已经结束,谢谢您的关注,如果想了解更多关于android-RequestBatch.Callback onBatchCompleted()未调用、Java compiler level does not match解决方法、java – NoSuchMethodError:com.google.common.base.Stopwatch.createStarted()Lcom / google / common / base / Stopwatch、java – Try,Catch和Finally块的相关知识,请在本站进行查询。
本文标签: