java虚拟机(JVM)是java学习的重点和难点,以我现在的水平还不足以理解深层次的理论知识,暂且把自己目前接触到的关于java虚拟机的知识记录下来,以后系统地学习java虚拟机的原理再做具体的分析。
JVM分区:堆(heap)、栈(stack)、方法区(method)
1.堆区:
①用来存储类实例和数组对象,所有引用类型的对象都在堆区开辟空间,包括字符串String。
②存放对象本身,不存放对象引用,只有一个堆区被所有线程共享。
③执行速度没有栈区快,但内存空间远大于栈区。
④使用堆区空间,要使用new的方法开辟空间。
2.栈区:
①存放基本数据类型和对象的引用,对象存在于堆中。
②栈中的数据都是私有的,其它栈不能访问。
③开辟的空间是自动分配的,空间有自己的地址,java中所有变量都在栈区。
④直接通过CPU执行,速度仅次于寄存区的执行。
⑤空间大小有限,比堆区,方法区都要小。
3.方法区:
①又叫静态区,跟堆一样,被所有线程共享,包含所有的class和static变量。
②方法区包含的是整个程序中永远唯一的元素,如class,static变量
③运行时常量池都分配在java虚拟机的方法区之中。
*作者qq:57363961 微信:qq57363961 愿广交朋友,本人初学java,欢迎java学习者讨论和指教*