文档章节

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程序员不同阶段提升技能应该看哪些书籍

欢迎大家在阅读的过程中转发、评论,需要相关资料可以加小编微信:mipi946获取 一、java入门类   对于零基础的小白,想要成为程序员,从事开发相关的工作,java都是一个不错的选择。在这个...

尚学先生
08/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

学习设计模式——命令模式

任何模式的出现,都是为了解决一些特定的场景的耦合问题,以达到对修改封闭,对扩展开放的效果。命令模式也不例外: 命令模式是为了解决命令的请求者和命令的实现者之间的耦合关系。 解决了这...

江左煤郎
24分钟前
1
0
字典树收集(非线程安全,后续做线程安全改进)

将500W个单词放进一个数据结构进行存储,然后进行快速比对,判断一个单词是不是这个500W单词之中的;来了一个单词前缀,给出500w个单词中有多少个单词是该前缀. 1、这个需求首先需要设计好数据结...

算法之名
昨天
7
0
GRASP设计模式

此文参考了这篇博客,建议读者阅读原文。 面向对象(Object-Oriented,OO)是当下软件开发的主流方法。在OO分析与设计中,我们首先从问题领域中抽象出领域模型,在领域模型中以适当的粒度归纳...

克虏伯
昨天
0
0
Coding and Paper Letter(四十)

资源整理。 1 Coding: 1.Tomislav Hengl撰写的非官方作者指南:Michael Gould•Wouter Gerritsma。 UnofficialGuide4Authors 2.R语言包rwrfhydro,社区贡献的工具箱,用于管理,分析和可视化...

胖胖雕
昨天
0
0
JAVA 内存回收

参考:https://www.cnblogs.com/leesf456/p/5218594.html 1,JMV 中哪些可以作为 GC Root? 1. 虚拟机栈(栈帧中的局部变量区,也叫做局部变量表)中引用的对象。 2. 方法区中的类静态属性引...

Carlyle_Lee
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部