java jvm虚拟机详解


-
jvm详解。本来想免费的,但是为什么现在都一定要写资源分呢?想要免费的631362504@qq.com 给我发邮件
Java程序的开发流程★ class Helloworld public static void main(String args[])( 编写井运行jaNa程序 System. out. printin( Hello Hello World World! ") 保存 HelloWorld源代码 后缀名java 保存后锡名为 ·所有代码必须保存为扩展名 的文代 Java 源文件名称必须和类名相同 绵译问a文名java class关键字后面的即类名 cass文件 正确的文件名为: 生成后级名为 HelloWorld. java s的文 编译源代码 运行v文件名 javac Helloworld. java 运行结果 Hello World 运行程序: 在ms口 生成结果 java Helloworld 1.3Java运行的原理 Java运行的原理 A java B java Cjava A class B class C class\ 通过本 地或网 Java编译器 络传输 Java Java Java Class 虚拟机虚拟机虚拟机 文件 i A class B class C class Object class String class 程序的 class文件 Java AP|的Cass文件i Java运行的原理 Ja原程序(扩展名为.java JVM ( Java Virtual aya编译程序 Machine)-Java虚拟机 Java字节码文件(扩展名为. class) 一个虚构出来的计算机 执行 通过在实际的计算机上仿 JvM證拟机 真模拟以各种计算机功能来 Windows Linux卜的 能直接解释 实现的 的ay lava字节码Java字节码 码解 解秤程序 的cPU Java虚拟机有自己完善的硬 件架构如处理器、堆栈 机机杀非令 机机器指令 寄存器等还具有相应的指 Windows Linux 令系统。 操作系统 操作系统 1.4半编译半解释 半编译半解释? 系统先将用户输入的指令翻译成一种通用的,比较规则的中间形 式的代码,保密性强,运行时则由所在机器的解释器进行解释 java语言的开发效率高,但执行效率低。(相当于c++的 55%) ource Code public class Hellowork Naive Machine Code public staic void main String args 1( System out printin('He lo wordl) Interpret Class File Load Java virtual Machin 1.5平台无关性 平台无关性? 何谓平台:即一套特定的硬件再加上运行其上的操作系统,即硬件十软件。编程 语言对不同平台的支持有所不同。(VB、c/C++、Java) Java完全不用修改任何源代码,也不用重新编译就可以直接移植到其他平台。 Java的平台无关性给程序的部署带来了很大的灵活性,节约开发和升级成本。 √怎样理解平台无关性呢?JwM( java Virtual Machine)起到了主要作用。JwM是运 行在平台之上的程序,它能够虚拟出一台目标机,所有字节码就是在虚拟出的目 标机上运行。 程序不可能在所有的平台上都可以运行:(1)因为不同平台的内存管理模式和 CPU的指令集等都有很大的差别。(2)为了让java实现平台无关性,Sun公司在不 同平台上用软件模拟出虚拟目标机,虚拟出CP指令集和内存。(3)因此虽然平 台间的差异比较大,但是虚拟出来的JWM是完全一样的。(4)Java的字节码仅仅 运行在JW上,不会和平台的底层直接打交道。(5)JM根据平台的不同,把字节 码解释成不同的本地代码(6)JwM就像翻译,把通用的普通话翻译成不同地方特 色的方言。 但是有一个缺点:java代码必须要经过JwM解释才能运行,使得java运行的效率降 低 ˇWoRA: Write Once, Run Anywhere(一次编写到处运行) JVM内存模型 2.1JM规范 JVM specification对JWM内存的描述 首先我们来了解 JVM specification中的JM整体架构。如卜图: CLASS FILES CLASS LOADER RUNTIME DATA AREA METHOD AREA JAVA STACK NATTVE METHOD STACK HEAP PROGRAM COUNTER REGISTER NATIVE NATIVE EXECUTION ENGINE INTERFACE LIBRARIES RUNTIME DATA AREAS SHARED AMONG ALL THREADS THREAD SPECIFIC RUNTIME DATA AREAS ojavabeanwordpress.com 主要包括两个子系统和两个组件: Class loader(类装载器)子系统, Execution engine(执行引擎)子系统;Ruη time data area.(运行时数据区域) 组件,\ ative interface(木地接口)组件。 Class loader子系统的作用:根据给定的全限定名类名(如 java.lang.0 oject)来装载 class文件的内容到 Runtime data area屮的 method area(方法区域)。 Java程序员可以 extends java.lang. Classloader类来写自 己的 Class loader Execution engine子系统的作用:执行 classes中的指令。任何JWM specification实现(JDK)的核心是 Execution engine,换句话说:Sun的JDK 和IBM的JK好坏主要取决于他们各自实现的 Execution engine的好坏。每个 运行中的线程都有一个 Execution engine的实例 Native interface组件:与 native libraries交互,是其它编程语言交 互的接口。 Runtime data area组件:这个组件就是JM中的内存。下面对这个部分 进行详细介绍。 JVM Shared among all Threads Thread 1 Heap Thread 2 PC Stack Per Method Basis Class Instances and Arrays C Stack Per Method Basis Instance variables Frame 1 Frame 2 Frame 1 Frame 2 Reference Local Variables Partial Results Local Variables Partial Results (Including Parameters) [Including Parameters) Operand Stack Method Area Operand Stack Runtime Constant Pool Method Code Per Class basis Static Variables and Methods Runtime Constant Pool Native Method Stacks Method Code Per Class Basis 调用 Static Variables and Methods 一JMZ外,採作系统内存 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一样, method area是多线程共享的,因此要考虐多线程访问的同步问 题。比如,假设同时两个线程都企图访问一个名为Lava的类,而这个类还没有 内装载入虚拟机,那么,这时应该只有个线程去装载它,而另个线程则只能 等待。(这里可能出现的异常java.lang. OutofMemoryError: PermGen full) Java stack Java stack以帧为单位保存线程的运行状态。虚拟机只会直接对Java stack执行两种操作:以帧为单位的压栈或岀栈。每当线程调用一个方法的时 候,就对当前状态作为一个帧侏存到 java stack中(压栈);当一个方法调用返 回时,从 java stack弹出一个帧(出栈)。栈的大小是有一定的限制,这个可能 出现 Stack0 verFlow问题。下面的程序可以说明这个问题。 public class testStackOverFlow I public static void main(string[] args)[ Recursive r= new Recursive o r doit(10000) / Exception in thread main java. lang StackOverflowError class recursive public int doit(int t) if(t<=1) return 1 return t doit(t-1) Program counter 每个运行中的Java程序,每一个线程都有它自己的PC寄存器,也是该线程启动时创建 的。PC寄存器的内容总是指向下一条将被执行指令的饿&dquo;地址& rdquo;这里的 &|dquo;地址& rdquo;可以是一个本地指针,也可以是在方法区中相对应于该方法起始指 令的偏移量。 Native method sta 对于一个运行中的Java程序而言,它还能会用到一些跟本地方法相关的数据区。当某个 线程调用一个本地方法时,它就进入了一个全新的并且不再受虚拟机限閘的世界。本地 方法可以通过本地方法接口来访问虚拟机的运行时数据区,不止与此,它还可以做任何 它想做的事情。比如,可以调用寄存器,或在操作系统中分配内存等。总之,木地方法 具有和MwM相同的能力和权限。(这里出现M无法控制的内存溢出问题 native heap OutOfMemory 2.2 Sun jvm Sun jvm中对 VM Specification的实现(内存部分) JVM Specification只是抽象的说明了M实例按照子系统、内存区、数据类型以及指令 这儿个术语来描述的,但是规范并非是要强制规定Java虚拟机实现内部的体系结构, 更多的是为了严格地定义这些实现的外部特征 Sun vn实现中: Runtime data area(JVM内存)五个部分中的 Java stack, Program Counter, Native method stack三部分和规范中的描述基本一致;但对Heap和 Method Area进行了自己独特的实现。这个实现和 Sun jvm的 Garbage collector(垃圾回收)机 制有关,下面的章节进行详细描述 垃圾分代回收算法( Generational collecting 基于对对象生命周期分析后得出的垃圾回收算法。把对象分为年青代、年老代、持久 代,对不同生命周期的对象使用不同的算法(上述方式中的一个)进行回收。现在的垃 圾冋收器(从J2SE1.2开始)都是使用此算法的 Tenured en You Perm 如上图所示,为Java堆中的各代分布。 1. Young(年轻代) JVM specification中的Heap的一部份 年轻代分三个区。一个Eden区,两个 Survivor区。大部分对象在Eden区中生成。当 Eden区满时,还存活的对象将被复制到 Survivor区(两个中的一个),当这个 Survivor 区满时,此区的存活对象将被复制到另外一个 Survivor区,当这个 Survivor去也满了的 时候,从第一个 Survivor区复制过米的并且此时还存活的对象,将被复制& aldquo;年老区 ( Tenured& rdquo;。需要注意, Survivor的两个区是对称的,没先后关系,所以同一个区 中可能同时存在从εden复制过来对象,和从前一个 Survivor复制过来的对象,而复制 到年老区的只有从第个 Survivor去过来的对象。而且,Survⅳor区总有个是空的 2. Tenured(年老代) M specification中的Heap的一部份 年老代存放从年轻代存活的对象。一般米说年老代存放的都是生命期较长的对象。 3Perm(持久代) VM specification中的 Method area 用于存放静态文件,如今Java类、方法等。持久代对垃圾回收没有显著影响,但是有些 应用可能动态生成或者调用些cass,例如 Hibernate等,在这种吋候需要设置个比 较大的持久代空间来冇放这些运行过程中新增的类。持久代大小通过XX: MaxPerm size= 进行设置。 2.3 SUN JVM内存管理(优化)

448KB
java虚拟机JVM详解ppt
2018-09-17详细介绍了java虚拟机和java内存区域的描述解释,并针对堆和栈的内存溢出进行了案例描述,是不可多得的分享资料
1.97MB
jvm详解(java虚拟机详解)
2011-12-21jvm详解高清pdf版,本文详细讲解了 JVM(Java Virtual Machine)的方方面面,首先由 java 的特性来描绘 JVM 的大致应用,再细细阐述了 JVM 的原理及内存管理机制和调优.最后讲述了与 JVM 密切相 关的 Java GC 机制.
1000KB
Java 虚拟机面试题全面解析(干货)
2016-03-22Java 虚拟机面试题全面解析,《深入理解Java虚拟机》干货版,自己总结,希望能够帮助大家,免费下载~
1021KB
JVM内幕:java虚拟机详解
2016-09-20一个文档让你读懂什么事java虚拟机,让你的编程生涯更加的透彻!
39.95MB
JAVA虚拟机解读入门
2018-01-29如果你对java虚拟机感兴趣,并且从未接触过JVM,那么这本书将带你走入JVM世界。
847KB
深入JVM概要 JVM详解
2010-11-18JVM 深入JVM JVM详解 JVM知识点 java虚拟机 深入java虚拟机
64B
深入理解Java虚拟机视频教程(jvm性能调优+内存模型+虚拟机原理)视频教程
2018-08-02视频目录 第1节说在前面的话 [免费观看] 00:05:07分钟 | 第2节整个部分要讲的内容说明 [免费观看] 00:06:58分钟 | 第3节环境搭建以及jdk,jre,jvm的关系 [免费观看] 00:20:48分钟 | 第4节jvm初体验-内存溢出问题的分析与解决 [免费观看] 00:17:59分钟 | 第5节jvm再体验-jvm可视化监控工具 [免费观看] 00:21:17分钟 | 第6节杂谈 [免费观看] 00:12:37分钟 | 第7节Java的发展历史00:27:24分钟 | 第8节Java的发展历史续00:02:27分钟 | 第9节Java技术体系00:08:46分钟 | 第10节jdk8的新特性00:07:31分钟 | 第11节lanmbda表达式简介00:07:02分钟 | 第12节Java虚拟机-classic vm00:06:06分钟 | 第13节Java虚拟机-ExactVM00:03:35分钟 | 第14节Java虚拟机-HotSpotVM00:04:23分钟 | 第15节Java虚拟机-kvm00:03:04分钟 | 第16节Java虚拟机-JRockit00:04:12分钟 | 第17节Java虚拟机-j900:04:23分钟 | 第18节Java虚拟机-dalvik00:02:20分钟 | 第19节Java虚拟机-MicrosoftJVM00:03:57分钟 | 第20节Java虚拟机-高性能Java虚拟机00:02:58分钟 | 第21节Java虚拟机-TaobaoVM00:03:06分钟 | 第22节Java内存区域-简介00:07:56分钟 | 第23节Java内存区域-Java虚拟机栈00:12:04分钟 | 第24节Java内存区域-程序计数器00:12:54分钟 | 第25节Java内存区域-本地方法栈00:02:39分钟 | 第26节Java内存区域-堆内存00:05:08分钟 | 第27节Java内存区域-方法区00:06:32分钟 | 第28节Java内存区域-直接内存和运行时常量池00:15:53分钟 | 第29节对象在内存中的布局-对象的创建00:21:19分钟 | 第30节探究对象的结构00:13:47分钟 | 第31节深入理解对象的访问定位00:08:01分钟 | 第32节垃圾回收-概述00:06:20分钟 | 第33节垃圾回收-判断对象是否存活算法-引用计数法详解00:14:08分钟 | 第34节垃圾回收-判断对象是否存活算法-可达性分析法详解00:07:09分钟 | 第35节垃圾回收算法-标记清除算法00:04:36分钟 | 第36节垃圾回收算法-复制算法00:14:35分钟 | 第37节垃圾回收算法-标记整理算法和分代收集算法00:05:24分钟 | 第38节垃圾收集器-serial收集器详解00:09:45分钟 | 第39节垃圾收集器-parnew收集器详解00:04:53分钟 | 第40节垃圾收集器-parallel收集器详解00:11:02分钟 | 第41节垃圾收集器-cms收集器详解00:14:58分钟 | 第42节最牛的垃圾收集器-g1收集器详解00:18:04分钟 | 第43节内存分配-概述00:04:23分钟 | 第44节内存分配-Eden区域00:22:51分钟 | 第45节内存分配-大对象直接进老年代00:06:42分钟 | 第46节内存分配-长期存活的对象进入老年代00:03:40分钟 | 第47节内存分配-空间分配担保00:04:54分钟 | 第48节内存分配-逃逸分析与栈上分配00:10:32分钟 | 第49节虚拟机工具介绍00:10:27分钟 | 第50节虚拟机工具-jps详解00:11:20分钟 | 第51节虚拟机工具-jstat详解00:09:20分钟 | 第52节虚拟机工具-jinfo详解00:05:03分钟 | 第53节虚拟机工具-jmap详解00:08:48分钟 | 第54节虚拟机工具-jhat详解00:08:10分钟 | 第55节虚拟机工具-jstack详解00:10:19分钟 | 第56节可视化虚拟机工具-Jconsole内存监控00:07:09分钟 | 第57节可视化虚拟机工具-Jconsole线程监控00:12:18分钟 | 第58节死锁原理以及可视化虚拟机工具-Jconsole线程死锁监控00:10:38分钟 | 第59节VisualVM使用详解00:08:03分钟 | 第60节性能调优概述00:11:22分钟 | 第61节性能调优-案例100:23:28分钟 | 第62节性能调优-案例200:10:05分钟 | 第63节性能调优-案例300:12:41分钟 | 第64节前半部分内容整体回顾00:15:41分钟 | 第65节Class文件简介和发展历史 [免费观看] 00:11:26分钟 | 第66节Class文件结构概述 [免费观看] 00:16:50分钟 | 第67节Class文件设计理念以及意义 [免费观看] 00:13:41分钟 | 第68节文件结构-魔数 [免费观看] 00:09:49分钟 | 第69节文件结构-常量池 [免费观看] 00:23:44分钟 | 第70节文件结构-访问标志 [免费观看] 00:11:36分钟 | 第71节文件结构-类索引00:11:26分钟 | 第72节文件结构-字段表集合00:13:21分钟 | 第73节文件结构-方法表集合00:10:06分钟 | 第74节文件结构-属性表集合00:18:23分钟 | 第75节字节码指令简介00:09:18分钟 | 第76节字节码与数据类型00:09:34分钟 | 第77节加载指令00:09:33分钟 | 第78节运算指令00:10:24分钟 | 第79节类型转换指令00:13:42分钟 | 第80节对象创建与访问指令00:09:38分钟 | 第81节操作树栈指令00:03:27分钟 | 第82节控制转移指令00:11:58分钟 | 第83节方法调用和返回指令00:06:37分钟 | 第84节异常处理指令00:09:44分钟 | 第85节同步指令00:07:34分钟 | 第86节类加载机制概述00:07:26分钟 | 第87节类加载时机00:13:15分钟 | 第88节类加载的过程-加载00:15:15分钟 | 第89节类加载的过程-验证00:10:24分钟 | 第90节类加载的过程-准备00:05:40分钟 | 第91节类加载的过程-解析00:14:04分钟 | 第92节类加载的过程-初始化00:19:41分钟 | 第93节类加载器00:22:41分钟 | 第94节双亲委派模型00:17:03分钟 | 第95节运行时栈帧结构00:08:46分钟 | 第96节局部变量表00:20:48分钟 | 第97节操作数栈00:08:36分钟 | 第98节动态连接00:02:56分钟 | 第99节方法返回地址和附加信息00:03:24分钟 | 第100节方法调用-解析调用00:09:49分钟 | 第101节方法调用-静态分派调用00:16:21分钟 | 第102节方法调用-动态分派调用00:09:02分钟 | 第103节动态类型语言支持00:09:27分钟 | 第104节字节码执行引擎小结00:03:38分钟 | 第105节总结与回顾00:10:55分钟
5.22MB
java虚拟机详细讲解
2018-03-31java虚拟机java虚拟机java虚拟机java虚拟机java虚拟机java虚拟机
47KB
详解java中jvm虚拟机栈的作用
2020-08-25主要介绍了jvm虚拟机栈的作用,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
32KB
java虚拟机参数详解
2012-04-10详细介绍java 虚拟机的相关参数设置和作用
465KB
2015-09-12-Java虚拟机详解----JVM常见问题总结【面试必问】
2015-09-152015-09-12-Java虚拟机详解----JVM常见问题总结。 博客链接:http://www.cnblogs.com/smyhvae/p/4810168.html
141B
JVM虚拟机深度讲解视频
2019-07-17此链接里面为jvm讲解视频,里面详细介绍了虚拟机的组成部分,垃圾回收算法,以及垃圾回收器和JVM调优工具等介绍
8.58MB
java虚拟机原理详解1
2008-04-28一本非常好的详细介绍java虚拟机实现原理及详细介绍的的好书 有兴趣了解JVM底层知识的看看,太大了,分三部分,都下了才能解压
2.8MB
Java虚拟机详解
2011-10-17Java虚拟机(JVM) 处在核心的位置,是程序与底层操作系统和硬件无关的关键。它的下方是移植接口,移植接口由两部分组成:适配器和Java操作系统, 其中依赖于平台的部分称为适配器;JVM 通过移植接口在具体的平台和操作系统上实现;在JVM 的上方是Java的基本类库和扩展类库以及它们的API, 利用Java API编写的应用程序(application) 和小程序(Java applet) 可以在任何Java平台上运行而无需考虑底层平台, 就是因为有Java虚拟机(JVM)实现了程序与操作系统的分离,从而实现了Java 的平台无关性。
1.35MB
java虚拟机原理详解3
2008-04-28一本非常好的详细介绍java虚拟机实现原理及详细介绍的的好书 有兴趣了解JVM底层知识的看看,太大了,分三部分,都下了才能解压
1.0MB
最新 java se8 虚拟机 详解
2014-03-20java se 8 的虚拟机概述,血药的同学,帮忙顶一下!嘻嘻诶。
2.2MB
java虚拟机详解.docx
2018-08-12JVM的每个实例都有一个它自己的方法域和一个堆,运行于JVM内的所有的线程都共享这些区域;当虚拟机装载类文件的时候,它解析其中的二进制数据所包含的类信息,并把它们放到方法域中;当程序运行的时候,JVM把程序初始化的所有对象置于堆上;而每个线程创建的时候,都会拥有自己的程序计数器和 Java栈,其中程序计数器中的值指向下一条即将被执行的指令,线程的Java栈则存储为该线程调用Java方法的状态;本地方法调用的状态被存储在本地方法栈,该方法栈依赖于具体的实现。 下面分别对这几个部分进行说明。
2.8MB
java虚拟机详解
2013-06-05JVM是我们Javaer的最基本功底了,此文档详细介绍了java虚拟机组成部分,内存管理,jvm调优等。以及一些问题的处理。
56.16MB
深入Java虚拟机_002_深入详解JVM之类加载器深度剖析、根、扩展及系统类加载器
2012-12-09深入Java虚拟机_002_深入详解JVM之类加载器深度剖析、根、扩展及系统类加载器
Linux系统编程:入门篇视频教程
2018-10-16Linux系统编程视频课程为《Linux系统编程》入门篇,主要针对零基础的Linux开发学员科普Linux系统编程的概念以及需要掌握的各种技能,掌握Linux命令编写、Linux学习路线并熟悉嵌入式设备编程的方法。为后续的Linux系统编程深入学习打下良好的基础。
程序员的数学:概率统计
2019-09-19编程的基础是计算机科学,而计算机科学的基础是数学。因此,学习数学有助于巩固编程的基础,写出更健壮的程序。本门课程主要讲解程序员必备的数学知识,借以培养程序员的数学思维。学习者无需精通编程,也无需精通数学。从概率统计、线性代数、微积分、优化理论、随机过程到当前大热的机器学习,讲师幽默风趣,课件精致美观,深入浅出带你重学数学!
JAVA入门精品课程
2018-12-20课程目标: 1、让初学者从小白开始,善于运用知识点,解脱学习的苦恼 2、能够学习更多的工作中使用技巧,成为编程高手
JavaEE+大数据+2个实战项目终极套餐震撼来袭
2017-05-19该套视频教程共包含16门课程,分别是Linux入门到精通、大型ERP项目实战教程、solr教程、Lucene教学视频、Java反射与注解开发、Hadoop大数据入门教程、Activiti工作流教程、redis高并发由浅入深、webservice入门教程、hibernate4入门教程、大型分布式redis+solr+Linux+nginx+springmvc+mybatis电商项目、struts2深入浅出、oracle入门到大神、springmvc深入浅出、spring 3.2教程、mybatis入门到精通教程、Java EE教程、Mysql教程。
-
下载
遂宁市2014-2015年八年级下期末数学模拟试卷(一)含答案解析.doc
遂宁市2014-2015年八年级下期末数学模拟试卷(一)含答案解析.doc
-
下载
vtkJs_ply.zip
vtkJs_ply.zip
-
下载
濉溪县2016-2017学年八年级上第一次质检数学试卷含答案解析.doc
濉溪县2016-2017学年八年级上第一次质检数学试卷含答案解析.doc
-
下载
bayesclassifier.exe
bayesclassifier.exe
-
下载
Rockchip Pin-Ctrl 开发指南 V1.0-20160725.pdf
Rockchip Pin-Ctrl 开发指南 V1.0-20160725.pdf
-
下载
PrimePower User Guide
PrimePower User Guide
-
下载
Rockchip_Developer_Guide_Linux4.4_PCIe_CN.pdf
Rockchip_Developer_Guide_Linux4.4_PCIe_CN.pdf
-
下载
基于Tcp的Socket,实现客户端短线重连,服务端断线重连,保持长连接。
基于Tcp的Socket,实现客户端短线重连,服务端断线重连,保持长连接。
-
下载
数据结构知识点.txt
数据结构知识点.txt
-
下载
javax.xml.bind.jar
javax.xml.bind.jar
