老李分享:jvm结构简介

 

  poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标。如果对课程感兴趣,请大家咨询qq:908821478,咨询电话010-84505200。 

JVM简介 

一.介绍:

JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。

Java语言的一个非常重要的特点就是与平台的无关性。而使用Java虚拟机是实现这一特点的关键。一般的高级语言如果要在不同的平台上运行,至少需要编译成不同的目标代码。而引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java语言使用Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。Java虚拟机在执行字节码时,把字节码解释成具体平台上的)执行。这就是Java的能够“一次编译,到处运行”的原因。

二.结构:

Tips: jvm相当于一个新的系统级软件

  1. 可以高效管理os分配的内存,Garbage collertor对heap中的内存进行管理:清除,整合,复制

  2. 自行调度jvm中的各种线程给cpu运行,program counter register和java threads配合进行多线程调度。

  3. Native internal threads可以根据不同的os,调用不同的系统api。(这也是java程序能跨平台的主要原因,感谢下jdk的维护人员)

  4. Jit Compiler可以把常用的.class文件编译成本地系统的的二进制文件,加快加载和运行速度。

 特点

2.1 Class Loader Subsystem :java编译的class文件加载器.

主要用来将*.class文件读取到jvm的内存中(就是方法区)

2.2 Runtime Data Areas :允许时数据存储区

里面的不同部分都是用来保存java程序运行时的程序信息<数据+指令>

2.2.1 Method area:方法区(jdk1.8 取消了方法区合)

当class文件加载器加载了*.class文件后,这个文件的 类信息,常量,静态变量,即时编译后(jit)的代码.

         a.特点:线程共享(由于保存的都是一些不可变信息)

         b.保存信息格式:

1)     类(文件)class:

a.       类及其父类全限定名          (java.lang.Object没有父类)

b.      类的类型                                                 class 、 interface

c.       修饰符                                                     public、protected、private

d.      实现接口的全限定名的列表                     实现的接口列表

e.       常量池(final staic)                     主要:string(使用final staic char[]实现的)||emun

f.        字段信息

g.       方法信息

h.      出常量外的静态变量                               static的method,class

i.         Classloader引用

j.        Class 引用

Tips:全限定名:完整的class地址  Eg:在org.spring.web包下的annotation.class其权限名:org.spring.web. annotation.class

2)      字段field:

a.       字段名

b.      字段类型                                              类型使用全限定名

c.       字段修饰符                                           基本类型和对象

a)        访问修饰:                                           public、private、protected

b)        静态:                                                  static

c)         常量:              final

d)        Jndi:              transient              

e)         线程:              volatitile

    3)   方法method:

a)         方法名:                                           全限定名

b)        返回类型:            全限定名

c)         参数信息:            参数列表:由全限定名

d)        修饰符:

a)         访问修饰:                                           public、private、protected

b)        静态:              static

c)         常量:              final

d)        线程:               synchronized

e)         本地:                                                native

f)          抽象:                                                   abstract

如果不是native和abstract还会保存一下信息

1.         方法的字节码

2.         本变量表和操作数栈的大小

3.         异常表

     c.String常量池:

2.2.2 Heap堆

存放数组对象实例(new)的地方,gc的主要区域。

主要分区

名称 个数 大小比(default)
年轻代 1 4
年老代 1 1

年轻代

名称 个数 大小(default)
eden区 1 8
survivor区 2 2

 

直接内存:

          调用本地库来操作分配系统的内存

对象访问:

          这是堆的主要功能,每次new都会分配一个对象大小的内存空间。并且在java栈中有一个这个对象的引用。还可以通过这个引用查找存放在method area区的对象文件(.class)的所有信息<也就是其类的信息>。

Reference在Java虚拟机中定义为指向对象的引用

1.一种实现是Reference直接存储对象在堆内的地址,对象的类型信息可以在对象在堆中的内存布局中存储,如存储在对象内存的开头等。

2.另一种实现是Reference指向一个句柄表中的一个位置,句柄中保存了对象的实际位置及它对应的类型信息。使用句柄的好处是当在内存中移动对象的位置时,只需要更新句柄表中的内容,不需要改变引用值,但会多一次内存访问开销,直接引用的优缺点与此相反。

2.2.3  Native method stack:本地方法栈

执行本地方法。

例如:系统的文件系统,系统的网络系统。

