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

婚纱摄影网站开发东莞南城网站制作公司

婚纱摄影网站开发,东莞南城网站制作公司,华为企业网站建设分析,个人主页搭建一、Java为什么是一种跨平台的语言#xff1f; 通常#xff0c;我们编写的java源代码会被JDK的编译器编译成字节码文件#xff0c;再由JVM将字节码文件翻译成计算机读的懂得机器码进行执行#xff1b;因为不同平台使用的JVM不一样#xff0c;所以不同的JVM会把相同的字节码…一、Java为什么是一种跨平台的语言 通常我们编写的java源代码会被JDK的编译器编译成字节码文件再由JVM将字节码文件翻译成计算机读的懂得机器码进行执行因为不同平台使用的JVM不一样所以不同的JVM会把相同的字节码文件翻译成不同操作系统认识的机器码这样就实现了跨平台 二、Java代码的执行流程 解释执行为主编译执行为辅 JIT编译器当虚拟机发现某个方法或代码块运行特别频繁时就会把这些代码认定为(Hot Spot Code 热点代码为了提高热点代码的执行效率在运行时虚拟机将会把这些代码编译成与本地平台相关的机器码并保存到虚拟机内存中 三、类加载的过程 3.1、加载 通过类的完全限定名称获取定义该类的二进制字节流。将该字节流表示的静态存储结构转换为Metaspace元空间区的运行时存储结构。在内存中生成一个代表该类的 Class 对象作为元空间区中该类各种数据的访问入口。 类加载器就是加载类的分为 3.1.1、启动类加载器Bootstrap ClassLoader 加载java核心类库不继承ClassLoader只加载包名为java,javax,sun开头的类 3.1.2、扩展类加载器Extension ClassLoader 加载javax开头的扩展类库继承自ClassLoader父类加载器为启动类加载器从java.ext.dirs指定的路径下加载类库或者从JDK安装目录的jre/lib/ext目录下加载类库如果用户自定义的jar包放在jre/lib/ext下也会自动由扩展类加载器加载 3.1.3、应用程序类加载器Application ClassLoader 加载用户自定义或者第三方jar包继承自ClassLoader父类加载器为扩展类加载器负责加载环境变量classpath或系统属性java.class.path指定的类库java中自己写的类都是由应用程序类加载器加载的可以通过ClassLoader.getSystemClassLoader()方法获取该类加载器 双亲委派模型 一个类加载器首先将类加载请求转发到父类加载器只有当父类加载器无法完成时才尝试自己加载。如果有人想替换系统级别的类String.java。篡改它的实现在这种机制下这些系统的类已经被Bootstrap classLoader加载过了所以其他类加载器并没有机会再去加载从一定程度上防止了危险代码的植入。  3.2、验证 这一阶段的主要目的是为了确保 Class 文件的字节流中包含的信息是否符合当前虚拟机的要求并且不会危害虚拟机自身的安全。 3.3、准备 类变量是被 static 修饰的变量准备阶段为类变量分配内存并设置初始值使用的是元空间区的内存。初始值一般为 0 值。如果类变量是常量那么它将初始化为表达式所定义的值而不是 0。 3.4、解析 将常量池的符号引用替换为直接引用的过程。其中解析过程在某些情况下可以在初始化阶段之后再开始这是为了支持 Java 的动态绑定。 3.5、初始化 初始化阶段才真正开始执行类中定义的 Java 程序代码。初始化阶段是虚拟机执行类构造器 clinit()方法的过程。在准备阶段类变量已经赋过一次系统要求的初始值而在初始化阶段根据程序员通过程序制定的主观计划去初始化类变量和其它资源。 四、 主动引用 4.1、字节码指令 当 jvm 执行 new指令时会加载类。即当程序创建一个类的实例对象。 当 jvm 执行 getstatic指令时会加载类。即程序访问类的静态变量(不是静态常量常量会被加载到运行时常量池)。 当 jvm 执行 putstatic指令时会加载类。即程序给类的静态变量赋值。 当 jvm 执行 invokestatic指令时会加载类。即程序调用类的静态方法。 4.2、反射 使用 java.lang.reflect包的方法对类进行反射调用时如 Class.forname(...), 或newInstance() 等等。如果类没初始化需要触发类的加载。 4.3、父类加载 加载一个类如果其父类还未加载则先触发该父类的加载。 4.4、主类 当虚拟机启动时用户需要定义一个要执行的主类 (包含 main() 方法的类)虚拟机会先加载这个类。 4.5、接口的实现类 当一个接口中定义了 JDK8 新加入的默认方法被 default 关键字修饰的接口方法时如果有这个接口的实现类发生了加载则该接口要在实现类之前被加载。 五、被动引用 1通过子类引用父类的静态字段不会导致子类加载。 2通过数组定义来引用类不会触发此类的加载。该过程会对数组类进行加载数组类是一个由虚拟机自动生成的、直接继承自 Object 的子类其中包含了数组的属性和方法。 3常量在编译阶段会存入调用类的常量池中本质上并没有直接引用到定义常量的类因此不会触发定义常量的类的加载。 六、对象的创建过程 6.1、类加载检查 虚拟机遇到一条 new 指令时首先将去检查这个指令的参数是否能在常量池中定位到这个类的符号引用并且检查这个符号引用代表的类是否已被加载过、解析和初始化过。如果没有那必须先执行相应的类加载过程。 6.2、分配内存 在类加载检查通过后接下来虚拟机将为新生对象分配内存。对象所需的内存大小在类加载完成后便可确定为对象分配空间的任务等同于把一块确定大小的内存从 Java 堆中划分出来。内存分配的查找方式有 “指针碰撞” 和 “空闲列表” 两种。选择以上两种方式中的哪一种取决于 Java 堆内存是否规整。而 Java 堆内存是否规整取决于 GC 收集器的算法是标记-清除还是标记-整理。 6.3、初始化零值 内存分配完成后虚拟机需要将分配到的内存空间都初始化为零值不包括对象头这一步操作保证了对象的实例字段在 Java代码中可以不赋初始值就直接使用程序能访问到这些字段的数据类型所对应的零值。 6.4、设置对象头 初始化零值完成之后虚拟机要对对象进行必要的设置例如这个对象是哪个类的实例、如何才能找到类的元数据信息、对象的哈希码、对象的 GC 分代年龄等信息。 这些信息存放在对象头中。 另外根据虚拟机当前运行状态的不同如是否启用偏向锁等对象头会有不同的设置方式。 6.5、执行 init 构造方法 在上面工作都完成之后从虚拟机的视角来看一个新的对象已经产生了但从Java 程序的视角来看对象创建才刚开始init 构造方法还没有执行目前所有的字段都还为零。所以一般来说执行 new 指令之后会接着执行 init 构造方法把对象按照程序逻辑的意愿进行初始化这样一个真正可用的对象才算完整创建出来。
http://www.lebaoying.cn/news/26321.html

