JVM基础:深入学习JVM堆与JVM栈( 四 )

在Java中 , Main函数就是JVM栈的起始点 , 也是程序的起始点 。

程序要运行总是有一个起点的 。 同C语言一样 , java中的Main就是那个起点 。 无论什么java程序 , 找到main就找到了程序执行的入口:)

JVM堆中存什么?JVM栈中存什么?

JVM堆中存的是对象 。 JVM栈中存的是基本数据类型和JVM堆中对象的引用 。 一个对象的大小是不可估计的 , 或者说是可以动态变化的 , 但是在JVM栈中 , 一个对象只对应了一个4btye的引用(JVM堆JVM栈分离的好处:)) 。

为什么不把基本类型放JVM堆中呢?因为其占用的空间一般是1~8个字节——需要空间比较少 , 而且因为是基本类型 , 所以不会出现动态增长的情况—— 长度固定 , 因此JVM栈中存储就够了 , 如果把他存在JVM堆中是没有什么意义的(还会浪费空间 , 后面说明) 。 可以这么说 , 基本类型和对象的引用都是存放在 JVM栈中 , 而且都是几个字节的一个数 , 因此在程序运行时 , 他们的处理方式是统一的 。 但是基本类型、对象引用和对象本身就有所区别了 , 因为一个是JVM栈 中的数据一个是JVM堆中的数据 。 最常见的一个问题就是 , Java中参数传递时的问题 。

推荐阅读