相关疑难解决方法(0)

在Java中使用instanceof的性能影响

我正在开发一个应用程序,一种设计方法涉及对instanceof操作员的极大使用.虽然我知道OO设计通常会试图避免使用instanceof,但这是一个不同的故事,这个问题纯粹与性能有关.我想知道是否有任何性能影响?是这么快==吗?

例如,我有一个包含10个子类的基类.在一个获取基类的函数中,我会检查该类是否是子类的实例并执行一些例程.

我想解决它的另一种方法是使用"type id"整数原语,并使用位掩码来表示子类的类别,然后只需对子类"type id"进行掩码比较.表示类别的常量掩码.

instanceof莫名其妙地由JVM优化得比较快?我想坚持使用Java,但应用程序的性能至关重要.如果之前一直走在这条路上的人可以提供一些建议,那将会很酷.我是在挑剔太多还是专注于错误的事情来优化?

java performance instanceof

299
推荐指数
11
解决办法
11万
查看次数

Selenium WebDriver - 测试元素是否存在

有没有办法测试元素是否存在?任何findElement方法都会以异常结束,但这不是我想要的,因为它可能是一个元素不存在而且没关系,这不是测试的失败,因此异常不能成为解决方案.

我发现这篇文章:Selenium c#Webdriver:等到元素存在 但是这是C#而我不是很擅长.任何人都可以将代码翻译成Java吗?我很抱歉,我在Eclipse中尝试过但是我没有把它直接用到Java代码中.

这是代码:

public static class WebDriverExtensions{
    public static IWebElement FindElement(this IWebDriver driver, By by, int timeoutInSeconds){

        if (timeoutInSeconds > 0){
            var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(timeoutInSeconds));
            return wait.Until(drv => drv.FindElement(by));
        }

        return driver.FindElement(by);
    }
}
Run Code Online (Sandbox Code Playgroud)

java selenium selenium-webdriver

153
推荐指数
6
解决办法
32万
查看次数

java有一个不会为坏数据抛出异常的int.tryparse吗?

可能重复:
Java:封装Integer.parseInt()的好方法
如何将字符串转换为float并避免在java中使用try/catch?

C#有Int.TryParse:Int32.TryParse方法(String,Int32%)

这种方法的优点在于它不会为坏数据抛出异常.

在java中,Integer.parseInt("abc")将抛出异常,并且在可能发生这种情况的情况下,很多性能将受到影响.

对于那些性能问题的情况,有没有办法解决这个问题?

我能想到的另一种方法是针对正则表达式运行输入,但我必须测试以查看更快的内容.

java

101
推荐指数
3
解决办法
12万
查看次数

为什么尝试块很贵?

我听说过你应该避免尝试使用catch块的建议,因为它们很贵.

我的问题是关于.NET平台:为什么尝试块很昂贵?

回复摘要:

在这个问题上显然有两个阵营:那些说试试块是昂贵的,那些说"可能只是一点点".

那些说try块很贵的人通常会提到解除调用堆栈的"高成本".就个人而言,我不相信该辩解-阅读有关的异常处理程序如何存储后,专门在这里.

Jon Skeet坐在"可能只是一点点"的阵营中,写了两篇关于异常和性能的文章,你可以在这里找到.

有一篇文章我觉得非常有趣:它谈到了try块的"其他"性能影响(不一定是内存或cpu消耗).Peter Ritchie提到他发现try块中的代码没有被优化,因为它本来是编译器的.你可以在这里阅读他的发现.

最后,有一篇博客文章介绍了在CLR中实现异常的人的问题.在这里看一下Chris Brumme的文章.

.net coding-style

51
推荐指数
4
解决办法
9607
查看次数

Java中没有堆栈跟踪的异常

这可能是一个非常天真的问题.

我曾经认为a Throwablein Java 总是包含堆栈跟踪.这是对的吗?现在看起来我exceptions 没有堆栈跟踪就抓住了.是否有意义?是否有可能在没有堆栈跟踪的情况下捕获异常?

java exception stack-trace

46
推荐指数
4
解决办法
4万
查看次数

检查谷歌应用引擎数据存储区中是否存在实体.

检查实体是否存在于Google-app-engine数据存储区中的最佳/最快方法是什么?现在我试图通过键获取实体并检查get()是否返回错误.

我不知道在数据存储区上获取实体的过程.有没有更快的方法只做这个检查?

java google-app-engine entity google-cloud-datastore

26
推荐指数
2
解决办法
1万
查看次数

抛出并捕获异常,或使用instanceof?

我在变量中有一个异常(没有抛出).

什么是最好的选择?

