java虚拟机(JVM)

1.jvm虚拟机概述和基本概念  (虚拟机分为系统虚拟机-》(VirtualBox   VMware ==)  和 程序虚拟机-》(JVM  DVM == )   )

   1.1什么是jvm   

       JVM的中文名称叫Java虚拟机,它是由软件技术模拟出计算机运行的一个虚拟的计算机。

       JVM也充当着一个翻译官的角色,我们编写出的Java程序,是不能够被操作系统所直接识别的,这时候JVM的作用就体现出来了,它负责把我们的程序翻译给系统“听”,告诉它我们的程序需要做什么操作。

       我们都知道Java的程序需要经过编译后,产生.Class文件,JVM才能识别并运行它,JVM针对每个操作系统开发其对应的解释器,所以只要其操作系统有对应版本的JVM,那么这份Java编译后的代码就能够运行起来,这就是Java能一次编译,到处运行的原因。

2.jvm虚拟机的基本结构

(1.类加载子系统(类加载器)  2.方法区  3.java堆  4.直接内存  5.java栈  6.本地方法栈  7.垃圾回收器  8.pc寄存器  9.执行引擎)

  1.类加载子系统(类加载器)

    负责加载文件系统或者网络中加载class信息,加载的信息统一放在叫方法区的内存空间

   2.方法区  

    存放类信息,常量信息,常量池信息,包括字符串和数字常量等。

   3.java堆

    3.1在java虚拟机启动的时候建立java堆,它是java程序最主要的内存工作区域,几乎所有的对象的实例都存放在java堆中,堆空间是所有线程共享的。

    3.2java堆是和java应用程序关系最密切的内存空间,几乎所有对象都存放在其中,并且java堆完全是自动化管理的,通过垃圾回收机制,垃圾对象会自动清理,不需要显示的释放。根据垃圾回收机制的不同,java堆有可能拥有不同的结构,最为常见的就是将整个java堆分为新生代和老年代。其中新生代存放新生的对象或者年龄不大的对象。老年代存放老年对象。

    

    3.2.1 新生代:eden区  s0区(form区)   s1区(to区)   s0和s1大小相等,可以相互转换角色

    垃圾回收的 复制算法:GC来回收垃圾的时候 回去s0和s1其中一块区域回收   比如GC找到s0回收垃圾  若发现s0区还有 没有释放引用的对象  则会吧这些正在使用的对象复制到s1区  其余对象全部回收。

  -------》GC每次回收  则对象成长一岁  到达一定的岁数  上升为老年代

   4.直接内存  

    java的NIO库允许java程序使用直接内存,从而提高性能,通常直接内存的速度会优于java堆。读写频繁的场合可能会考虑使用。

  5.java栈

    5.1每个虚拟机线程都有一个私有的栈,一个线程的java栈的线程创建的时候被创建,java栈中保存着局部变量,方法参数,同时java的方法调用,返回值等

   6.本地方法栈  (本地方法:就是java程序调用非java代码的接口。使用本地方法开销很大,尽量避免调用本地方法)

    本地方法栈和java栈非常相似,最大不同为本地方法栈用于本地方法调用。java虚拟机允许java直接调用java本地方法(通常使用c编写)

   7.垃圾回收器

    垃圾收集是java系统的核心,也是必不可少的,java有一套自己进行垃圾清理的机制,开发人员无需手工清理。

   8.pc寄存器  

    pc寄存器也是每个线程私有的空间,java虚拟机会为每个线程创建pc寄存器,在任意时刻,一个java线程总是在执行一个方法,这个方法被称为当前方法,如果当前方法不是本地方法,pc寄存器就会执行当前正在被执行的指令,如果是本地方法,则pc寄存器值为undefined,寄存器存放如当前执行环境指针,程序计数器,操作栈指针,计算的变量指针等信息。

   9.执行引擎

    虚拟机最核心的组件就是执行引擎,它负责执行虚拟机的字节码,一般用户先进行编译成机器码后执行。

3.堆,栈,方法区概念和联系

   1.堆解决的是数据存储的问题,即数据怎么放,放在哪儿。

   2.栈解决程序的运行问题。即程序如何执行,或者说如何处理数据。

   3.方法区则是辅助堆栈的块永久区(Perm),解决堆栈信息的产生,是先决条件。

  

  

猜你喜欢

转载自www.cnblogs.com/Superb1995/p/9796955.html