当前位置: 首页 > 面试题库 >

用Java创建对象很慢

郎宏逸
2023-03-14
问题内容

我的经验表明,使用Java创建对象非常缓慢。通常,我只通过删除对象创建并重复使用相同的对象来优化代码。

我想知道它在基于OOP的其他语言中是否同样慢,因为对我而言,以硬性面向对象的语言花费大量时间来创建对象是非常直观的。

有人在几种语言上对此进行了介绍吗?


问题答案:

尝试看看您从中得到了什么-进行一些练习以尝试使VM无法优化循环:

import java.util.ArrayList;
import java.util.Random;

class DummyInteger {
    private int i;
    public DummyInteger(int i) {
        this.i = i;
    }
    public int getI() {
        return i;
    }
}

public class ObjectCreationTest {

    final static int ITERATIONS = 2000000;
    public static void main(String[] args) {
        Random r = new Random(System.currentTimeMillis());

        int[] randArr = new int[ITERATIONS];
        for(int i = 0; i < ITERATIONS; i++) {
            randArr[i] = r.nextInt();
        }
        DummyInteger[] iArr = new DummyInteger[ITERATIONS];
        long start = System.currentTimeMillis();
        for(int i = 0; i < ITERATIONS; i++) {
            ArrayList<DummyInteger> list = new ArrayList<DummyInteger>(); 
            list.add(new DummyInteger(randArr[i]));
            iArr[i] = list.get(0);
        }
        long end = System.currentTimeMillis();
        System.out.println(String.format("Creating %d objects took %d ms",ITERATIONS*2,end-start));
        int sum = 0;
        for(DummyInteger mi: iArr) {
            sum += mi.getI();
        }
        System.out.println(sum);
        }
}

我有

创建4000000个对象耗时678毫秒

每个对象大约为170纳秒。



 类似资料:
  • 问题内容: 我正在尝试将由IP地址或名称指定的地址(都以String(即或))转换为 InetAdress 对象。没有构造函数,而是返回 InetAddress的 静态方法。因此,如果我获得了主机名,这不是问题,但是如果获得IP地址该怎么办?有一种方法可以获取 byte [], 但是我不确定这对我有什么帮助。所有其他方法均获取主机名。 InetAddress API文档 问题答案: 您应该可以使用

  • 问题内容: 我是Java的新手,当时我用Java创建了一系列对象。 例如,我有A类 但这只是创建指向A的指针(引用),而不是4个对象。它是否正确?我看到当我尝试访问创建的对象中的函数/变量时,出现空指针异常。为了能够操作/访问对象,我必须这样做 这是正确的还是我做错了什么?如果这是正确的,那真的很奇怪。 编辑:我觉得这很奇怪,因为在C ++中,你只是说新的A [4],它创建了四个对象。 问题答案:

  • 主要内容:显式创建对象,隐含创建对象对象是对类的实例化。对象具有状态和行为,变量用来表明对象的状态,方法表明对象所具有的行为。 Java 对象的生命周期包括创建、使用和清除,本文详细介绍对象的创建,在 Java 语言中创建对象分显式创建与隐含创建两种情况。 显式创建对象 对象的显式创建方式有 4 种。 1. 使用 new 关键字创建对象 这是常用的创建对象的方法,语法格式如下: 2. 调用 java.lang.Class 或者 ja

  • 假设我在Java中有一个类Animal和3个子类。结构如下所示 我想在breed类中创建另一个对象,但我想创建同一个子类的对象,方法breed()就是从这个子类执行的。例如,如果执行了,我想在那里创建一个新的Frog对象(因为summing Frog是一个Frog对象),如果执行了,我想创建一个新的bear对象,等等。 有没有办法在动物类中处理,或者我必须在每个子类中重写方法?

  • JavaScript对每个创建的对象都会设置一个原型,指向它的原型对象。 当我们用obj.xxx访问一个对象的属性时,JavaScript引擎先在当前对象上查找该属性,如果没有找到,就到其原型对象上找,如果还没有找到,就一直上溯到Object.prototype对象,最后,如果还没有找到,就只能返回undefined。 例如,创建一个Array对象: var arr = [1, 2, 3]; 其

  • 本文向大家介绍Java 对象的创建过程?相关面试题,主要包含被问及Java 对象的创建过程?时的应答技巧和注意事项,需要的朋友参考一下 下图便是 Java 对象的创建过程,我建议最好是能默写出来,并且要掌握每一步在做什么。 Step1:类加载检查 虚拟机遇到一条 new 指令时,首先将去检查这个指令的参数是否能在常量池中定位到这个类的符号引用,并且检查这个符号引用代表的类是否已被加载过、解析和初始