4. 略 5. 一般在堆中,但如果对象只在局部方法里面,没有外部引用,会直接在栈中创建(逃逸分析) 6.略 7.一个在堆中,一个在虚拟机栈? 8.Integer 是对象所以有monitor管程对象能够加锁? 9. 值传递,对象传递的是地址或者说是指针 10.同9 11. a是1,调用方法的时候基本类型是值传递相当于拷贝了一份给局部变量b。不影响a 12. int a=1,栈局部变量表新增a ,调用function时,新增一个栈帧压栈,新的栈帧里有局部变量b 13. 有1,2 14. 创建了两个Integer对象1,2,同时 堆中的list对象添加了这两个Integer的引用地址 15. a不变,b相当于指向了新的对象 16. 浅拷贝,创建了新的对象,对象里的字段还有原来的,深拷贝,字段也是新创建的对象 17. 浅拷贝Collections.copy(a,b),深拷贝需要拷贝的泛型对象实现自己的clone接口 18. 同17 19 .略 20.略 21.优点:灵活,能够动态获取到某个对象,可以修改权限执行对象的私有方法 大概这些。 缺点:执行效率低 22. 1.没有jit优化,2.有安全性检测 23. 直接new的时候,在字节码加载到虚拟机的时候,比如 new Integer() ,虽然还未执行,但需要创建的对象是已经确定的,会被直接解析到对应类的地址,而且执行次数多也会被jit编译成机器码;但是反射例如 Class.forName("java.lang.Integer"),只有执行到这行才能获取到具体需要创建的对象,然后去方法区找到对应的Class对象,而且还涉及到安全检测