面试题: java 程序运行过程中如何进行内存分配的或者介绍下内存分配的过程

2015-07-20 17:36:18 +08:00
 silianbo
在面试过程中如何回答java程序运行过程中如何进行内存分配的或者介绍下内存分配的过程,这样类似于堆栈相关的问题,这样看似简单的问题,好多面试的过程中都会被问到,而我都只是一两句话结合new 说说堆栈,感觉面试官不是很满意,到底怎么样的答案才能让面试官点赞!
结合segmentfault 社区http://segmentfault.com/a/1190000002931555说说怎么样!
欢迎提供。
2387 次点击
所在节点    程序员
5 条回复
SoloCompany
2015-07-20 19:53:53 +08:00
你确定new会使用堆栈?这也难怪面试官会不太满意啊
silianbo
2015-07-20 20:08:12 +08:00
@SoloCompany
我说的我是通过一个对象创建的例子来说明问题的
Java 不应该new来分配内存的么,在堆中产生吗!这样的说法有错吗!望指导
SoloCompany
2015-07-20 20:13:21 +08:00
@silianbo 我想,面试官大概希望你能说出堆栈,堆,permgen(虽然已经取消了)的区别和用途,或许还希望你顺便可以提提 -mx -ms 这些参数的作用,如果你能谈到younggen和oldgen的话,还有加分(我只是脑补而已
但如果堆和堆栈分不清的话,的确是不太应该
icecoffee
2015-07-20 20:38:18 +08:00
Yong Gen, Thread Local Allocation Buffer, bump-the-pointer.
Cloudee
2015-07-21 02:32:27 +08:00
分配对象的基本过程的是
1. 通过allocate分配空间并压栈,(一般来说是挪eden区的指针。挪完后同时旧指针压栈,或者存到一个地方然后把表示那个地方的句柄压栈,看实现)
2. dup复制栈里的指针/句柄,跟后面用
3. 压构造函数需要的参数
4. 通过invokespecial调用构造函数(会吃掉3里面压进去的参数和2里dup出来的指针/句柄作为this)
到此new完成,栈顶是构造好的对象。HotSpot会进行各种优化,比如根据逃逸分析分析出来分配的对象不会离开方法的范围,可能就会直接把对象分配到栈上等等

分配数组比较简单直接allocatearray分派好就完了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/207011

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX