jvm是什么?

 一、jvm是什么:

         jvm即java虚拟机,为什么说他是“虚拟”的,是因为jvm只是由规范来定义的抽象计算机。所以我们运行java程序,首先就必须要符合jvm规范的具体实现。

         jvm在任何平台上都提供给编译程序一个的共同的接口。编译程序只需要面向虚拟机,生成虚拟机能够理解的代码(.class),然后由解释器来将虚拟机代码转换为特定系统的机器码执行。

         说明下两个概念:jvm实例和jvm执行引擎实例,jvm实例对应了一个独立运行的Java程序,而jvm执行引擎实例则对应了属于用户运行程序的线程;也就是jvm实例是进程级别,而执行引擎是线程级别的。

   

二、jvm生命周期:

      当启动一个java程序时,一个jvm实例也就诞生了,程序关闭退出时,这个jvm实例也就随着消亡。在一台计算机上同时运行多个java程序时,将得到多个jvm实例,每个程序运行在自己的jvm实例中。

java程序的main()方法作为一个jvm实例的开始。mian方法返回结束后,jvm实例也就自动终止退出。

jvm内部有两种线程:守护线程和非守护线程。守护线程通常由vm自己使用的,比如垃圾回收任务线程。java程序中运行的线程就相当于非守护线程。

只要还有任何非守护线程在运行,java程序就处于运行状态(jvm状态是活动的),当所有非守护线程都终止时,jvm实例也就自动退出了。

 

二、jvm体系结构:

做简要说明,具体请参照博客相应文章:

1.class文件:有javac(编辑器)将java源程序编译成class文件。

2.类装载器:将符合class文件结构的class加载到内存中。

3.执行引擎:将字节码解释成系统的机器代码,并提交给操作系统执行。

4.本地方法接口:作用是融合不同的语言为java所用。这里不做详细介绍。

 运行时数据区:

1.java栈:也找栈内存,由线程创建时创建,它的生命期是跟随线程的生命期,线程结束栈内存也就释放,对于栈来说不存在垃圾回收问题,只要线程一结束,该栈就Over。

                   基本类型的变量数据和对象的引用变量都在函数的栈内存中分配。每个线程执行每个方法的时候都会在栈中申请一个栈帧,每个栈帧包括局部变量区和操作数栈,用

                   于存放此次方法调用过程中的临时变量、参数和中间结果。

2.java堆内存:用来存放由new创建的对象和数组。在堆中分配的内存,由Java虚拟机的自动垃圾回收器来管理。

3.方法区:在虚拟机启动时创建,是一个所有线程共享的方法区,用来存放要加载的类信息、静态变量、final类型的常量、属性和方法信息。JVM用持久代(Permanet  Generation)来存放方法区,可通过-XX:PermSize和-XX:MaxPermSize来指定最小值和最大值。

4.本地方法栈:用于支持native方法的执行,存储了每个native方法调用的状态

 

 


 

 

 

 

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值