Exception exception = someObj.getExcp();
try {
    throw exception;
} catch (ExceptionExample1 e) {
    e.getSomeCustomViolations();
} catch (ExceptionExample2 e) {
    e.getSomeOtherCustomViolations(); 
}
Run Code Online (Sandbox Code Playgroud)

要么

Exception exception = someObj.getExcp();
if (exception instanceof ExceptionExample1) {
    exception.getSomeCustomViolations();
} else if (exception instanceof ExceptionExample2) {
    exception.getSomeOtherCustomViolations();
}
Run Code Online (Sandbox Code Playgroud)

java performance exception instanceof throws

21
推荐指数
2
解决办法
2万
查看次数

例外有多贵

你知道java中的异常抛出和处理是多么昂贵吗?

我们在团队中就异常的实际成本进行了多次讨论.有些人认为通过使用例外而导致的性能损失被高估了.

今天我在我们的软件中找到了以下代码:

private void doSomething()
{
    try
    {
      doSomethingElse();
    }
    catch(DidNotWorkException e)
    {
       log("A Message");
    }
    goOn();
}
private void doSomethingElse()
{
   if(isSoAndSo())
   {
      throw new DidNotWorkException();
   }
   goOnAgain();
}
Run Code Online (Sandbox Code Playgroud)

这与此相比如何表现

private void doSomething()
{
    doSomethingElse();
    goOn();
}
private void doSomethingElse()
{
   if(isSoAndSo())
   {
      log("A Message");
      return;
   }
   goOnAgain();
}
Run Code Online (Sandbox Code Playgroud)

我不想讨论代码美学或任何东西,它只是关于运行时行为!你有真实的经验/测量吗?

java performance exception

20
推荐指数
5
解决办法
8865
查看次数

在Java中编写"异常驱动开发"的性能成本?

通过在Java中创建,抛出和捕获异常,是否有任何性能成本?

我计划将"异常驱动的开发"添加到一个更大的项目中.我想设计自己的异常并将它们包含在我的方法中,迫使开发人员捕获并做适当的工作.

例如,如果您有一种方法可以根据名称从数据库中获取用户.

public User getUser(String name);
Run Code Online (Sandbox Code Playgroud)

但是,用户可能为空,并且在使用用户的公共方法之前忘记检查此操作是很常见的.

User user = getUser("adam");

int age = user.getAge();
Run Code Online (Sandbox Code Playgroud)

这将导致NullPointerException和崩溃.但是,如果我在返回user-object之前进行了检查,如果它为null并抛出'UserIsNullException':

public User getUser(String name) throws UserIsNullException;
Run Code Online (Sandbox Code Playgroud)

我强迫实施者思考并采取行动:

try {

    User user = getUser("adam");

    int age = user.getAge();

}catch( UserIsNullException e) {

}
Run Code Online (Sandbox Code Playgroud)

它使代码更安全地发生意外崩溃并消除更多错误.假设该网站每小时有数百名访问者,这种设计模式几乎无处不在.

这种设计方法将如何影响性能?这些好处是否会超过成本,还是只是简单的编码?

谢谢你的帮助!

UPDATE!要清楚,我的注意力不是包装NullPointerException,正如我的例子所暗示的那样.目标是强制实施者编写一个try/catch,从而避免真正崩溃的头痛:

user == null

被遗忘了.问题涉及比较这两种设计模型:

int age;

try {

User user = getUser("adam");

age = user.getAge();

}catch( UserIsNullException e) {

age = 0;

}
Run Code Online (Sandbox Code Playgroud)

与:

int age;

User user = getUser("adam");

if( user != null ) { …
Run Code Online (Sandbox Code Playgroud)

java performance exception-handling exception overhead

14
推荐指数
6
解决办法
5969
查看次数

使用 Awaitility 来确定某些事情没有发生

有没有办法使用 Awaitility 来断言没有任何改变?我想验证某个主题是否未被写入,但由于没有状态更改,Awaitility 不喜欢这样。例如,这段代码给出了以下错误。谢谢

    @Test
    fun waitUntilListMightBePopulated() {

        val myTopic: List<String> = emptyList()

        await.atLeast(2, TimeUnit.SECONDS).pollDelay(Duration.ONE_SECOND).until {
            myTopic.isEmpty()
        }
    }
Run Code Online (Sandbox Code Playgroud)
ConditionTimeoutException: Condition was evaluated in 1005478005 NANOSECONDS which is earlier than expected minimum timeout 2 SECONDS
Run Code Online (Sandbox Code Playgroud)

java kotlin awaitility

14
推荐指数
2
解决办法
9180
查看次数