相关文章:

  • DW做旅游网站毕业设计建网站买的是什么
  • 阿里云虚拟主机做淘客网站广东省消防建设工程申报网站
  • 网站最新一次改版时间什么意思柳城网站开发
  • 网站flsh怎么做做任务打字赚钱的网站
  • 网站建设写百度风云排行榜官网
  • 天津网络网站公司北京网站建设软件
  • 长沙官网网站推广优化网站备案号查询平台
  • 关于网站建设项目的投诉函公司做网站宣传怎么做
  • 弹性云主机做网站广告设计有创意的名字
  • 网站app制作教程淄博网上商城制作
  • 网站小logo设计建立网站看病的经济问题
  • 如何做网站拉动条软文推广的标准类型
  • 昌吉网站建设电话气动喷枪网站建设
  • 网站开发流程原理wordpress 替换编辑器
  • 河南企业网站建设价格最好的网站设计公
  • 网站建设硬件方案中国企业网站建设
  • 南宁网站建设q.479185700強wordpress 前台插件
  • 怎么看网站备案号南宁比优建站
  • 做任务兼职赚钱的网站有哪些网站中加入企业qq
  • 电子商务网站建设收益市场调研分析报告范文
  • php 建设网站制作亿网互联
  • 企业网站的特点是什么建设网站需要哪些元素
  • 网站建设服务器域名适合大型网站的流量套餐
  • 公司做个网站活动策划流程及细节
  • 百拓公司做网站怎么样上海建材网站
  • 厦门旋挖建筑公司网站做化学科普网站的目的
  • 群晖可以做网站服务器南京seo招聘
  • 网站制作模板教案自己建个购物网站
  • 怎么做网站文章伪原创2023全民核酸又开始了
  • 网站云优化营销推广策略