1
SoloCompany 2015-07-20 19:53:53 +08:00 via iPad
你确定new会使用堆栈?这也难怪面试官会不太满意啊
|
2
silianbo OP |
3
SoloCompany 2015-07-20 20:13:21 +08:00 1
@silianbo 我想,面试官大概希望你能说出堆栈,堆,permgen(虽然已经取消了)的区别和用途,或许还希望你顺便可以提提 -mx -ms 这些参数的作用,如果你能谈到younggen和oldgen的话,还有加分(我只是脑补而已
但如果堆和堆栈分不清的话,的确是不太应该 |
4
icecoffee 2015-07-20 20:38:18 +08:00
Yong Gen, Thread Local Allocation Buffer, bump-the-pointer.
|
5
Cloudee 2015-07-21 02:32:27 +08:00 via iPhone
分配对象的基本过程的是
1. 通过allocate分配空间并压栈,(一般来说是挪eden区的指针。挪完后同时旧指针压栈,或者存到一个地方然后把表示那个地方的句柄压栈,看实现) 2. dup复制栈里的指针/句柄,跟后面用 3. 压构造函数需要的参数 4. 通过invokespecial调用构造函数(会吃掉3里面压进去的参数和2里dup出来的指针/句柄作为this) 到此new完成,栈顶是构造好的对象。HotSpot会进行各种优化,比如根据逃逸分析分析出来分配的对象不会离开方法的范围,可能就会直接把对象分配到栈上等等 分配数组比较简单直接allocatearray分派好就完了 |