Tag: 性能

Java:空循环使用多长时间?

我试图在Java中测试自动装箱和拆箱的速度,但是当我尝试将它与原语上的空循环进行比较时,我注意到了一个奇怪的事情。 这个片段: for (int j = 0; j < 10; j++) { long t = System.currentTimeMillis(); for (int i = 0; i < 10000000; i++) ; t = System.currentTimeMillis() – t; System.out.print(t + " "); } 每次我运行它,它返回相同的结果: 6 7 0 0 0 0 0 0 0 0 为什么前两个循环总是需要一些时间,其余的似乎被系统跳过? 在这篇文章的答案中,据说Just-In-Time编译将能够优化这一点。 但如果是这样,为什么前两个循环还需要一些时间?

Java中哪一段代码更快?

a) for(int i = 100000; i > 0; i–) {} b) for(int i = 1; i < 100001; i++) {} 答案就在这个网站上 (问题3)。 我只是想不通为什么? 来自网站: 3. a

三元运算符是否比Java中的“if”条件更快

我倾向于“ if-conditional syndrome ”,这意味着我倾向于一直使用条件。 我很少使用三元运算符。 例如: //I like to do this: int a; if (i == 0) { a = 10; } else { a = 5; } //When I could do this: int a = (i == 0) ? 10:5; 我使用哪个问题? 哪个更快? 是否存在显着的性能差异? 尽可能使用最短的代码是一种更好的做法吗?

编译时常量和变量

Java语言文档说: 如果将基本类型或字符串定义为常量并且在编译时已知该值,则编译器会将代码中的常量名称替换为其值。 这称为编译时常量。 我的理解是,如果我们有一段代码: private final int x = 10; 然后,编译器将用文字10替换代码中每次出现的x 。 但假设常量在运行时初始化: private final int x = getX(); // here getX() returns an integer value at run-time. 与编译时常量相比,是否会出现性能下降(无论可能忽略不计)? 另一个问题是以下代码行: private int y = 10; // here y is not final 编译器以与编译时常量相同的方式处理? 最后,我从答案中理解的是: final static表示编译时常量 just final意味着它是一个常量但在运行时初始化 只是static意味着在运行时初始化 没有final是一个变量,不会被视为常量。 我的理解是否正确?

在java中将String转换为Integer的最有效方法

将String转换为Integer对象的方法有很多种。 以下哪项是最有效的: Integer.valueOf() Integer.parseInt() org.apache.commons.beanutils.converters.IntegerConverter 我的用例需要创建包装器Integer对象…意味着没有原始int …并且转换后的数据用于只读。

在对象上调用getter而不是将其存储为局部变量(内存占用,性能)

在下面的代码中,我们调用listType.getDescription()两次: for (ListType listType: this.listTypeManager.getSelectableListTypes()) { if (listType.getDescription() != null) { children.add(new SelectItem( listType.getId() , listType.getDescription())); } } 我倾向于重构代码以使用单个变量: for (ListType listType: this.listTypeManager.getSelectableListTypes()) { String description = listType.getDescription(); if (description != null) { children.add(new SelectItem(listType.getId() ,description)); } } 我的理解是JVM以某种方式针对原始代码进行了优化,尤其是嵌套调用,如children.add(new SelectItem(listType.getId(), listType.getDescription())); 。 比较两个选项,哪一个是首选方法,为什么? 这就是内存占用,性能,可读性/易用性以及其他我现在不想到的内容。 后一个代码片段何时变得比前者更有利,也就是说,当使用临时局部变量变得更合适时,是否有任何(近似)数量的listType.getDescription()调用,因为listType.getDescription()总是需要一些堆栈存储this对象的操作?

Java:声明一个大小为n的数组的大时间是什么?

在Java中声明大小为n的数组的运行时间是多少? 我想这将取决于内存是否在垃圾收集(在这种情况下可能是O(1))或初始化(在这种情况下它必须是O(n))归零。

如何将自纪元以来的秒数转换为Java中的小时/分钟/秒?

是否有快速,低垃圾的方式来做到这一点? 我不能只做简单的模数运算,因为它不考虑闰秒和其他日期/时间有趣的业务。

为什么System.out.println这么慢?

这是所有编程语言的共同点吗? 进行多次打印然后使用println似乎更快但将所有内容移动到字符串并且只是打印似乎最快。 为什么? 编辑:例如,Java可以在不到一秒的时间内找到高达100万的所有素数 – 但是打印然后在他们自己的println上全部打印可能需要几分钟! 打印高达100亿小时! EX: package sieveoferatosthenes; public class Main { public static void main(String[] args) { int upTo = 10000000; boolean primes[] = new boolean[upTo]; for( int b = 0; b < upTo; b++ ){ primes[b] = true; } primes[0] = false; primes[1] = false; int testing = 1; while( testing […]

JVM何时使用内在函数

为什么在JVM内部类中存在的某些代码模式被转换为内部函数,而从我自己的类调用时相同的模式则不然。 例: bitCount函数,当从Integer.bitCount(i)内调用时,将变成一个内在函数。 但是当复制到我的类中然后调用将需要更长的时间来执行。 比较 Integer.bitCount(i) MyClass.bitCount(i) public static int bitCount(int i) { // HD, Figure 5-2 i = i – ((i >>> 1) & 0x55555555); i = (i & 0x33333333) + ((i >>> 2) & 0x33333333); i = (i + (i >>> 4)) & 0x0f0f0f0f; i = i + (i >>> 8); i = […]