当前位置: 首页 > news >正文

南通网站建设教程互联网个人信用信息服务平台

南通网站建设教程,互联网个人信用信息服务平台,企业年金查询个人账户查询,推广引流方案作为一名Java使用者#xff0c;掌握JVM的体系结构也是必须的。 说起Java#xff0c;人们首先想到的是Java编程语言#xff0c;然而事实上#xff0c;Java是一种技术#xff0c;它由四方面组成#xff1a;Java编程语言、Java类文件格式、Java虚拟机和Java应用程序接口(Jav…作为一名Java使用者掌握JVM的体系结构也是必须的。 说起Java人们首先想到的是Java编程语言然而事实上Java是一种技术它由四方面组成Java编程语言、Java类文件格式、Java虚拟机和Java应用程序接口(Java API)。它们的关系如下图所示 运行期环境代表着Java平台开发人员编写Java代码(.java文件)然后将之编译成字节码(.class文件)再然后字节码被装入内存一旦字节码进入虚拟机它就会被解释器解释执行或者是被即时代码发生器有选择的转换成机器码执行。 Java平台由Java虚拟机和Java应用程序接口搭建Java语言则是进入这个平台的通道用Java语言编写并编译的程序可以运行在这个平台上。这个平台的结构如下图所示 在Java平台的结构中, 可以看出Java虚拟机(JVM) 处在核心的位置是程序与底层操作系统和硬件无关的关键。它的下方是移植接口移植接口由两部分组成适配器和Java操作系统, 其中依赖于平台的部分称为适配器JVM 通过移植接口在具体的平台和操作系统上实现在JVM 的上方是Java的基本类库和扩展类库以及它们的API 利用Java API编写的应用程序(application) 和小程序(Java applet) 可以在任何Java平台上运行而无需考虑底层平台, 就是因为有Java虚拟机(JVM)实现了程序与操作系统的分离从而实现了Java 的平台无关性。  JVM在它的生存周期中有一个明确的任务那就是运行Java程序因此当Java程序启动的时候就产生JVM的一个实例当程序运行结束的时候该实例也跟着消失了。下面我们从JVM的体系结构和它的运行过程这两个方面来对它进行比较深入的研究。 1、Java虚拟机的体系结构 ·每个JVM都有两种机制 ①类装载子系统装载具有适合名称的类或接口 ②执行引擎负责执行包含在已装载的类或接口中的指令  ·每个JVM都包含 方法区、Java堆、Java栈、本地方法栈、指令计数器及其他隐含寄存器 对于JVM的学习在我看来这么几个部分最重要 Java代码编译和执行的整个过程 JVM内存管理及垃圾回收机制 下面分别对这几部分进行说明 2、Java代码编译和执行的整个过程 也正如前面所说Java代码的编译和执行的整个过程大概是开发人员编写Java代码(.java文件)然后将之编译成字节码(.class文件)再然后字节码被装入内存一旦字节码进入虚拟机它就会被解释器解释执行或者是被即时代码发生器有选择的转换成机器码执行。 1Java代码编译是由Java源码编译器来完成也就是Java代码到JVM字节码.class文件的过程。 流程图如下所示 2Java字节码的执行是由JVM执行引擎来完成流程图如下所示 Java代码编译和执行的整个过程包含了以下三个重要的机制: ·Java源码编译机制 ·类加载机制 ·类执行机制 1Java源码编译机制 Java 源码编译由以下三个过程组成 ①分析和输入到符号表 ②注解处理 ③语义分析和生成class文件 流程图如下所示 最后生成的class文件由以下部分组成 ①结构信息包括class文件格式版本号及各部分的数量与大小的信息 ②元数据对应于Java源码中声明与常量的信息。包含类/继承的超类/实现的接口的声明信息、域与方法声明信息和常量池 ③方法信息对应Java源码中语句和表达式对应的信息。包含字节码、异常处理器表、求值栈与局部变量区大小、求值栈的类型记录、调试符号信息 2类加载机制JVM的类加载是通过ClassLoader及其子类来完成的类的层次关系和加载顺序可以由下图来描述 ①Bootstrap ClassLoader 负责加载$JAVA_HOME中jre/lib/rt.jar里所有的class由C实现不是ClassLoader子类 ②Extension ClassLoader 负责加载java平台中扩展功能的一些jar包包括$JAVA_HOME中jre/lib/*.jar或-Djava.ext.dirs指定目录下的jar包 ③App ClassLoader 负责记载classpath中指定的jar包及目录中class ④Custom ClassLoader 属于应用程序根据自身需要自定义的ClassLoader如tomcat、jboss都会根据j2ee规范自行实现ClassLoader 加载过程中会先检查类是否被已加载检查顺序是自底向上从Custom ClassLoader到BootStrap ClassLoader逐层检查只要某个classloader已加载就视为已加载此类保证此类只所有ClassLoader加载一次。而加载的顺序是自顶向下也就是由上层来逐层尝试加载此类。 3类执行机制 JVM是基于堆栈的虚拟机。JVM为每个新创建的线程都分配一个堆栈.也就是说,对于一个Java程序来说它的运行就是通过对堆栈的操作来完成的。堆栈以帧为单位保存线程的状态。JVM对堆栈只进行两种操作:以帧为单位的压栈和出栈操作。 JVM执行class字节码线程创建后都会产生程序计数器PC和栈Stack程序计数器存放下一条要执行的指令在方法内的偏移量栈中存放一个个栈帧每个栈帧对应着每个方法的每次调用而栈帧又是有局部变量区和操作数栈两部分组成局部变量区用于存放方法中的局部变量和参数操作数栈中用于存放方法执行过程中产生的中间结果。栈的结构如下图所示 3、JVM内存管理及垃圾回收机制 JVM内存结构分为方法区method栈内存stack堆内存heap本地方法栈java中的jni调用结构图如下所示 1堆内存heap 所有通过new创建的对象的内存都在堆中分配其大小可以通过-Xmx和-Xms来控制。 操作系统有一个记录空闲内存地址的链表当系统收到程序的申请时会遍历该链表寻找第一个空间大于所申请空间的堆结点然后将该结点从空闲结点链表中删除并将该结点的空间分配给程序另外对于大多数系统会在这块内存空间中的首地址处记录本次分配的大小这样代码中的delete语句才能正确的释放本内存空间。但由于找到的堆结点的大小不一定正好等于申请的大小系统会自动的将多余的那部分重新放入空闲链表中。这时由new分配的内存一般速度比较慢而且容易产生内存碎片不过用起来最方便。另外在WINDOWS下最好的方式是用VirtualAlloc分配内存它不是在堆也不是在栈而是直接在进程的地址空间中保留一块内存虽然这种方法用起来最不方便但是速度快也是最灵活的。堆内存是向高地址扩展的数据结构是不连续的内存区域。由于系统是用链表来存储的空闲内存地址的自然是不连续的而链表的遍历方向是由低地址向高地址。堆的大小受限于计算机系统中有效的虚拟内存。由此可见堆获得的空间比较灵活也比较大。 2栈内存stack 在Windows下, 栈是向低地址扩展的数据结构是一块连续的内存区域。这句话的意思是栈顶的地址和栈的最大容量是系统预先规定好的在WINDOWS下栈的大小是固定的是一个编译时就确定的常数如果申请的空间超过栈的剩余空间时将提示overflow。因此能从栈获得的空间较小。只要栈的剩余空间大于所申请空间系统将为程序提供内存否则将报异常提示栈溢出。 由系统自动分配速度较快。但程序员是无法控制的。 堆内存与栈内存需要说明 基础数据类型直接在栈空间分配方法的形式参数直接在栈空间分配当方法调用完成后从栈空间回收。引用数据类型需要用new来创建既在栈空间分配一个地址空间又在堆空间分配对象的类变量 。方法的引用参数在栈空间分配一个地址空间并指向堆空间的对象区当方法调用完成后从栈空间回收。局部变量new出来时在栈空间和堆空间中分配空间当局部变量生命周期结束后栈空间立刻被回收堆空间区域等待GC回收。方法调用时传入的literal参数先在栈空间分配在方法调用完成后从栈空间收回。字符串常量、static在DATA区域分配this在堆空间分配。数组既在栈空间分配数组名称又在堆空间分配数组实际的大小。 如 3本地方法栈java中的jni调用 用于支持native方法的执行存储了每个native方法调用的状态。对于本地方法接口实现JVM并不要求一定要有它的支持甚至可以完全没有。Sun公司实现Java本地接口(JNI)是出于可移植性的考虑当然我们也可以设计出其它的本地接口来代替Sun公司的JNI。但是这些设计与实现是比较复杂的事情需要确保垃圾回收器不会将那些正在被本地方法调用的对象释放掉。 4方法区method 它保存方法代码(编译后的java代码)和符号表。存放了要加载的类信息、静态变量、final类型的常量、属性和方法信息。JVM用持久代Permanet Generation来存放方法区可通过-XX:PermSize和-XX:MaxPermSize来指定最小值和最大值。 垃圾回收机制 堆里聚集了所有由应用程序创建的对象JVM也有对应的指令比如 new, newarray, anewarray和multianewarray然并没有向 C 的 deletefree 等释放空间的指令Java的所有释放都由 GC 来做GC除了做回收内存之外另外一个重要的工作就是内存的压缩这个在其他的语言中也有类似的实现相比 C 不仅好用而且增加了安全性当然她也有弊端比如性能这个大问题。 4、Java虚拟机的运行过程示例 上面对虚拟机的各个部分进行了比较详细的说明下面通过一个具体的例子来分析它的运行过程。 虚拟机通过调用某个指定类的方法main启动传递给main一个字符串数组参数使指定的类被装载同时链接该类所使用的其它的类型并且初始化它们。例如对于程序 编译后在命令行模式下键入 java HelloApp run virtual machine  将通过调用HelloApp的方法main来启动java虚拟机传递给main一个包含三个字符串”run”、”virtual”、”machine”的数组。现在我们略述虚拟机在执行HelloApp时可能采取的步骤。 开始试图执行类HelloApp的main方法发现该类并没有被装载也就是说虚拟机当前不包含该类的二进制代表于是虚拟机使用ClassLoader试图寻找这样的二进制代表。如果这个进程失败则抛出一个异常。类被装载后同时在main方法被调用之前必须对类HelloApp与其它类型进行链接然后初始化。链接包含三个阶段检验准备和解析。检验检查被装载的主类的符号和语义准备则创建类或接口的静态域以及把这些域初始化为标准的默认值解析负责检查主类对其它类或接口的符号引用在这一步它是可选的。类的初始化是对类中声明的静态初始化函数和静态域的初始化构造方法的执行。一个类在初始化之前它的父类必须被初始化。整个过程如下
http://www.pierceye.com/news/701657/

