原文:http://www.cnblogs.com/sunada2005/p/3577799.html
1. 什么是JVM?
JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来 实现的。Java虚拟机包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域。 JVM屏蔽了与具体操作系统平台相关的信息,使Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。 JVM在执行字节码时,实际上最终还是把字节码解释成具体平台上的机器指令执行。
Java语言的一个非常重要的特点就是与平台的无关性。而使用Java虚拟机是实现这一特点的关键。一般的高级语言如果要在不同的平台上运行,至少 需要编译成不同的目标代码。而引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java语言使用Java虚拟机屏蔽了与具体平 台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。Java虚拟机在执行 字节码时,把字节码解释成具体平台上的机器指令执行。这就是Java的能够“一次编译,到处运行”的原因。
2. JRE/JDK/JVM是什么关系?
3. JVM原理
a) 启动。启动一个Java程序时,一个JVM实例就产生了,任何一个拥有public static void
main(String[] args)函数的class都可以作为JVM实例运行的起点
b) 运行。main()作为该程序初始线程的起点,任何其他线程均由该线程启动。JVM内部有两种线程:守护线程和非守护线程,main()属于非守护线程,守护线程通常由JVM自己使用,java程序也可以表明自己创建的线程是守护线程
c) 消亡。当程序中的所有非守护线程都终止时,JVM才退出;若安全管理器允许,程序也可以使用Runtime类或者System.exit()来退出
- 类装载器(ClassLoader)(用来装载.class文件)
- 执行引擎(执行字节码,或者执行本地方法)
- 运行时数据区(方法区、堆、java栈、PC寄存器、本地方法栈)
7. JVM运行时数据区
第一块: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的错 误信息。
第五块:运行时常量池(Runtime Constant Pool)
存放的为类中的固定的常量信息、方法和Field的引用信息等,其空间从方法区域中分配。
第六块:本地方法堆栈(Native Method Stacks)
JVM采用本地方法堆栈来支持native方法的执行,此区域用于存储每个native方法调用的状态。
8. JVM垃圾回收
GC (Garbage Collection)的基本原理:将内存中不再被使用的对象进行回收,GC中用于回收的方法称为收集器,由于GC需要消耗一些资源和时间,Java在对对象的生命周期特征进行分析后,按照新生代、旧生代的方式来对对象进行收集,以尽可能的缩短GC对应用造成的暂停
(1)对新生代的对象的收集称为minor GC;
(2)对旧生代的对象的收集称为Full GC;
(3)程序中主动调用System.gc()强制执行的GC为Full GC。
不同的对象引用类型, GC会采用不同的方法进行回收,JVM对象的引用分为了四种类型:
(1)强引用:默认情况下,对象采用的均为强引用(这个对象的实例没有其他对象引用,GC时才会被回收)
(2)软引用:软引用是Java中提供的一种比较适合于缓存场景的应用(只有在内存不够用的情况下才会被GC)
(3)弱引用:在GC时一定会被GC回收
(4)虚引用:由于虚引用只是用来得知对象是否被GC
相关推荐
jvm简介
Java虚拟机(JVM)是Java技术的核心组成部分,它的出现旨在实现硬件和操作系统无关性,使得Java程序可以在任何支持JVM的平台上运行。JVM通过解释和执行字节码(bytecode),即一种与硬件无关的指令集,来实现这一...
#### 一、JVM简介 **1.1 JVM是什么** Java Virtual Machine (JVM),即Java虚拟机,是Java技术的核心组成部分之一。它是一种抽象计算机,能够执行Java字节码(一种中间代码)的虚拟机环境。JVM的设计目的是为了使...
#### 一、JAVA语言及JVM简介 **JAVA语言**是由Sun Microsystems公司(后被Oracle收购)的詹姆斯·高斯林(James Gosling)等人于1995年设计并发布的。JAVA语言是一种通用型、面向对象的编程语言,支持并发编程,其...
2. **JVM简介** - JVM(Java Virtual Machine)是Java程序的运行环境,它负责执行Java字节码。 - JVM包括类加载器、运行时数据区、执行引擎等核心组件。 - 类加载器负责将.class文件加载到内存中,并转换为可供...
#### 三、JVM简介 **JVM**是Java Virtual Machine的简称,由Oracle公司(原SUN公司)开发维护,是运行Java应用程序的基础环境。JVM的设计目标是为了提供一个跨平台的运行环境,使得Java程序可以在不同的操作系统上...
#### 一、JVM简介 Java虚拟机(Java Virtual Machine,简称JVM)是运行所有Java程序的基础环境。它是一个虚构的计算机,包括一个即时编译器(JIT)、垃圾回收器(GC)和类加载器等核心组件。JVM提供了一个运行时...
#### 一、JVM简介 JVM,即Java Virtual Machine(Java虚拟机),是一种能够执行特定机器指令的虚拟机。它通过软件模拟了一个完整的计算机系统,允许Java程序在任何支持JVM的平台上运行而无需重新编译。 ##### 特点...
#### 一、JVM简介 Java虚拟机(JVM, Java Virtual Machine)是一种用于执行Java字节码的虚拟机,它位于硬件与操作系统之上,提供了一个运行Java程序的安全隔离环境。JVM的主要作用是解释执行Java字节码,同时也提供...
#### 一、JVM简介及跨平台性 ##### 1.1 JVM定义 JVM(Java Virtual Machine),即Java虚拟机,是一种用于计算设备的规范,它模拟了一个计算机环境,允许Java程序在这个虚拟环境中运行而无需针对不同平台进行重新...
一、JVM简介 Java虚拟机(JVM)是Java运行环境的一部分,它的主要任务是执行Java字节码。字节码是一种中间语言,由Java编译器将源代码编译成,然后由JVM解析并执行。JVM的存在使得Java程序可以跨平台运行,因为它...
这个ppt主要是介绍了java虚拟机的各种特点和好处
#### 一、JVM简介 - **定义**: Java虚拟机(JVM)是一个可以执行二进制字节码的软件层,它将字节码转换为特定平台上的机器指令执行。 - **特点**: - 一次编译,到处运行:Java代码被编译成字节码后,可以在任何...
### JVM中文规范简介 #### 一、Java虚拟机(JVM)概述 ##### 1. 为什么使用Java虚拟机 Java语言的重要特性之一是其跨平台性,而这正是通过Java虚拟机(JVM)得以实现的关键所在。为了使Java程序能够在不同操作系统...
#### 一、Java及JVM简介 Java自1995年由Sun Microsystems发布以来,便迅速成为了最受欢迎的编程语言之一。根据TIOBE语言热度排行榜,Java持续保持在前列,这证明了其在编程领域的持久影响力。 **1.1 Java发展的...
Java与JVM简介 - **Java**: 是一门面向对象的高级编程语言,旨在实现“一次编写,到处运行”的理念。 - **JVM**: Java Virtual Machine 的缩写,是一种用于执行Java字节码的虚拟机,能够确保Java程序在不同的平台...
#### JVM简介 Java虚拟机(JVM)是一种能够执行Java字节码的虚拟机。它为Java程序提供了一个独立于硬件平台的运行环境,使得Java程序可以在任何安装了JVM的平台上运行。JVM负责管理程序的内存分配、垃圾回收以及...
- **JVM简介**:Java Virtual Machine是执行Java字节码的虚拟机。 - **JVM架构**:主要包括类加载器子系统、执行引擎、内存管理器等组件。 ##### 4.2 JVM运维实用排障工具 - **常用工具**:jstat、jmap、jstack等...
#### 一、JVM概述与HotSpot简介 Java虚拟机(JVM)是Java技术的核心组成部分之一,它为Java程序提供了运行时环境。本节将详细介绍JVM的基本概念及其核心技术——HotSpot。 **HotSpot VM** 是Oracle公司提供的一个高...