关于数组的思考


1.数组在jvm中是如何存放的?

首先数组也是一种对象,那这个对象的引用是放在栈内存中,而真正new出来的对象是存在堆内存中;那么对象中的每个元素,也就是数组中的每个元素,这个值我个人感觉应该是存在堆内存中也有的。

public class Arrays {

   public static void main(String[] args) {

       int[] array = new int[3];

       array[1] = 100;

       array[0] = 50;

       array[2] = 200;

       new Thread(new Runnable() {

           @Override

           public void run() {

               System.out.println(array[0]);

           }

       }).start()

   }

}

以上面这个为例,我看了下它反编译出来的字节码文件:



L0

    LINENUMBER 12 L0

    ICONST_3

    NEWARRAY T_INT

    ASTORE 1

  L1

    LINENUMBER 14 L1

    ALOAD 1

    ICONST_1

    BIPUSH 100

    IASTORE

  L2

    LINENUMBER 15 L2

    ALOAD 1

    ICONST_0

    BIPUSH 50

    IASTORE

  L3

可以看到,这个200是属于操作数栈内存中的变量,但是最终是会存储回这个数组元素当中。另外,在新线程中也可以取出这个数组元素的值,如果只是放在栈内存中的话,线程之间并不共享,新线程也是应该取不到的。



2.关于 arraycopy方法

为什么这个要用个native方法实现呢?在我个人理解来看,就是new一个新数组,然后for循环遍历就可以了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容