老李分享:jvm结构简介 1的更多相关文章

  1. 老李分享:jvm结构简介 2

    2.2.4 Program counter regsiters:程序计数器 类似于PC寄存器,是一块较小的内存区域,通过程序计数器中的值寻找要执行的指令的字节码,由于多线程间切换时要恢复每一个线程的当 ...

  2. 老李分享:jvm垃圾回收

    老李分享:jvm垃圾回收   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨询qq:908821478 ...

  3. 老李分享:jvm内存原型剖析

    老李分享:jvm内存原型剖析   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨询qq:9088214 ...

  4. 老李分享:JVM调优

    老李分享:JVM调优   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨询qq:908821478,咨 ...

  5. Lucene底层原理和优化经验分享(1)-Lucene简介和索引原理

    Lucene底层原理和优化经验分享(1)-Lucene简介和索引原理 2017年01月04日 08:52:12 阅读数:18366 基于Lucene检索引擎我们开发了自己的全文检索系统,承担起后台PB ...

  6. 老李分享:持续集成学好jenkins之安装

    老李分享:持续集成学好jenkins之安装   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨询qq: ...

  7. 老李分享: JSON

    老李分享: JSON    poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨询qq:908821478, ...

  8. 老李分享:使用 Python 的 Socket 模块开发 UDP 扫描工具

    老李分享:使用 Python 的 Socket 模块开发 UDP 扫描工具 poptest是业内唯一的测试开发工程师培训机构,测试开发工程师主要是为测试服务开发测试工具,在工作中要求你做网络级别的安全 ...

  9. 老李分享:pep8 python代码规范

    老李分享:pep8 python代码规范 什么是PEPPEP是 Python Enhancement Proposal 的缩写,翻译过来就是 Python增强建议书 . PEP8 译者:本文基于 20 ...

随机推荐

  1. MS office2010 ppt自动放映的设置方法

    在菜单“幻灯片放映”-“排练时间”,进入演示,然后设置每张幻灯片需要等待的时间后,手动切换到下一张(如图),一直放映结束,会提示你是否保存排练时间.然后在菜单“幻灯片放映”-“设置放映方式”,里面选择 ...

  2. kafka c++客户端编译

    Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据. 这种动作(网页浏览,搜索和其他用户的行动)是在现代网络上的许多社会功能的一个关键因素. 这些数据通常是 ...

  3. canvas画时钟,重拾乐趣!

    canvas时钟--效果图 一.先来简单介绍画时钟需要的canvas知识 1.在HTML页面中添加canvas元素,必须定义canvas元素的id属性值以便接下来的调用. HTML代码: <ca ...

  4. CSS 3 过渡效果之jquery 的fadeIn ,fadeOut

    .div { visibility: hidden; opacity: 0; transition: visibility 0s linear 0.5s,opacity 0.5s linear; } ...

  5. sql server中部分函数功能详解

    1.TOP 子句 TOP 子句用于规定要返回的记录的数目. 对于拥有数千条记录的大型表来说,TOP 子句是非常有用的. SQL Server 的语法: SELECT TOP number|percen ...

  6. Java Web(十三) 使用javamail进行发送邮件,(使用QQ,163,新浪邮箱服务器)

    加油加油. --WH 一.发送邮件的原理 在了解其原理之前,先要知道两个协议,SMTP和POP3 SMTP:Simple Mail Transfer Protocol,即简单邮件传输协议,发送邮件的协 ...

  7. KMP算法的优化与详解

    文章开头,我首先抄录一些阮一峰先生关于KMP算法的一些讲解. 下面,我用自己的语言,试图写一篇比较好懂的 KMP 算法解释. 1. 首先,字符串"BBC ABCDAB ABCDABCDABD ...

  8. Swift应用案例 1.无限轮播

      从今天开始,我学习的重点开始转向Swift,并且会分享一些自己学习的心得体会,今天给大家带来的的是无限轮播.广告页的无限轮播是非常常见的一个功能,大多数APP都有,大多数程序员也都实现过,今天我们 ...

  9. 3522: [Poi2014]Hotel

    3522: [Poi2014]Hotel Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 253  Solved: 117[Submit][Status ...

  10. ajax上传图片

    选择文件后 ajax上传图片到后台,后台执行保存操作,返回上传的图片路径,显示到页面 需要引入ajaxfileupload.js js代码 <script type="text/jav ...