GVKun编程网logo

Java的varargs性能(java varargs)

17

本文将介绍Java的varargs性能的详细情况,特别是关于javavarargs的相关信息。我们将通过案例分析、数据研究等多种方式,帮助您更全面地了解这个主题,同时也将涉及一些关于androidst

本文将介绍Java的varargs性能的详细情况,特别是关于java varargs的相关信息。我们将通过案例分析、数据研究等多种方式,帮助您更全面地了解这个主题,同时也将涉及一些关于android studio出现警告: 最后一个参数使用了不准确的变量类型的 varargs 方法的非 varargs 调用、Java 7中的简化Varargs方法调用、Java 9中私有方法的@SafeVarargs注解?、Java Varargs 可变参数使用的知识。

本文目录一览:

Java的varargs性能(java varargs)

Java的varargs性能(java varargs)

编码我来检查Java的vararg性能。

我编写以下测试代码:

public class T {    public static void main(String[] args) {        int n = 100000000;        String s1 = new String("");        String s2 = new String("");        String s3 = new String("");        String s4 = new String("");        String s5 = new String("");        long t = System.currentTimeMillis();        for (int i = 0; i < n; i++) {            foo();        }        System.err.println(System.currentTimeMillis() - t);        t = System.currentTimeMillis();        for (int i = 0; i < n; i++) {            baz(s1, s2, s3, s4, s5);        }        System.err.println(System.currentTimeMillis() - t);        t = System.currentTimeMillis();        for (int i = 0; i < n; i++) {            bar(s1, s2, s3, s4, s5);        }        System.err.println(System.currentTimeMillis() - t);    }    static void foo() {    }    static void bar(String a1, String a2, String a3, String a4, String a5) {    }    static void baz(String... a) {    }}

在我的机器上,平均输出为:

78469678

似乎将变量传递给方法是免费的!好!

但是使用varags慢60倍!为什么呢

一种解释可能是程序必须在堆上创建数组,而时间是由GC花费的。但是对于更少的循环,我仍然得到输出:

0620

什么花费了这些额外的时间,反正编译器拥有将其解决为fix变量调用的所有信息…

这不是我打算为此进行优化的意图,但是我发现这很好奇…

更新资料

我添加了一个新测试

t = System.currentTimeMillis();for (int i = 0; i < n; i++) {    baz(s1);}System.err.println(System.currentTimeMillis() - t);

而且这个参数版本仍然慢30倍。也许在幕后有一个ArrayList.toArray()?

因此,请注意代码中不需要的varags方法,并进行重构以固定长度。这可能会提高性能。

答案1

小编典典

静态参数列表与数组完全不同。当您以这种方式传递它们时,编译器将为引用保留空间,并在调用该方法时填充它们。

Varargs与array等效。要调用这种方法,必须在运行时创建并填充数组。这就是为什么您观察到差异。

String[]并且String...是同义词。如果比较它们,应该会看到相同的性能。

android studio出现警告: 最后一个参数使用了不准确的变量类型的 varargs 方法的非 varargs 调用

android studio出现警告: 最后一个参数使用了不准确的变量类型的 varargs 方法的非 varargs 调用

Error:(61, 45) 警告: 最后一个参数使用了不准确的变量类型的 varargs 方法的非 varargs 调用;
对于 varargs 调用, 应使用 Object

对于非 varargs 调用, 应使用 Object[], 这样也可以抑制此警告


AS出现这个是什么原因,但是APP能编译能安装

Java 7中的简化Varargs方法调用

Java 7中的简化Varargs方法调用

在Java 7中,可以选择添加@SafeVarargs注释来抑制在编译带有不可修改的varargs参数的方法时收到的警告。Project
Coin的提案规定,当该方法确保仅将与varargs参数相同类型的元素存储在varargs数组中时,应使用注释。

非安全方法的一个例子是什么?

Java 9中私有方法的@SafeVarargs注解?

Java 9中私有方法的@SafeVarargs注解?

java 9中私有方法的@safevarargs注解?

@SafeVarargs 注解是在 Java 7 中引入的。该注解适用于finalstatic方法或采用可变参数的构造函数。此注释用于确保方法不会对其可变参数执行不安全的操作。从 Java 9 开始,@SafeVarargs 注解也适用于私有实例方法

语法

<strong>@SafeVarargs
private void methodName(...) {
   // some statements
}</strong>
登录后复制

示例

import java.util.ArrayList;
import java.util.List;
public class SafevarargsTest {
   <strong>@SafeVarargs     // Apply @SafeVarargs to private methods</strong>
   private void display(List<String>... names) {
      for(List<String> name : names) {
         System.out.println(name);
      }
   }
   public static void main(String args[]) {
      SafevarargsTest test = new SafevarargsTest();
      List<String> list = new ArrayList<String>();
      list.add("TutorialsPoint");
      list.add("Tutorix");
      test.display(list);
   }
}
登录后复制

输出

<strong>[TutorialsPoint, Tutorix]</strong>
登录后复制

以上就是Java 9中私有方法的@SafeVarargs注解?的详细内容,更多请关注php中文网其它相关文章!

Java Varargs 可变参数使用

Java Varargs 可变参数使用

高春辉、王春生、朱峰:关于开源创业的 15 件小事

Java1.5 提供了一个叫 varargs 的新功能,就是可变长度的参数。

"Varargs" 是 “variable number of arguments” 的意思。有时候也被简单的称为 “variable arguments”。

定义实参个数可变的方法:只要在一个形参的 "类型" 与 "参数名" 之间加上三个连续的 "."(即 "...",英文里的句中省略号),就可以让它和不确定个实参相匹配。

以下实例创建了 sumvarargs () 方法来统计所有数字的值。

我们在这里的 Main 方法中添加了 new int []{10, 12, 33, 7} 4 个参数,实际上你可以在这里持续添加不同的参数,在计算 sum 的方法中都可以根据你添加的参数来进行处理。

 

GIT

请参考 GitHub 上的源码代码:

https://github.com/cwiki-us/java-tutorial/blob/master/src/main/java/com/ossez/lang/tutorial/usecases/VarargsCase.java

 

SRC

package com.ossez.lang.tutorial.usecases;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * variable arguments use case
 */
public class VarargsCase {
    private static final Logger logger = LoggerFactory.getLogger(VarargsCase.class);

    /**
     * sumVarargs
     *
     * @param intArrays
     * @return
     */
    static int sumVarargs(int... intArrays) {
        int sum, i;
        sum = 0;
        for (i = 0; i < intArrays.length; i++) {
            sum += intArrays[i];
        }
        return (sum);
    }

    /**
     * Main Function
     *
     * @param args
     */
    public static void main(String args[]) {
        int sum = 0;
        sum = sumVarargs(new int[]{10, 12, 33, 7});
        logger.debug("The Sum of the arrays: {}", sum);
    }
}

 

 

OUTPUT

程序运行的输出结果为:

2020/01/27 14:33:52 DEBUG [com.ossez.lang.tutorial.usecases.VarargsCase] - The Sum of the arrays: 62

 

https://www.cwiki.us/pages/viewpage.action?pageId=57933901

今天关于Java的varargs性能java varargs的分享就到这里,希望大家有所收获,若想了解更多关于android studio出现警告: 最后一个参数使用了不准确的变量类型的 varargs 方法的非 varargs 调用、Java 7中的简化Varargs方法调用、Java 9中私有方法的@SafeVarargs注解?、Java Varargs 可变参数使用等相关知识,可以在本站进行查询。

本文标签: