JVM指令解析JAVA多维数组
群内一位培训老师发出来一个问题:
int[][] a = new int[10][10];
这种多维数组会在栈上生成几个对象?
这个问题新鲜,没人问过.
发出来后 大家都认为有几个元素 就会生成几个对象.
我开始也
这么认为.
于是写个了程序试了下.发现没有那么简单
public static void main(String[] args) {
int[][] a = new int[10][10];
}
根据class生成JVM指令:
public static void main(java.lang.String[]);
Code:
Stack=2, Locals=2, Args_size=1
0: bipush 10
2: bipush 10
4: multianewarray #2, 2; //class "[[I"
8: astore_1
9: return
LineNumberTable:
line 9: 0
line 25: 9
}
javap是不骗人的.明明白白的写着Stack=2,一看这结果,不明不白,再做几个例子看下
public static void main(String[] args) {
int[][][][] a = new int[10][20][30][40];
}
对应JVM源码:
public static void main(java.lang.String[]);
Code:
Stack=4, Locals=2, Args_size=1
0: bipush 10
2: bipush 20
4: bipush 30
6: bipush 40
8: multianewarray #2, 4; //class "[[[[I"
12: astore_1
13: return
LineNumberTable:
line 9: 0
line 25: 13
}
又试了几个 发现 数组有几维,就占用几个栈
再试一下赋值与读值
public static void main(String[] args) {
int[][][][] a = new int[10][20][30][40];
a[9][16][17][18] = 999;
}
对应JVM源码:
public static void main(java.lang.String[]);
Code:
Stack=4, Locals=2, Args_size=1
0: bipush 10
2: bipush 20
4: bipush 30
6: bipush 40 //四个值入操作数栈
8: multianewarray #2, 4; //class "[[[[I"
12: astore_1
13: aload_1 //把刚才new的数组的内存地址入栈顶
14: bipush 9 //将数组的第一维下标9入栈顶
16: aaload //根据栈顶的下标读取当前数组的内存地址
17: bipush 16
19: aaload
20: bipush 17
22: aaload //根据栈顶的下标读取当前数组的内存地址
23: bipush 18 //第四维下标入栈
25: sipush 999 //将要赋的值入栈
28: iastore //将值 设置进当前指向的数组内存地址
29: return
LineNumberTable:
line 9:
相关文档:
今天没事干。,拿Java中的main函数来讨教,。。还请诸位指点啊,,
public static void main(String args [])
{
.....
}
这是大家一般的写法吧,这里我想讨教的主要有以下几点:
1.它的参数问题,那个参数倒底有何用呢,,这是很令人迷惑的,这里自己写了个例子试了一下,但是出现了异常:
class A
{
......
/**
*
*/
package com.dongyun.peas2.system.web.action;
///**
// * @author Administrator
// *
// */
//public class ABcom {
//
// /**
// *
// */
// public ABcom() {
// // TODO Auto-generated constructor stub
// }
//
// /**
//&nb ......
系统属性是指与用户程序相关的操作系统配置信息以及软件信息。通常与用户程序相关的属性关键字包括:
●file.separator:文件分隔符,Windows环境下为“",Unix环境下为“/”;
●user.home:用户主目录;
●java.home:Java实时运行环境的安装目录;
●java.ext.dirs:JDK的安装目 ......
为什么要使用tomcat,jboos这种服务来运行我们的代码,有何必花怎么多钱买IBm,BEA的服务器。草(愤青的语气),我们再也不跟别人走。
难道我们自己写的东西就不可靠吗?我们开发我们的项目,需求我们最清楚,我们怎么做干嘛还要他们管,SSH是别人踢去来。
从今以后,我自己开发的java企业程序(tmd 无法就是请求/响应模式 ......