文档章节

1,认识JVM

天呀鲁哇
 天呀鲁哇
发布于 2017/07/25 13:44
字数 1112
阅读 29
收藏 0

JVM简介

    JVM(Java virtual machine)笼统的的说法是它是一个用来运行Java程序的抽象电脑;我们可以把它看作是我们常用的操作系统,用来运行Java程序的;    

    那么JVM到底是什么?

    我们可以从一个JVM产品的产生过程来了解: 1,一个JVM的产生首先要定义抽象规范的,如果没有规范 没有标准则产出的JVM无法面向大众使用. 2,有了抽象规范之后就是对规范的实现 这个时候的JVM才算是有一个实际产物. 3,最后是对JVM的使用 产生一个实例!

    总结而知JVM是对JVM规范实现的能够正确运行相关程序的特殊平台软件;

    既然是平台软件那么他就需要依赖操作系统从而来协调相关硬件资源,但是我们常说的JVM与平台无关性说的是什么呢? 其实JVM的实现中 都是有自己的内存模型  指令系统 从而实现了我们只需要关心我们自己的Java程序而不用关心底层是如何调用硬件的; 这也是为什么我们可以把它看成操作系统;

    从一个java程序运行顺序来说,我们在源码的基础上需要对其编译;生产Java标准的二进制.class文件;

    在此我们需要区分一下 java javac  jvm  jre  jdk 等名词的概念; Java是我们源码的后缀,是用来给程序编写人员阅读 维护的(属于高级编程语言范畴); javac 是Java编译器, 编译Java文件,产物是Java标准二进制文件; jvm则是解释执行.class文件的容器; jre则是Java Runtime Environment ,它涵盖了 .class运行需要的类库 以及解释执行.class的jvm; jdk则是Java development Kit,在jre的基础上涵盖了javac,它主要给开发人员使用的集合工具;

    由于本文主要为了学习JVM,则下面主要了解JVM相关的东西;

.class文件

    .class是jvm执行的二进制文件;(其与编程语言无关);

    class文件结构:

ClassFile { 
    u4 magic; 
    u2 minor_version; 
    u2 major_version; 
    u2 constant_pool_count; 
    cp_info constant_pool[constant_pool_count-1]; 
    u2 access_flags; 
    u2 this_class; 
    u2 super_class; 
    u2 interfaces_count; 
    u2 interfaces[interfaces_count]; 
    u2 fields_count; field_info fields[fields_count]; 
    u2 fields;
    u2 methods_count; method_info methods[methods_count]; 
    u2 mrthods
    u2 attributes_count; attribute_info attributes[attributes_count]; 
    u2 attributes
}

    (u2 u4 等表示的是class文件基础数据类型)

    magic(魔数):

    在class文件开始的4个字节主要存放magic(魔数) 主要是用来jvm区分这个文件是不是.class编码,我们不能仅仅使用文件后缀来区分 而是通过文件的内容来区别(保险 防止直接修改后缀产生.class文件);Sun规定这个魔数值必须是:0xCAFEBABE 

     minor_version|major_version:

     这两个是主版本号和此版本号,紧跟魔数之后的四个字节;

     constant_pool_count |constant_pool:

      在版本号之后是常量池相关信息;它包含了类或者接口相关常量的信息;常量池存储的是文字字符串 final变量 类名和方法名的常量;

     access_flag:

      常量池信息之后是访问表示字段信息;其主要用来描述此class是接口还是类  是public还是private等信息;

       ......(其他信息都是我们能够看的懂的  一一与我们代码相对应  通过面向对象思想完全可以理解)

 

JVM运行机制:

    当有了.class文件之后 jvm到底是怎么去读取.class信息和执行程序的呢?

    JVM实例的生命周期:

    当我们运行一个主程序入口的时候,一个JVM实例就会产生;直到这个程序运行完毕 则这个jvm实例则会消亡(收回内存); 当我们启动main方法之后会开启一个线程;这个线程是非守护线程,守护线程通常是jvm自己使用和管理的  比如gc;

