一、Jvm体系结构?以及一个.java文件的执行过程

类加载器,运行时数据区,执行引擎、本地方法接口

首先通过类加载器(ClassLoader)会把 Java 代码转换成字节码
运行时数据区(Runtime Data Area)再把字节码加载到内存中,而字节码文件只是 JVM 的一套指令集规范,并不能直接交个底层操作系统去执行,
因此需要特定的命令解析器–执行引擎(Execution Engine),将字节码翻译成底层系统指令,再交由 CPU 去执行,
而这个过程中需要调用其他语言的本地库接口(本地方法接口Native Interface)来实现整个程序的功能。

二、Jvm运行时区域?

程序计数器,方法区,栈,堆,本地方法栈,

程序计数器:线程私有的;是一个指针;指向方法区中的方法字节码(用来存储指向下一条指令的地址,也即将要执行的指令代码),由执行引擎读取下一条指令,是一个非常小的内存空间

java虚拟机栈: 线程私有的,每个线程都会创建一个栈;生命周期与线程相同。虚拟机栈描述的是方法执行的内存模型:每个方法的执行都会创建一个栈帧(stack Frame)用于存储局部变量表、操作数栈、动态连接、方法出口等信息。每个方法呗调用直至执行完毕的过程,就对应一个栈帧在虚拟机中从入栈到出栈的过程。局部变量表存放了编译器可知的各种java虚拟机基本数据类型(8种)、对象引用(不一定是对象本身,也可是一个指向起始地址的引用指针,也可是指向一个代表对象的句柄或其他与此对象相关的位置)和returnAddress类型(指向了一条字节码指令的地址)。
这些数据类型在局部变量表中的存储空间以局部变量槽(slot)来表示,其中64位长度的long和double类型的数据会占用两个变量槽,其他的数据类型只会占用一个。局部变量表所需的内存空间是完全正确的,在方法运行期间不会改变局部变量表的大小(大小是指变量槽的数量,虚拟机真正使用多大的内存空间(比如一个槽占用32bit、64bit或者更多)来实现一个变量槽,这完全由具体的虚拟机实现自行决定的事情)。
遵循后进先出原则(递归调用原理分析后续可以讲一下);是一个连续的内存空间。
有两类异常:1、如果线程请求的栈深度(每次方法调用都会有一个栈帧压入虚拟机栈,操作系统给jvm分配的内存是有限的。如果方法调用过多,导致虚拟机满了就会溢出,这里栈帧深度就是指栈帧的数量)大于虚拟机所允许的深度,将抛出StackOverflowError异常;如果java虚拟机栈容量可以动态扩展,当栈扩展时无法申请到足够的内存会抛出OutOfMemoryError异常。

本地方法栈(Native Method Stacks):与虚拟机栈发挥的作用相似,区别是虚拟机栈为虚拟机执行Java方法(也就是字节码)服务,而本地方法栈则是为虚拟机栈使用到本地方法(native)服务。也即保存被native修饰的方法,即非java方法。

java堆:堆是被所有线程共享的一块内存区域,并且是虚拟机管理内存最大的一块。在虚拟机启动时创建;这个内存区域的唯一目的是用来存放对象实例,java世界“几乎”所有的对象实例都在这里分配内存,垃圾收集器就是收集这些对象,然后根据GC算法回收。是个不连续的内存空间。
如果在java堆中没有内存完成实例分配,并且堆也无法再扩展时,java虚拟机将会抛出OutOfMemoryError异常。
堆内存分为新生代(Young Generation)和老年代(Old Generation)。新生代又分为伊甸区(Eden)和幸存者区(Survivor)。幸存者区由幸存者0区(FromSpace)和幸存者1区(ToSpace)组成。伊甸区和幸存者0、1区默认比例是8:1:1。
新生成的对象首先放到新生代的伊甸区,当伊甸区空间满了,触发Minor GC,存活下来的对象移动到幸存者0区,幸存者0区满后触发执行Minor GC,幸存者0区存活对象移动到幸存者1区,这样保证了一段时间内总有一个幸存者区为空。经过多次Minor GC仍然存活的对象移动到老年代。
老年代存储长期存活的对象,占满时会触发Major GC=Full GC(此处Major GC是清理老年代垃圾并触发minor GC清理新生代垃圾还是Major GC既清理老年代也新生代垃圾,我要查一下),GC期间会停止所有线程等待GC完成,所以对响应要求高的应用尽量减少发生Major GC,避免响应超时。
Minor GC : 清理年轻代
Major GC : 清理老年代
Full GC : 清理整个堆空间,包括年轻代和永久代
所有GC都会停止应用所有线程。
方法区 :*方法区是线程共享的。*比如:类的代码、静态变量、运行时常量池。
方法区在jdk1.7以前,习惯上把方法区称为永久代(习惯上),而到了JDK8,终于完全废弃了永久代的概念,在本地内存中实现的元空间(Metaspace)来代替。这两个最大的区别就是:元空间不在虚拟机设置的内存中,而是使用本地内存
如果方法区无法满足新的内存分配需求时,将抛出OutOfMemoryError异常。

