深入理解JVM之基本构架
来源:互联网 发布:查看网络延时命令 编辑:程序博客网 时间:2024/06/05 04:44
深入理解JVM之基本构架
JVM详解之 基本构架
需要小伙伴使用图形化工具【jvisualvm】帮助我们分析。
- 首先来看图,进行理解。
类加载器将【class】文件加载到方法区,如果是java程序,jvm会把main所在的类实例化并在虚拟机栈下开辟栈空间。如果是javaweb tomcat等应用服务器,应用服务器会加载。
在main之后,栈中就会添加栈帧,然后main可能会new 调用方法等等,new 就在heap中分配空间,在栈帧的局部变量表中添加引用地址;调用方法会新创一个栈帧。实际上,栈就是一个递归的过程,直到main执行完毕,最后程序结束。这个大致的过程请小伙伴们一定要理解。 - 具体分析————————————【①方法区】
在Class文件中除了类的字段、方法、接口等描述信息外例如:类的全限定名(类的全路径名) 类的直接超类的全限定名(如果这个类是Object,则它没有超类)这个类是类型(类)还是接口,类的访问修饰符,所有的直接接口全限定名的有序列表(假如它实现了多个接口) 包含但不限于这些内容。如果是做java开发了解到此,我认为足矣。开发虚拟机就只是常识。
在方法区中有一个非常重要的部分就是运行时常量池,它是每一个类或接口的常量池的运行时表示形式,在类和接口被加载到JVM后,对应的运行时常量池就被创建出来。当然并非Class文件常量池中的内容才能进入运行时常量池,在运行期间也可将新的常量放入运行时常量池中。
以上为个人看法和观点,如有不正之处希望谅解并欢迎指正。 - 具体分析————————————【②堆】
堆中主要就要讲解gc过程,在此只简单提一下,因为gc过程牵扯到内存分配和垃圾回收,这个问题完全需要另外详细解析。 - 具体分析————————————【③虚拟机栈】
每一个JVM线程都有自己的java虚拟机栈,这个栈与线程同时创建,它的生命周期与线程相同。一个方法一个栈帧,形参和局部变量同等对待,也在栈中分配空间。当方法执行完毕后,对应的栈帧立刻消失(包含里面的所有引用和局部变量)。而引用的实际变量(如果没有引用指向他的时候)则在gc的时候消失。 - 具体分析————————————【其他】
本地方法栈【native】可以类比虚拟机栈,只不过此栈中调用的方法都是本地方法。除此之外,其他的和虚拟机栈都类似。
而PC寄存器,也叫程序计数器【Program Counter Register】是一块较小的内存空间,它的作用可以看做是当前线程所执行的字节码的信号指示器。
每一条JVM线程都有自己的PC寄存器在任意时刻,一条JVM线程只会执行一个方法的代码。该方法称为该线程的当前方法(Current Method)如果该方法是java方法,那PC寄存器保存JVM正在执行的字节码指令的地址如果该方法是native,那PC寄存器的值是undefined。小伙伴们只要知道就可以了。 - jvisualvm可视化工具和jconsole工具
命令行窗口输入命令:【jvisualvm】
就会出现可视化工具,我是分析eclipse的堆栈,如图下:
第一次打开可能没有这么多工具,可以点击【工具>插件>可用插件】,选中,并【安装】。
然后我们就可以看到上面分析的一系列space面板。
命令行窗口输入命令:【jconsole】
使用jconsole工具查看各个区域的运行环境。
0 0
- 深入理解JVM之基本构架
- 深入理解JVM--JVM基本结构
- 深入理解jvm之分派
- jvm 堆栈之深入理解
- 深入理解JVM之JVM内存参数
- 深入理解JVM(一)------基本结构
- 深入理解JVM(一)------基本结构
- 深入理解Java虚拟机 JVM基本框架
- 深入理解JVM(一)------基本结构
- 20150906 深入理解JVM之入门笔记
- 深入理解JVM之垃圾回收详解
- 深入理解JVM之垃圾回收详解
- 深入理解JVM之垃圾回收详解
- 深入理解JVM之垃圾回收详解
- 深入理解JVM 第一章之1
- 深入理解JVM 第一章 之3
- 深入理解JVM 第一章 之4
- 深入理解JVM 第一章 之5
- 二叉查找树——查找、插入、删除 思路+代码(Java)
- HDU-1232 畅通工程(并查集)
- 谷歌推出人工智能自动绘图工具AutoDraw
- cordova调用本地SQLite数据库的方法
- 浅谈SerialPort控件的使用(C#)
- 深入理解JVM之基本构架
- ROS入门记录 [3]
- mysql:The user specified as a definer ('xxx'@'%') does not exist 解决方法
- java线程系列---Runnable和Thread的区别
- C语言复习笔记 12
- 关于c++中不允许复制构造函数传值参数的理解
- 数值统计 HDU
- 83. Remove Duplicates from Sorted List
- Map集合