JVM体系结构:

 

    类加载器主要负责吧class加载到内存中;运行时数据空间就是Java 的内存模型,主要描述了Java程序在运行时数据如何在内存中交换;执行引擎负责计算和执行程序 就像cpu一样 负责调动;

 

 推荐文档:https://en.wikipedia.org/wiki/Java_virtual_machine

 推荐数据:<<深入Java虚拟机>>

    

© 著作权归作者所有

共有 人打赏支持
天呀鲁哇
粉丝 8
博文 98
码字总数 42007
作品 0
长宁
程序员
私信 提问
Java学习---Java简单认识

前言 小编在学习Java方面的基础知识,发现里面有很多是结合之前的语言的特点发展过来的,不同的地方是,Java有它自己的发展和特点。下面小编先简单地做一下总结,结合看过的1-2章的J2SE视频,...

m18633778874
04/01
0
0
【JVM系列】深入了解JVM 、JRE、JDK三者的联系

JDK: Java Development Tool Kit(Java开发工具包)。JDK就是我们用来做事情的工具,它包括JRE还有其他工具。我们所说版本的不同,也就是说它里面的工具有差异。就像是你不同的工具箱里放着不同...

磊神Ray
2011/09/21
0
1
用来理解 Java 编程语言的 8 个图表

很多时候,一张图比你说 1000 个字能更有效的说清楚一个问题。我们列举了 8 个关于 Java 语言的图表,或许可以让你对 Java 有着更深入的认识。 1. 字符串不变性(String Immutability) 下面的...

oschina
2013/09/23
7.8K
29
做java开发,是不是也要学一些前端的知识

最近在项目中,接触了一些前端的知识,我本身是做java开发,也做了一年3个月,感觉java这块,不是做的很深入,想利用空闲时间去增加对java的认识,最其实也不是全部做前端,是前后端都一起做...

能力一般
2015/06/18
3.7K
7
centos7 yum安装java运行环境,初识hadoop

安装java运行环境 1.实验机相关信息: [root@node2 ~]# cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) [root@node2 ~]# uname -r 3.10.0-327.el7.x86_6 2.配置epel源,以y......

smile68
04/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

PHP生成CSV之内部换行

当我们使用PHP将采集到的文件内容保存到csv文件时,往往需要将采集内容进行二次过滤处理才能得到需要的内容。比如网页中的换行符,空格符等等。 对于空格等处理起来都比较简单,这里我们单独...

豆花饭烧土豆
今天
2
0
使用 mjml 生成 thymeleaf 邮件框架模板

发邮件算是系统开发的一个基本需求了,不过搞邮件模板实在是件恶心事,估计搞过的同仁都有体会。 得支持多种客户端 支持响应式 疼彻心扉的 outlook 多数客户端只支持 inline 形式的 css 布局...

郁也风
今天
8
0
让哲学照亮我们的人生——读《医务工作者需要学点哲学》有感2600字

让哲学照亮我们的人生——读《医务工作者需要学点哲学》有感2600字: 作者:孙冬梅;以前读韩国前总统朴槿惠的著作《绝望锻炼了我》时,里面有一句话令我印象深刻,她说“在我最困难的时期,...

原创小博客
今天
4
0
JAVA-四元数类

public class Quaternion { private final double x0, x1, x2, x3; // 四元数构造函数 public Quaternion(double x0, double x1, double x2, double x3) { this.x0 = ......

Pulsar-V
今天
18
0
Xshell利用Xftp传输文件,使用pure-ftpd搭建ftp服务

Xftp传输文件 如果已经通过Xshell登录到服务器,此时可以使用快捷键ctrl+alt+f 打开Xftp并展示Xshell当前的目录,之后直接拖拽传输文件即可。 pure-ftpd搭建ftp服务 pure-ftpd要比vsftp简单,...

野雪球
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部