hello,读者,本人第一次发表博客,以前总是将知识点记在自己的小本本上,这次尝试将自己所掌握的知识公之于众(希望不要贻笑大方哈哈),主要目的就是希望大家一起分享知识,一起进步,感谢您看到了这里。有任何建议,请留言指教!
ps:主要是看了《深入理解java虚拟机》后的一些感悟

JVM常见知识(一)相关推荐

  1. 史上最全JVM重点知识总结

    史上最全JVM重点知识总结 基于<深入了解java虚拟机>相关章节进行地重点知识归纳,同时面向企业面试,给出常见面试问题解析及自己的见解,如果有不正确的地方欢迎大佬们指正. 文章目录 1. ...

  2. JVM核心知识体系(转http://www.cnblogs.com/wxdlut/p/10670871.html)

    1.问题 1.如何理解类文件结构布局? 2.如何应用类加载器的工作原理进行将应用辗转腾挪? 3.热部署与热替换有何区别,如何隔离类冲突? 4.JVM如何管理内存,有何内存淘汰机制? 5.JVM执行引擎 ...

  3. 计算机C语言常用语句,计算机二级C语言考试常见知识积累

    形式化方法是一种特别的基于数学的技术,用于软件和硬件系统的形式规范.开发以及形式验证.下面是小编整理的关于计算机二级C语言考试常见知识,欢迎大家参考! 选择结构 [考点1]关系运算 关系运算符有6个, ...

  4. 软件开发中常见知识总结

    最近在准备软件开发的笔试面试,复(yu)习(xi)了一些在软件开发中的常见知识.为了给自己攒点RP,故与大家分享一二. 软件开发需要准备的比较多,主要分为编程语言,数据结构和算法,计算机网络,计算机操 ...

  5. JVM:JVM常见参数配置

    JVM常见参数配置 JVM的参数类型: 1.标配参数:-version,-help,-showversion 2.x参数(了解):-Xint:解释执行:-Xcomp:第一次使用就编译成本地代码:-Xm ...

  6. JVM重要知识点整理和学习

     JVM重要知识点整理和学习 2015-07-25    分类:JAVA开发.编程开发.首页精华4人评论     来源:马志宇的专栏 分享到: 更多 27 JVM是虚拟机,也是一种规范,他遵循着冯 ...

  7. JVM基础知识和调优

    JVM基础知识和调优 什么是垃圾 当一个对象有人引用它时,那么就不是垃圾,不然就不是垃圾 如何辨别一个对象是不是垃圾 计数(最基础的),有一个对象引用就记一个数(i++)问题,循环引用 GC root ...

  8. 关于计算机软件系统的知识,一些关于计算机的常见知识

    [导语]电子计算机(electroniccomputer),通称电脑,简称计算机(computer),是现代的一种利用电子技术和相关原理根据一系列指令来对数据进行处理的机器.计算机的种类按照其用途分为 ...

  9. lq_C/C++常见知识补充002

    C/C++常见知识补充002 memset()函数与fill()函数 string.h头文件下的常用函数 struct结构体变量 浮点数比较 黑盒测试 memset()函数与fill()函数 作用:给 ...

最新文章

  1. 工作中常用,实用工具推荐!
  2. 动态分辨率是什么意思_b站么么直播最新动态里都有啥 b站什么意思
  3. JDK 13:什么是AggressiveOpts?
  4. Linux系统启动全过程
  5. 文件已经上传到服务器翻译,服务器接受上传的优化 翻译+源码分析
  6. c++用一级运算比较大小_孩子数学运算难?小学数学速算技巧顺口溜都在这里了!...
  7. 实时获取ccd图像_图像处理基础
  8. Java创建多线程的方法总结
  9. 模板匹配人眼---OpenCV-Python开发指南(33)
  10. 三星固态Dell版的960g的sm863a硬盘
  11. Android Studio Keymap
  12. Jaden Casing Strings
  13. matlab中ode指令,Matlab中ode函数调用
  14. 图文解析如何配置网络交换机配置
  15. 爱创课堂每日一题-Javascript垃圾回收方法?
  16. MAC 安装及配置maven
  17. 运行时栈帧结构是怎样的?
  18. 【服务器】nvidia驱动重装
  19. s4800扫描电镜的CSS3_4800 型扫描电镜 简易操作指南
  20. Amber进行分子动力学模拟以及计算mmpbsa

热门文章

  1. 以后我将不定时写微信的开发教程
  2. java 抽象方法什么意思_java-什么是抽象类和抽象方法?
  3. ORA-01008: 并非所有变量都已绑定
  4. 网线远程计算机终止619,WinXP宽带连接错误619如何解决?
  5. JNDI 的架构和原理
  6. 微信小游戏MagnetGame开发(九)GameOver
  7. win10直升win11并更新显卡最新驱动
  8. Android碎片知识(十).开发中的gps定位(转)
  9. HttpServletResponse对象、HttpServletResponse应用、请求重定向
  10. JavaScript 学习教程集锦