文档章节

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基础学习_概述_day01总结

============================================================================= ============================================================================= 涉及到的知识点有:  ......

黑泽明军
02/02
0
0
我对java String的理解 及 源码浅析

摘要: 摘要: 原创出处: http://www.cnblogs.com/Alandre/ 泥沙砖瓦浆木匠 希望转载,保留摘要,谢谢! 每天起床告诉自己,自己的目标是 ”技术 + 英语 还有生活“! -泥沙砖瓦浆木匠 一.char...

泥沙砖瓦浆木匠
2014/08/17
0
0
Java 基础:认识&理解关键字 native 实战篇

Writer:BYSocket(泥沙砖瓦浆木匠) 微博:BYSocket 豆瓣:BYSocket 泥瓦匠初次遇见 native是在 java.lang.Object 源码中的一个hashCode方法: public native int hashCode(); 为什么有个n...

泥沙砖瓦浆木匠
2015/04/25
0
8

没有更多内容

加载失败,请刷新页面

加载更多

下一页

JS:异步 - 面试惨案

为什么会写这篇文章,很明显不符合我的性格的东西,原因是前段时间参与了一个面试,对于很多程序员来说,面试时候多么的鸦雀无声,事后心里就有多么的千军万马。去掉最开始毕业干了一年的Jav...

xmqywx
今天
0
0
Win10 64位系统,PHP 扩展 curl插件

执行:1. 拷贝php安装目录下,libeay32.dll、ssleay32.dll 、 libssh2.dll 到 C:\windows\system32 目录。2. 拷贝php/ext目录下, php_curl.dll 到 C:\windows\system32 目录; 3. p...

放飞E梦想O
今天
0
0
谈谈神秘的ES6——(五)解构赋值【对象篇】

上一节课我们了解了有关数组的解构赋值相关内容,这节课,我们接着,来讲讲对象的解构赋值。 解构不仅可以用于数组,还可以用于对象。 let { foo, bar } = { foo: "aaa", bar: "bbb" };fo...

JandenMa
今天
1
0
OSChina 周一乱弹 —— 有人要给本汪介绍妹子啦

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @莱布妮子 :分享水木年华的单曲《中学时代》@小小编辑 手机党少年们想听歌,请使劲儿戳(这里) @须臾时光:夏天还在做最后的挣扎,但是晚上...

小小编辑
今天
21
5
centos7安装redis及开机启动

配置编译环境: sudo yum install gcc-c++ 下载源码: wget http://download.redis.io/releases/redis-3.2.8.tar.gz 解压源码: tar -zxvf redis-3.2.8.tar.gz 进入到解压目录: cd redis-3......

hotsmile
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部