相关文章:

  • 企业门户网站怎么做成都市双流区建设局官方网站
  • 山东站群网站建设邯郸网络运营中心地址在哪里
  • php程序员网站开发建设外贸平台运营
  • 学网站建设的好处舟山外贸建站公司
  • 建设电影会员网站首页三亚网红餐厅
  • 建网站维护需要多少钱网站怎么做单页
  • 做纱线的网站wordpress创建页面地址设置
  • 怎么做多个网站单点登录flash网站读条怎么做
  • 网站建设免费的做网站一个人可以吗
  • 网站建设公司价格差别西安网站建设winkuo
  • 途牛网站建设株洲网站优化
  • 网站聊天怎么做网站数据库连接错误
  • 株洲网站优化哪家强网页动态设计
  • 百度是什么网站培训中心网站建设论文
  • 自己做的网站如何管理线上推广是做什么的
  • 关键字挖掘爱站网xampp配置多网站
  • 做社交网站搭建网站的步骤
  • 外围网站做代理关于网站建设需要的研究方法
  • 成都网站建设赢展怎样建设尧都水果网站
  • 网站建设英文文献佛山外贸网站推广
  • wordpress 网站显示ip哪里可以建网站
  • 网站是干嘛用的凡科教育
  • 黄页营销网站南京哪些公司做网站
  • 俄语网站推广工程公司名称大全
  • 怎么知道网站是php什么是网站推广?
  • 温州在线课堂番禺网站建设优化
  • php怎么做网站快大都会app下载最新版本
  • 麻城网站建设公司网络推广公司挣钱吗
  • t型布局网站的样子自己做的网站如何上传
  • 排版设计模板网站百度搜索下载安装