GVKun编程网logo

Java VM调整-Xbatch和-Xcomp(java vm参数设置)

11

如果您对JavaVM调整-Xbatch和-Xcomp和javavm参数设置感兴趣,那么这篇文章一定是您不可错过的。我们将详细讲解JavaVM调整-Xbatch和-Xcomp的各种细节,并对javavm

如果您对Java VM调整-Xbatch和-Xcompjava 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参数设置)

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-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解决方法

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

java – NoSuchMethodError:com.google.common.base.Stopwatch.createStarted()Lcom / google / common / base / Stopwatch

我的应用正在抛出NoSuchMethodError:com.google.common.base.Stopwatch.createStarted()Lcom / google / common / base / Stopwatch错误.不知道为什么,因为16.0.1确实包含那个类,我已经检查了.根据我的研究,看起来这是一个错误?

我也有这个代码用于引用,但我认为这不是问题:

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

解决方法

使用扩展名org.restlet.ext.apispark时,检索到的guava依赖项的版本为16.0.1.
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块

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块的一部分.为什么?

解决方法

这就是try-catch-finally的工作方式.因为您捕获了异常,所以它被认为已被处理,并且执行继续正常进行.

如果你没有抓住它,或者重新抛出它,那么“myMethod就完成了”就不会被打印出来,并且异常会在堆栈中冒出来,直到它被别人抓到.

请注意,finally块始终执行,异常或否.

今天的关于Java VM调整-Xbatch和-Xcompjava 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块的相关知识,请在本站进行查询。

本文标签: