JVM详解


-
JVM详解
Java程序的开发流程★ class helloworld【 args public static vaid main(stnng S[]) 缩写井运行je程 system. out. printIn(HelID Hello world W。rld! 编写」ava源程序,并保 保存 Helloworld源代码 后缀名java 保存后名为 所有代码必须保存为扩展名 的文伟 java 源文件名称必须和类名相同 绵译问w又丹名后 class关键字后面的即类名 cass文件 正确的文件名为 生成后名 Helloworld.java 的文 编译源代码 行A又名 javac Helloworld. java 运行结果 Hello world 运行程序予; 生成结果 ava Helloworld 1.3JaVa运行的原理 JaVa运行的原理 面面面mm ====:==:1 Ajava Bjava C java Aclass B class Cclass 通过本 地或网 络传输 Java Java编译器 Java ava c lass 虚拟机虚拟机虚拟机 文件 I A class B class C class Object class String class 程序的cass文件 Java ap的 Class文件i Java运行的原理 Jaw源程序(扩展名为java) ·JM( Java virtual a译程 Machine)-Java虚拟机 Ja字节码文件(扩展名为. class) 一个虚构出来的计算机 通过在实际的计算机上仿 JVM虛拟机 真模拟各种计算机功能来 INdene linx卜的 能直接解释 实现的。 的da ava字节码Java宇节码 码解程序 解释程序 的cPU √Java虚拟机有自己完善的硬 件架构如处理器、堆栈、 机少机机酒拒兮 寄存器等还具有相应的指 Windows Linux 令系统。 操作系统 操作系统 1.4半编译半解释 半编译半解释? √系统先将用户输入的指令翻译成一种通用的,比较规则的中间形 式的代码,保密性强,运行时则由所在机器的解释器进行解释 v java语言的开发效率高,但执行效率低。(相当于c++的 55%) Source Code Pblie ckc Hslowvarkd atva Machine cada He lu wool Interpreter Class File Load Java virtual Bylccodo Machire 平台无关性 平台无关性? 何谓平台:即一套特定的硬件冉加上运行其上的操作系统,即硬件十软件。编程 语言对不同平台的支持有所不同。(、CC++、Java Java完全不用修改任何源代码,也不用重新编译就可以直接移植到其他平台。 Jav的平台无关性给程序的部署带来了很大的灵活性,节约开发和升级成本。 怎样理解平台无关性呢?JwM( java Virtual Machine)起到了主要作用。JWM是运 行在平台之上的程序,它能够虚拟出一台目标机,所有字节码就是在虚拟出的目 标机上运行。 程序不可能在所有的平台上都可以运行:(1)因为不同平台的内存管理模式和 cPU的指令集等都有很大的差别。(2)为了让java实现平台无关性,Su公司在不 同平台上用软件模拟出虚拟目标机,虚拟出CPU指令集和内存。(3)因此虽然平 台间的差异比较大,但是虚拟山来的WM是完全样的。(4)Jv的字节码仅仅 运行在M上,不会和平台的底层直接打交道。(5)M根据平台的不同,把字节 码解释成不同的本地代码(6)JwM就像翻译,把通用的普通话翻译成不同地方特 色的方言。 但是有一个缺点:java代码必须要经过JVM解释才能运行,使得java运行的效率降 低 WORA: WHile ouce. RuII Anywhere(一次编写到处运行 内存模型 2.1JM规范 JVM specification对JM内存的描述 首先我们来了解 JvM specification中的JWM整体架构。如卜图: CLASS FILES CLASS LOADER RUNTIME DATA AREA METHOD AREA JAVA STACK NATIVE METHOD STACK HEAP PROGRAM COUNTER REGISTER NATIVE NATIVE EXECUTION ENGINE INTERFACE LIBRARIES RUNTIME DATA AREAS SHARED AMONG ALL THREADS THREAD SPECIFIC RUNTIME DATA AREAS o javabean. wordpress. com 主要包括两个子系统和两个组件: Class loader(类装载器)子系统, Execution engine(执行引擎)子系统; Runtime data area(运行时数据区域) 组件, Native interface(木地接口)组件。 Class loader子系统的作用:根据给定的全限定名类名(如 java.lang.0 bject)来装载 class文件的内容到 Runtime data area中的 method area(方法区域)。 Javed程序员可以 ex tends java.lang. Classloader类来写自 己的 Class loader。 Execution engine子系统的作用:执行 classes中的指令。任何JM specification实现(JDK)的核心是 Execution engine,换句话说:Sn的JDK 和IM的JDK好坏主要取决于他们各自实现的 Execution engine的好坏。每个 运行中的线程都有一个 Execution engine的实例 Native interface组件:与 native libraries交工,是其它编程语言交 互的接口。 Runtime data area组件:这个组件就是JMM中的内存。卜面对这个部分 进行详细介绍。 JVM Shared among all Threads Thread 1 Het Thread 2 PC Stack Per Method Basis class Instances and Arrays PC Stack Per Method basis stance variables Frame 1 Frame 2 Frame 1 Frame 2 Referen Local Variables Partial Results Local ariables Partial results INcluding Parameters) Operand Stack Method area Operand Stack Runtime constant poal Methad code Per Class basis Static variables and methods Runtime Constant pool Native method stacks Method code Per Class basis 调用 Static variables and methods 」JM乙外,作系统内仔」 Runtime data area的整体架构图 Runtime data area主要包括五个部分:Heap(堆), Method area(方法区 域), Java Stack(java的栈), Program Counter(程序计数器), Native method stack(本地方法栈)。Heap和 Method area是被所有线程的共享使用的;而 Java stack, Program counter和 Native method stack是以线程为粒度的, 每个线程独自拥有。 Heap Java程序在运行时创建的所有类实或数组都放在同一个堆中。而一个Java虚拟 实例中只存在一个堆空间,因此所有线程都将共享这个堆。每一个java程序独 占一个JⅧM实例,因而每个java程序都有它自己的堆空间,它们不会彼此十扰。 但是同一java程序的多个线程都共享着同一个堆空间,就得考虑多线程访问对 象(堆数据)的同步问题。(这里可能出现的异常java.lang. OutOfMemoryError Java heap space Method area 在Java虚拟机中,被装载的 class的信息存储在 Method area的内存中。当虚 拟机装载某个类型吋,它使用类装载器定位相应的 class文件,然后读入这个 class文件内容并把它传输到虚拟机中。紧接着虚拟机提取其中的类型信息,并 将这些信息存储到方法区。该类型中的类(静态)变量同样也存储在方法区中。 与Heap一样, Ime chod area是多线程共享的,因此要考虑多线程访问的同步问 题。比如,假设同时两个线程都企图访问一个名为Lava的类,而这个类还没有 内装载入虚拟机,那么,这时应该只有一个线程去装载它,而另一个线程则只能 等待。(这里可能出现的异常java.lang. OutofMemoryError: PermGen full) Java stack Java stack以帧为单位保存线程的运行状态。虚拟机只会直接对Java stack执行两种操作:以帧为单位的压栈或岀栈。每当线程调用一个方法的时 候,就对当前状态作为一个帧保存到 java stack中(压栈);当一个方法调用返 回时,从 java stack弹出一个帧(出栈)。栈的大小是有一定的限制,这个可能 出现 StackOverFlow问题。下面的程序可以说明这个问题。 public class TestStackOverFlow I public static void main(String[] args) i Recursive r= new Recursive o r.doit(10000) / Exception in threadmain java. lang. SlackOverflowError lass Recursive i public int doit(int t)I if(t<=1) return 1 return t doit(t-1) Program counter 每个运行中的Java程序,每一个线程都有它自己的PC寄存器,也是该线程启动刑创建 的。PC寄存器的内容总是指向下一条将被执行指令的饿&dquo;地址& rdquo;这里的 &|dquo:地址& rdquo;可以是一个本地指针,也可以是在方法区中相对应于该方法起始指 令的偏移量。 Native method stack 对于一个运行中的Java程序而言,它还能会用到一些跟本地方法相关的数据区。当某个 线程调用一个本地方法时,它就进入了一个全新的并且不冉受虚拟机限制的世界。本地 方法可以通过本地方法接口来访问虚拟机的运行时数据区,不止与此,它还可以做任何 它想做的事情。比如,可以调用寄存器,或在操作系统中分配内存等。总之,木地方法 具有和JVM相同的能力和权限。(这里出现』M无法控制的内存溢出问题 2.2 Sun jvm Sun vn中对 VM Specification的实现(内存部分) JVM Specification只是抽象的说明了yVM实例按照子系统、内存区、数据类型以及指令 这几个术语来描述的,但是规范并非是要强制规定Java虚拟机实现内部的体系结构, 更多的是为了严格地定义这些实现的外部特征 Sun vm实现中: Runtime data area(VM内存)五个部分中的 Java stack, Program Counter, Native method stack三部分和规范中的描述基本一致;但对Heap和 Method Area进行了自己独特的实现。这个实现和SunM的 Garbage collector(垃圾回收)机 制有关,下面的章节进行详细描述。 垃圾分代回收算法( Generational Collecting) 基于对对象生命周期分析后得出的垃圾回收算法。把对象分为年青代、年老代、持久 代,对不同生命周期的对象使用不同的算法(上述方式中的一个)进行回收。现在的垃 圾冋收器(从』2SE1.2开始)都是使用此算法的。 cured P Euen G oung Petm 如上图所示,为Java堆中的各代分布 1. Young 年轻代) M specification中的Heap的一部份 年轻代分三个区。一个Eden区,两个 Survivor区。大部分对象在Eden区中生成。 区满时,还存活的对象将被复制到 Survivor区(两个中的 这个 Survivor 区满时,此区的存活对象将被复制到另外一个 Survivor区,当这个Surⅳor去也满了的 时候,从第一个 Survivor区复制过来的并且此时还存活的对象,将被复制&dquo;年老区 ( Tenured)& rdquo;。需要注意, Survivor的两个区是对称的,没先后关系,所以同一个区 中可能同时存在从Eden复制过来对象,和从前一个Survⅳor复制过来的对象,而复制 到年老区的只有从第一个 Survivor去过来的对象。而且, Survivor区总有一个是空的。 2. Tenured(年老代) M specification中的Heap的一部份 年老代存放从年轻代存活的对象。一般来说年老代存放的都是生命期较长的对象。 3.Perm(持久代) JVM specification中的 Method area 用于存放静态文件,如今Java类、方法等。持久代对垃圾回收没有显著影响,但是有些 应用可能动态生成或者调用一些cass,例如 Hibernate等,在这种时候需要设置一个比 较大的持久代空间来存放这些运行过程中新增的类。持久代大小通过 XX: MaxPerm size= 进行设置。 2.3 SUN JVM内存管理(优化)

1.14MB
JVM详解:带书签超清文字版.pdf
2018-11-19JVM详解:带书签超清文字版.pdf 这个是有完整目录书签的,文本内容可以复制。
2.21MB
JVM详解.doc
2019-05-19关于虚拟机的面试题,从基础到深入系列,收集的其它同仁的,实用性强
1004KB
jvm详解(调优参数等).doc
2020-06-04jvm详解
448KB
java虚拟机JVM详解ppt
2018-09-17详细介绍了java虚拟机和java内存区域的描述解释,并针对堆和栈的内存溢出进行了案例描述,是不可多得的分享资料
1.36MB
JVM详解JVM详解
2010-11-03详细分析了jvm的运行和内存管理机制
1.52MB
JVM 详解 PDF 文档
2019-04-05本文详细讲解了JVM(Java Virtual Machine)的方方面面,首先由java的特性来描绘JVM的大致应用,再细细阐述了JVM的原理及内存管理机制和调优.最后讲述了与JVM密切相关的Jav
3.71MB
JVM详解-淘宝内部资料
2018-03-25有了它,你将学到这些:java虚拟机的生命周期,JVM的体系结构,各部分详解,GC机制等
116B
深入理解Java虚拟机Jvm视频教程
2019-02-27深入理解Java虚拟机视频教程,其中包括讲解了jvm性能调优+内存模型+虚拟机原理。
1.34MB
Java JVM详解
2015-06-05本文详细讲解了JVM(Java Virtual Machine)的方方面面,首先由java的特性来描绘JVM的大致应用,再细细阐述了JVM的原理及内存管理机制和调优.最后讲述了与JVM密切相关的Jav
99KB
JVM详解之汇编角度理解本地变量的生命周期
2020-08-18主要介绍了JVM详解之汇编角度理解本地变量的生命周期,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
1.36MB
java JVM详解
2016-06-21-
752KB
jvm 参数及gc详解
2017-01-12jvm配置参数详解,以及Java gc详解
2.79MB
(46页完整版)JVM体系结构与GC调优.zip
2019-05-1546页PPT详解JVM,46页PPT详解JVM,46页PPT详解JVM,46页PPT详解JVM,46页PPT详解JVM,46页PPT详解JVM,46页PPT详解JVM,46页PPT详解JVM,46页P
14.0MB
JVM内存模型详解
2019-02-22jvm内存模型,jvm脑图,jvm调优,jvm垃圾回收算法,jvm垃圾回收器,逃逸算法等总结。
784KB
JVM、GC详解及调优
2018-06-04JVM、GC详解及调优 JVM、GC详解及调优 JVM、GC详解及调优 文档、实践
72B
jvm 虚拟机视频
2018-08-17jvm 虚拟机视频网盘
116B
深入理解JVM内存结构及运行原理全套视频加资料.txt
2019-05-292019最新深入理解JVM内存结构及运行原理(JVM调优)高级核心课程视频教程下载。JVM是Java知识体系中的重要部分,对JVM底层的了解是每一位Java程序员深入Java技术领域的重要因素。本课程
321KB
jdk8 jvm 参数图(随手参考好资料)
2019-02-27常用jvm参数都在这张图中,参考起来方便,是国外大神整理的
759KB
JVM、GC详解及调优.pdf
2020-03-03本文档详细讲解了JVM(Java Visual Mathine)的方方面面,首先由java的特性来描绘JVM的大致应用,再详细阐释了 JVM 的原理及内存管理机制和调优,讲述了与JVM密切相关的 Ja
15.34MB
java学习知识点以及面试题
2020-06-2923种设计模式,常见算法,计算机网络基础,redis详解,kafka面试,jvm详解,java并发,java集合,springcloud面试题,rabbitMQ面试题目
51B
(主讲视频)JVM原理、内存模型、性能调优
2018-01-27关于JVM虚拟机技术的一个非常不错视频教程,可以给想学习JVM原理、内存模型、性能调优等JVM技术的开发人员一个好学习指导。
11.51MB
03-JVM三种类型参数详解及实操.mp4
2021-02-0903-JVM三种类型参数详解及实操.mp4
465KB
2015-09-12-Java虚拟机详解----JVM常见问题总结【面试必问】
2015-09-152015-09-12-Java虚拟机详解----JVM常见问题总结。 博客链接:http://www.cnblogs.com/smyhvae/p/4810168.html
2.44MB
个人总结JVM脑图
2019-04-10详解JVM组成,GC,内存区域,以及一些GC机制和算法,一些简单的调优
9.69MB
JAVA核心知识点整理面试宝典
2020-12-09JAVA核心知识点整理 java集合,jvm详解 ,java多线程,线程池高并发,java IO ,JAVA 阻塞队列原理
595KB
JVM调优攻略.pdf
2020-07-27JVM调优攻略.pdf!
63KB
java高级开发面试知识点大全
2018-03-21本人花了两个多月整理的知识点,涉及:tcp/ip、java高级特性、23种设计模式、jvm详解、并发包、nio、代理、数据库、数据结构、spring机制、连接池等等
1.56MB
JVM原理一秒懂,不懂算我输.zip
2020-04-29整理好了JVM虚拟机的原理,适合初学者理论,也适合找工作面试的。内附运行图,思维导图,文字详解,并有相关算法的详解的方式供大家理解,请大家多多支持!
198B
jvm原理毕生详解,不懂算我的.zip
2020-04-29java虚拟机的原理,适合基础学习和面试,一秒带你看懂JVM,内附各种算法讲解,并且带我自己写的思维导图供你理解,有运行图方便你看。如果还不懂,算我输!
-
博客
OpenCV-学习历程23- 直方图1- Histogram(什么是直方图?直方图均衡化equalHist-提高对比度,显示更多细节)
OpenCV-学习历程23- 直方图1- Histogram(什么是直方图?直方图均衡化equalHist-提高对比度,显示更多细节)
-
学院
龙芯实训平台应用实战(希云)
龙芯实训平台应用实战(希云)
-
博客
qt与duilb对比
qt与duilb对比
-
博客
【动态规划】Lintcode 110. 最小路径和
【动态规划】Lintcode 110. 最小路径和
-
下载
Python小游戏源码-飞机大战游戏源码
Python小游戏源码-飞机大战游戏源码
-
博客
A股开户热情:1月新增投资者再破200万 市场能否走出当下阴霾?
A股开户热情:1月新增投资者再破200万 市场能否走出当下阴霾?
-
下载
2009-2017软考中级网络工程师试题答案.zip
2009-2017软考中级网络工程师试题答案.zip
-
学院
Samba 服务配置与管理
Samba 服务配置与管理
-
学院
基于python的dango框架购物商城毕业设计毕设源代码使用教程
基于python的dango框架购物商城毕业设计毕设源代码使用教程
-
博客
day2学习笔记
day2学习笔记
-
下载
C++高频面试题整合
C++高频面试题整合
-
学院
NFS 实现高可用(DRBD + heartbeat)
NFS 实现高可用(DRBD + heartbeat)
-
下载
Python脚本项目源码-根据IP地址查对应的地理信息
Python脚本项目源码-根据IP地址查对应的地理信息
-
学院
深究字符编码的奥秘,与乱码说再见
深究字符编码的奥秘,与乱码说再见
-
学院
实现 MySQL 读写分离的利器 mysql-proxy
实现 MySQL 读写分离的利器 mysql-proxy
-
博客
拉卡拉2020业绩快报:归母净利润9.35亿元 连续6年净利增长超15%
拉卡拉2020业绩快报:归母净利润9.35亿元 连续6年净利增长超15%
-
博客
洛谷P3741 honoka的键盘经典解法
洛谷P3741 honoka的键盘经典解法
-
博客
洛谷P5015 [NOIP2018 普及组] 标题统计经典解法
洛谷P5015 [NOIP2018 普及组] 标题统计经典解法
-
下载
eclipse代码行统计插件
eclipse代码行统计插件
-
下载
Python脚本项目源码-邮箱安全性验证
Python脚本项目源码-邮箱安全性验证
-
博客
洛谷P1914 小书童——凯撒密码经典解法
洛谷P1914 小书童——凯撒密码经典解法
-
下载
Python小游戏源码-植物大战僵尸项目源码
Python小游戏源码-植物大战僵尸项目源码
-
博客
洛谷P1308 [NOIP2011 普及组] 统计单词数经典解法
洛谷P1308 [NOIP2011 普及组] 统计单词数经典解法
-
下载
SLAM导航机器人零基础实战系列-第1章_Linux基础
SLAM导航机器人零基础实战系列-第1章_Linux基础
-
下载
SLAM导航机器人零基础实战系列-全部PDF文档整理.zip
SLAM导航机器人零基础实战系列-全部PDF文档整理.zip
-
博客
碳中和目标下A股先锋调研:钢铁行业加速碳达峰 多行业影响已现
碳中和目标下A股先锋调研:钢铁行业加速碳达峰 多行业影响已现
-
博客
02-27 MySQL语句bug
02-27 MySQL语句bug
-
博客
1. SQL标准模块学习-知识铺垫&环境搭建
1. SQL标准模块学习-知识铺垫&环境搭建
-
博客
新一轮5G建设招标开启
新一轮5G建设招标开启
-
学院
Mycat 实现 MySQL的分库分表、读写分离、主从切换
Mycat 实现 MySQL的分库分表、读写分离、主从切换