1.什么是JVM

JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java虚拟机包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域。 JVM屏蔽了与具体操作系统平台相关的信息,使Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。JVM在执行字节码时,实际上最终还是把字节码解释成具体平台上的机器指令执行。

2:JRE/JDK/JVM是什么关系

JRE(JavaRuntimeEnvironment,Java运行环境),也就是Java平台。所有的Java 程序都要在JRE下才能运行。普通用户只需要运行已开发好的java程序,安装JRE即可。

  JDK(Java Development Kit)是程序开发者用来来编译、调试java程序用的开发工具包。JDK的工具也是Java程序,也需要JRE才能运行。为了保持JDK的独立性和完整性,在JDK的安装过程中,JRE也是 安装的一部分。所以,在JDK的安装目录下有一个名为jre的目录,用于存放JRE文件。

  JVM(JavaVirtualMachine,Java虚拟机)是JRE的一部分。它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。JVM有自己完善的硬件架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。Java语言最重要的特点就是跨平台运行。使用JVM就是为了支持与操作系统无关,实现跨平台。

3.JVM原理

  JVM是java的核心和基础,在java编译器和os平台之间的虚拟处理器。它是一种利用软件方法实现的抽象的计算机基于下层的操作系统和硬件平台,可以在上面执行java的字节码程序。

4:JVM的体系结构

    类装载器(ClassLoader)(用来装载.class文件)

    执行引擎(执行字节码,或者执行本地方法)

    运行时数据区(方法区、堆、java栈、PC寄存器、本地方法栈)

第一块:PC寄存器

  PC寄存器是用于存储每个线程下一步将执行的JVM指令,如该方法为native的,则PC寄存器中不存储任何信息。

第二块:JVM栈

  JVM栈是线程私有的,每个线程创建的同时都会创建JVM栈,JVM栈中存放的为当前线程中局部基本类型的变量(java中定义的八种基本类型:boolean、char、byte、short、int、long、float、double)、部分的返回结果以及Stack Frame,非基本类型的对象在JVM栈上仅存放一个指向堆上的地址。

第三块:堆(Heap)

  它是JVM用来存储对象实例以及数组值的区域,可以认为Java中所有通过new创建的对象的内存都在此分配,Heap中的对象的内存需要等待GC进行回收。

(1) 堆是JVM中所有线程共享的,因此在其上进行对象内存的分配均需要进行加锁,这也导致了new对象的开销是比较大的

(2) Sun Hotspot JVM为了提升对象内存分配的效率,对于所创建的线程都会分配一块独立的空间TLAB(Thread Local Allocation Buffer),其大小由JVM根据运行的情况计算而得,在TLAB上分配对象时不需要加锁,因此JVM在给线程的对象分配内存时会尽量的在TLAB上分配,在这种情况下JVM中分配对象内存的性能和C基本是一样高效的,但如果对象过大的话则仍然是直接使用堆空间分配

(3) TLAB仅作用于新生代的Eden Space,因此在编写Java程序时,通常多个小的对象比大的对象分配起来更加高效。

(4) 所有新创建的Object 都将会存储在新生代Yong Generation中。如果Young Generation的数据在一次或多次GC后存活下来,那么将被转移到OldGeneration。新的Object总是创建在Eden Space。

第四块:方法区域(Method Area)

(1)在Sun JDK中这块区域对应的为PermanetGeneration,又称为持久代。

(2)方法区域存放了所加载的类的信息(名称、修饰符等)、类中的静态变量、类中定义为final类型的常量、类中的Field信息、类中的方法信息,当开发人员在程序中通过Class对象中的getName、isInterface等方法来获取信息时,这些数据都来源于方法区域,同时方法区域也是全局共享的,在一定的条件下它也会被GC,当方法区域需要使用的内存超过其允许的大小时,会抛出OutOfMemory的错误信息。

转载于:https://www.cnblogs.com/qichunlin/p/7640614.html

