jvm-初探
目录
概述
其实,学java不算新手了,但是却感觉很多基本的知识,我们一开始也许是记住而不深究,我觉得有一些概念,还是需要了解.
我们所说的java程序,需要jvm,java api,java class的辅助才能运行.我们从下面的图片可以看到,JDK,JRE,java api和JVM以其他们之间的关系:
也就是说,JDK>JRE>Java api>JVM.
1,Java体系结构
1)Java Language
2)Java class文件格式
3)Java应用程序接口(API)
4)JVM
当编写一个java程序并运行的时候,同时用到这4个技术:使用'Java Language'编写源代码->将它编译成'java class'文件->在'jvm'中运行该'class'文件.在编写程序时,通过调用类(这些类实现了java api)中的方法来访问系统资源(例如I/O).如图1-1:

JVM的任务是装载 'class'文件,并运行其中的字节码.如图1-2,jvm中包含一个类装载器(class loader),它可以从程序和api中装载class文件.java api中只有程序运行时需要的那些类才会被装载.

2.jvm执行引擎
有4种执行引擎,分别为:
1)一次性解释字节码.
2)即时编译器(Just-in-time compiler),这种执行引擎比第一种的更快,但是也更消耗内存.在这种情况下,第一次被执行的字节码会被编译成本地机器码,编译出的本地机器码会被缓存,当方法以后被调用的时候可以重用.
3)自适应优化器.在这种方法中,jvm开始的时候解释字节码,但是会监视运行中程序的活动,并记录使用最为频繁的代码段.程序运行的时候,jvm只把那些活动最为频繁的代码编译为本地机器码.而其他代码,由于使用不频繁,继续保留为字节码-由jvm继续解释它们.一个自适应优化器可以使得 jvm在 80%~90%的时间里执行被优化过的代码,而只需要编译10%~20%对性能有影响的代码.
4)由硬件芯片构成,它由本地方法执行java字节码.这种执行引擎实际上是内嵌在芯片里的.
3,ClassLoader的体系结构
用户定义的ClassLoader使得在运行时扩展java应用程序成为可能.当被装载的类引用了另外一个类的时候,jvm将使用装载第一个类的ClassLoader去装载被引用的类.如,jvm使用某一特定的ClassLoader装载Volcano这个类,而Volcano类使用一个叫Lava类(如调用Lava类的一个方法),那么jvm将使用装载Volcano这个类的ClassLoader去装载Lava.这样,被该ClassLoader返回的Lava类就动态地与Volcano类建立联系.由于jvm使用这种方式进行类的装载,所以被装载的类默认情况下只能看到被同一个ClassLoader装载的别的类.
通过允许使用不同的用户自定义的类装载器装载不同来源的class文件,他们把不同来源的class文件放置在不同的命名空间中,它就能够限制或阻止不同来源的代码之间的相互访问.
4,java class文件
java class文件主要在平台无关性和网络移动性方面使java更适应于网络.
1)平台无关性)它为java程序提供独立于底层主机平台的二进制形式的服务.通常情况下,一个平台上的二进制可执行文件不能在其他平台上工作(如用c/c++编写的程序).而java class文件是可以运行在任何支持jvm的硬件平台和操作系统上的二进制文件.
当编译和链接一个c++程序的时候,所得的可执行二进制文件,只能在特定平台的和操作系统上运行,是因为这个二进制文件包含了目标处理器的机器语言.
除了特定的处理器的机器语言之外,传统的二进制可执行文件的另外一个依赖性是具体平台的属性是整数的字节顺序.例如,在支持x86系列处理器的二进制可执行文件中,字节顺序是地位之前;而对于PowerPC处理器,则是高位在前.java class文件中字节顺序是高位在前(而与平台无关).
2)网络移动性)class文件设计紧凑,所有可以快速在网络上传送.其次,java是动态链接和动态扩展,class文件可以在需要的时候才下载.
jvm-初探的更多相关文章
- JVM初探 -JVM内存模型
JVM初探 -JVM内存模型 标签 : JVM JVM是每个Java开发每天都会接触到的东西, 其相关知识也应该是每个人都要深入了解的. 但接触了很多人发现: 或了解片面或知识体系陈旧. 因此最近抽时 ...
- JVM初探- 使用堆外内存减少Full GC
JVM初探-使用堆外内存减少Full GC 标签 : JVM 问题: 大部分主流互联网企业线上Server JVM选用了CMS收集器(如Taobao.LinkedIn.Vdian), 虽然CMS可与用 ...
- JVM初探- 内存分配、GC原理与垃圾收集器
JVM初探- 内存分配.GC原理与垃圾收集器 标签 : JVM JVM内存的分配与回收大致可分为如下4个步骤: 何时分配 -> 怎样分配 -> 何时回收 -> 怎样回收. 除了在概念 ...
- JVM初探
### JVM分为类的加载生命周期和gc垃圾回收两个大的方面#####首先是类的生命周期, 类的加载: --> 记载字节码 ---> 这个过程有类的加载起参与,双亲委托机制() --> ...
- JVM初探(三):类加载机制
一.概述 我们知道java代码会被编译为.class文件,这里class文件中的类信息最终还是需要jvm加载以后才能使用. 事实上,虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验,转 ...
- JVM初探(五):类的实例化
一.概述 我们知道,一个对象在可以被使用之前必须要被正确地实例化.而实例化实际指的就是以一个java类为模板创建对象/实例的过程.比如说常见的 Person = new Person()代码就是一个将 ...
- JVM学习笔记(一):JVM初探
1 来源 来源:<Java虚拟机 JVM故障诊断与性能优化>--葛一鸣 章节:第一章 本文是第一章的一些笔记整理. 2 Java里程碑 2.1 Java起源 1990年Sun公司决定开发一 ...
- JVM初探之类文件结构
java 的 .class 文件字节码如图:Class 文件是一组以8字节为基础单位的二进制流,各个数据项目有着严格的结构.下面我们介绍下class文件的结构. 魔数 class文件的头4个字节是魔数 ...
- 沉淀再出发:jvm的本质
沉淀再出发:jvm的本质 一.前言 关于jvm,使用的地方实在是太多了,从字面意思上我们都能明白这也是一个虚拟机,那么其他的虚拟机都会用来运行别的操作系统的,而jvm却是实现了可以在不用的操作系统之上 ...
- JVM(零):走入JVM
JVM(零):走入JVM 本系列主要讲述JVM相关知识,作为本系列的第一篇文章,本文从Java为什么是一个跨平台的语音开始介绍,逐步引入Java虚拟机的概念,并给出一个JVM相关知识图谱,可以让读者从 ...
随机推荐
- SequoiaDB 架构指南
1 简介 SequoiaDB(巨杉数据库)是一款分布式非关系型文档数据库,可以被用来存取海量非关系型的数据,其底层主要基于分布式,高可用,高性能与动态数据类型设计,与当前主流分布式计算框架 Hadoo ...
- 协程coroutine
协程(coroutine)顾名思义就是“协作的例程”(co-operative routines).跟具有操作系统概念的线程不一样,协程是在用户空间利用程序语言的语法语义就能实现逻辑上类似多任务的编程 ...
- 树形结构的维护:BZOJ 3991: [SDOI2015]寻宝游戏
Description 小B最近正在玩一个寻宝游戏,这个游戏的地图中有N个村庄和N-1条道路,并且任何两个村庄之间有且仅有一条路径可达.游戏开始时,玩家可以任意选择一个村庄,瞬间转移到这个村庄,然后可 ...
- 使用sklearn进行数据预处理 —— 归一化/标准化/正则化
一.标准化(Z-Score),或者去除均值和方差缩放 公式为:(X-mean)/std 计算时对每个属性/每列分别进行. 将数据按期属性(按列进行)减去其均值,并除以其方差.得到的结果是,对于每个属 ...
- quartus中查看网表
查看编译之后生成的逻辑结构 tools->Netlist Viewers->RTL vierer
- [AS/400] Control Language
下面是一个简单的 CL 例子,转换日期格式:从 Julian 到 MDY,或者反方向转换. 接受两个参数,日期值 IN,目标类型 TYP,将转换后的日期值存入 OUT 中. PGM (&IN ...
- Mac下Intellij IDea发布Java Web项目详解三 新建Module
准备工作1:新建第一个JavaWeb项目 Step4 添加两个module 4.1 右键[WebWorkSpace]-[New]-[Module] 4.2 重复 准备工作1:新建第一个JavaWeb项 ...
- poj 3281 最大流建图
题目链接:http://poj.org/problem?id=3281 #include <cstdio> #include <cmath> #include <algo ...
- Count the string - HDU 3336(next+dp)
题目大意:给你一个串求出来这个串所有的前缀串并且与前缀串相等的数量,比如: ababa 前缀串{"a", "ab", "aba", &quo ...
- Hibernate学习笔记(一):级联删除
一对多的关系映射 在一的一方配置文件中将会配置set节点信息: *.hbm.xml配置文件中set节点的属性: Lazy:默认是true 即使用延迟加载,false表示即时加载: Order-by:一 ...