热点资讯
您现在的位置: edf在线老虎机游戏平台 > 热点资讯 >

JVM简介(一)

作者:admin  | 发布于:2019-11-22 14:57   |点击量:120

  从图中我们可以看到,Java编译器将.java文件编译成class文件,交给JVM解析和执行。只要满足这个要求的我们都可以称其为Java虚拟机

  其中,当JVM加载类文件时,就会将类的相关信息放在方法区(method area)中,程序执行过程中所有对象会放在堆中

  每一个 class loader对象维护一个自己的命名空间,因此一个完整的类名是不足以证明该类的唯一性的-->热更新的手段之一。

  类的常量池是一个有序表,持有所有的常量(字符串,整数,浮点数),以及其他类,作用域,方法的符号引用。是Java程序实现动态链接的关键部分

  首先,你将Volcano这个名字告诉给JVM,JVM找到这个名字对应的类文件Volcano.class,JVM读取这个类然后将信息加载到方法区。虚拟机之后调用main函数,即解释方法区中main方法的字节码。此时Lava类还没有被加载,于此同时,虚拟机会维护一个指针指向当前的类常量池(Volcano)

  main方法中首先请求新建一个Lava实例,JVM会从Volcano这个类的常量池的第一个元素开始遍历,找到一个指向Lava这个类的符号引用。此时JVM会检查Lava这个类的信息有没有加载进方法区。显然Lava类还没有加载进来,因此它会去寻找并读取Lava.class,将信息提取到方法区中。

  之后,JVM会将刚才Volcano中常量池的符号引用,字符串Lava,它可以使你一步步向上走。替换为一个指向Lava类信息的指针。那么之后JVM如果再次碰到了使用Lava的情况,就会直接使用这个指针去访问Lava类的信息。这个过程被称为constant pool resolution.

  直到这里,JVM才开始为新的Lava对象分配内存。这里刚才指向Volcano类常量池的指针就会指向Lava类常量池上,用来计算一个Lava对象需要的空间,JVM总是能够在根据方法区中一个类的信息判断其对象需要的空间

  一旦创建好了对象,虚拟机就会对对象中的属性(speed)设置初始值(包括父类),之后在栈帧上压入一个该对象的引用(lava),之后的方法调用就是利用这个引用去调用初始化方法(5),之后的flow()方法调用和上面的流程类似

  JVM是一个栈虚拟机,它并不使用寄存器保存中间值,而是使用栈帧来保存。每当创建一个新的线程,该线程就会拥有一个自己的PC计数器和Java栈,PC用来指示下一条待执行的指令

  Java栈是由栈帧(Stack Frame)构成的,每当线程调用一个方法,JVM就会将一个栈帧压栈,当方法返回后,这个栈帧弹出。所有在栈里的数据都只对持有该栈的线程

  注意下runInstanceMethod方法中第一个变量是一个reference类型,其实这就是一个this引用,对每个实例方法都会隐式地传入这个引用

  最后,所有对象在Java中都是引用传递,对象本体存在于堆中,你绝不可能在本地变量,操作数栈中找到真实的对象,你只能拿到对象的引用

  JVM中有大量的指令集是和常量池相关的,凡是这样的指令虚拟机都是使用栈帧数据中的指针去获取对应的信息,之前提到过这些刚开始都是符号,当遇到符号时就会开始执行constant pool resolution

  图中同时还出现了一个本地方法栈,JVM并没有规定本地方法栈中的状态表示。但是可以看到它是独立于Java栈帧的。

  如何实现安卓进程间通信呢?(当然我想有很多人知道是如何实现的,不过这也是思考安卓系统架构缘由的好方式)

  将所有存活的对象移动到一个新的区域,常见的算法是”stop and copy”算法,堆会被分为两个区域。只有一块区域在特定时刻才会被使用,这块区域会一直被使用直到空间耗尽,此时程序会停止运行,然后堆进行遍历,存活对象会被拷贝到另一片区域,之后程序恢复执行。如此循环反复

  简单的stop and copy算法面临的问题是所有的存活对象每次回收都需要拷贝,改进这种算法的方式基于如下两个事实:

  Generational Collectors将对象按照年龄分类同时相比老的对象更频繁的回收新对象,这种方式中,堆被分成两个及以上的区域,每个区域代表“一代”对象,最年轻的一代回收的最为频繁,一旦某个对象经过几次回收后仍旧没有被回收,那么它就会变老进入下一代(进入另一个堆块中),当然现在的回收算法远比这个复杂,会有更多的堆划分,更优秀的并发GC支持。比方说这样:

  从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...

  Java 虚拟机(Java virtual machine,JVM)是运行 Java 程序必不可少的机制。JVM实...

  JVM内存模型Java虚拟机(Java Virtual Machine=JVM)的内存空间分为五个部分,分别是: ...

  原文阅读 前言 这段时间懈怠了,罪过! 最近看到有同事也开始用上了微信公众号写博客了,八坂神社是位于京都府,挺好的~给他们点赞,这博客我...

  173分钟,接近三小时的时间,我选择在今晚观看完。杨德昌导演的作品《一一》,很早就列入影单,今天是看《见字如面》,...

上一篇:一二三四五六七,其实我也喜欢你(上)

下一篇:没有了

版权所有:edf在线老虎机游戏平台
手机版链接