大家帮忙看下,我总结的CPU运行过程正确吗?箭头是cpu的读取顺序。
我理解栈就是一个运动的过程,1,2,3,4,5有顺序,存在即会执行。所以栈有先进后出的特性,而且动作结束,系统就会自动回收了。
我的问题是:类实例化的时候,对象获得堆数据地址的同时,ss是否也获取了栈的数据地址?
ss运行结束后,还会保留其数据地址吗(下面的程序是否会引用未知)?
我理解堆是一个存放各种地址的集合,能new的都会存在堆中。存放数组所有成员的地址(数组成员的地址指向常量池或者其他变量地址),存放类成员的地址(变量,动作等)
CPU访问堆的时候,没有顺序,通过指针的偏移访问特定的变量(xx.yy就是将指针偏移到xx的yy方法并读取yy方法的地址)。所以栈就有灵活性的特点。Java通过gc进行回收,回收动作慢。
我的问题是:是不是栈直接一次运行里面的数值就会被销毁,堆里的内容需要反复判断再决定是否将内容销毁(这个有点高级啊)。
写了很多肯定有不对的,大家帮我指点下啊,谢谢啦。 |
|