2017.10.9 JVM入门学习相关推荐

  1. [2017.02.07] Lua入门学习记录

    #!/home/auss/Projects/Qt/annotated/lua -- 这是第一次系统学习Lua语言 --[[ 参考资料: 1. [Lua简明教程](http://coolshell.cn ...

  2. 狂神。JVM入门学习笔记。

    JVM学习 JVM常见面试题: 请你谈谈你对jvm的理解?Java8虚拟机和之前的变化更新? 什么是OOM?什么是栈溢出StackOverFlowError?怎么分析? jvm的常见调优参数有哪些? ...

  3. [入门导航][2017.10.2]计算机入门知识图谱

    关于计算机或者程序.代码.网站.各种算法啥的,虽然学校本身专业也很强,国内外排名都很高,教学水准也是有的,但是我可能天生不是个Listener,不是很喜欢听课,而是一个Practicer,更愿意自己动 ...

  4. 视频教程 | Egret Pro 入门学习笔记(10):认识模型

    今天的视频是通过点击按钮切换网格,以及点击按钮切换材质,来一起认识下EgretPro中的基础模型与基础材质,加深对模型的认识以及熟练Egret2d与EgretPro之间的UI交互. 大家都知道,在3D ...

  5. c语言10个人 三向成绩,C语言入门学习精华:这样学习C语言最有效

    C语言入门学习精华:这样学习C语言最有效 c语言死了吗? 本材料描述了使用C语言的高级技能,并努力将您的C语言能力从"基本"提升到"高级".然而,学习态度比学习 ...

  6. webpack入门学习笔记10 —— 在项目中使用图片资源

    1. 写在前面 在前端项目中,图片是必不可少的一种资源.在使用图片的时候,我们可以有以下几种方式: 在 .html 文件中,通过 <img src="" alt=" ...

  7. 01.Java 编程入门学习笔记20210307

    Java 编程入门学习笔记-day01 第0章:编程入门 1.计算机的概述 计算机 = 硬件 + 软件 1.1硬件:冯诺依曼体系 CPU: CPU的衡量标准:速度的计量单位是赫兹(Hz),1Hz相当于 ...

  8. Java入门学习笔记[狂神说Java]

    写在前面: 本文根据B站狂神说Java 与菜鸟教程 整理而来,仅供个人学习使用,如有侵权,请联系删除. 文章目录 IDEA使用 Java基础01:注释 Java基础02:数据类型 Java基础03:类 ...

  9. java入门学习_Java入门学习进阶知识点

    Java入门学习进阶知识点 入门阶段,主要是培养Java语言的编程思想.了解Java语言的语法,书写规范等,掌握Eclipse.MyEclipse等开发工具,编写Java代码的能力.学完这个阶段你应该 ...

最新文章

  1. 分布式服务(RPC)+分布式消息队列(MQ)面试题精选
  2. Jquery UI dialog 详解
  3. centos更换网卡后怎么更新配置_CentOS安装
  4. div之间的间距如何去除_如何统一两端开发中的文本行高
  5. Datadog Agent是啥?它消耗什么资源?
  6. Resource Hacker软件更换应用图标
  7. Python图像处理丨认识图像锐化和边缘提取的4个算子
  8. Caffe框架的使用
  9. 笔记本电脑合上盖子不休眠设置方法
  10. 【私有云平台的搭建——vSphere Client 的安装与配置】
  11. 听见丨谷歌DeepMind科学家黄士杰:已离开AlphaGo团队AI芯片初创团队ThinkForce完成4.5亿元A轮融资
  12. 厦理Java期末训练题【附带每题答案,非标准但可通过PTA】
  13. 全球最专业的技术媒体,如何复盘 2019 AI 的发展?
  14. TiDB数据库架构——TiDB Server
  15. 《系统架构设计师教程》 第一章:绪论
  16. 锁机制:读者写者问题 Linux C
  17. MAC:屏蔽独立显卡的声卡模块,使用ALC883集成声卡
  18. SVG格式转Visio的vsd(x)格式方法,附带C#动态调用Office的Com组件方法
  19. ICON艾肯4nano、micu声卡live新款安装调试教程
  20. win7 升级到win10 注意事项

热门文章

  1. 【ZZ】使用github管理Eclipse分布式项目开发
  2. 深入剖析Android系统
  3. 致所有IT工程师的信(网络工程师的发展方向)
  4. c#书写规范之---注释
  5. vue之Render函数
  6. centos7安装mongodb详解
  7. 2015年最棒的10个 JavaScript 框架
  8. UIImageView图片视图的基本概念和使用方法
  9. jQuery mobile 中div圆角弹出层
  10. 职业-把工作当作职业 or 事业?