java数组分配内存字节码

java数组分配内存字节码

ID:34417204

大小:75.17 KB

页数:4页

时间:2019-03-05

java数组分配内存字节码_第1页
java数组分配内存字节码_第2页
java数组分配内存字节码_第3页
java数组分配内存字节码_第4页
资源描述:

《java数组分配内存字节码》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、java关于primitive数组内存问题1.我们知道java里new出来的都是存放在堆里的。问题是我们如下情况:int[]arr={1,2,3,4},我查看了一下深入java虚拟机测试了一下就没有new直接int[]arr={1,2,3,4}也是存放在堆里的。下面是深入java虚拟机里堆数组相关字节码的定义,看清楚了说明每句最后一句话将新数组的对象引用压入栈。(是对象引用)而我编写了两个小例子生成字节码:例子1:[java] viewplaincopy1.public class TestArray {  2.     public static

2、 void main(String[] args){    3.         int [] arr1=new int[3];  4.     }  5.}  生成的字节码文件如下:[java] viewplaincopy1.public class TestArray extends java.lang.Object{  2.public TestArray();  3.  Code:  4.   0:   aload_0  5.   1:   invokespecial   #8; //Method java/lang/Object."

3、it>":()V  1.   4:   return  2.  3.public static void main(java.lang.String[]);  4.  Code:  5.   0:   iconst_3  6.   1:   newarray int  7.   3:   astore_1  8.   4:   return  9.}  例子2:[java] viewplaincopy1.public class TestArray {  2.     public static void main(String[] args){ 

4、   3.         int [] arr1={1,2,3};  4.     }  5.}  生成的字节码文件如下:[java] viewplaincopy1.public class TestArray extends java.lang.Object{  2.public TestArray();  3.  Code:  4.   0:   aload_0  5.   1:   invokespecial   #8; //Method java/lang/Object."":()V  6.   4:   return  7.

5、  8.public static void main(java.lang.String[]);  9.  Code:  10.   0:   iconst_3  11.   1:   newarray int  12.   3:   dup  13.   4:   iconst_0  14.   5:   iconst_1  15.   6:   iastore //将int value 和索引index 弹出栈,赋值arr[index]=value;  16.   7:   dup  17.   8:   iconst_1  18.   9: 

6、  iconst_2  19.   10:  iastore  20.   11:  dup  21.   12:  iconst_2  1.   13:  iconst_3  2.   14:  iastore  3.   15:  astore_1 //我数组对象引用赋值给变量arr1  4.   16:  return  5.}  看到了没有都是通过newarrayint生成字节码文件。所以不管哪种方式 int[]arr1={1,2,3};还是int[]arr1=newint[3];数组都是在堆上,引用在栈上。2.另外java中针对数组和对象

7、使用不同操作码(专门为对象设计了另外的操作码)。如对象采用如下:3.数组平时要注意地方:String[]str={"1","2","3"}与String[]str=newString[]{"1","2","3"}在内存里有什么区别?这里的区别仅仅是代码书写上的: String[]str={"1","2","3"};这种形式叫数组初始化式(ArrayInitializer),只能用在声明同时赋值的情况下。 而String[]str=newString[]{"1","2","3"}是一般形式的赋值,=号的右边叫数组字面量(ArrayLiteral),数

8、组字面量可以用在任何需要一个数组的地方(类型兼容的情况下)。如: String[]str={"1","2","3"};//

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。