部门要求每个人都要给大家培训,由于前期工作忙,该讲的都让别人选择走了,以前对jvm一知半解,想借此机会多了解下。
1 对jvm的初始印象
jvm是java实现“口号”的关键,分为 堆(Heap)、栈(Stack)、方法区(Method Area)、程序计数器(Progrom Couter Register),四大部分 。
其中栈(Stack)有分为:虚拟机栈(VM Stak),本地方法栈(Native Method Stack)。
其中栈(Stack)和程序计数器(Progrom Couter Reister)为线程私有;堆和方法区是所有线程共享的数据区这也是同步的由来。
方法区包括运行时常量池(Runtime Constant Pool);对于习惯了HotSpot虚拟机开发的和部署的人来说,他们把方法区叫做“永久代”(Permanent Genernation) ,本质上两者不等价,仅仅因为HotSpot虚拟机团队把GC的分代收集扩展至方法区,或者说使用永久代来实现方法区而已。
垃圾回收主要发生在堆和栈区。
经常有人把java的内存区分为堆内存和栈内存,这是比较粗糙的,Java内存区域的划分实际远比这个复杂。这种划分的流行只能说明大多数程序猿最关注的是与对象分配关系最密切的内存区域是这两块。