专注Java教育14年 全国咨询/投诉热线:444-1124-454
星辉LOGO图
始于2009,口口相传的Java黄埔军校
首页 hot资讯 JVM是什么?初学者对JVM了解多少

JVM是什么?初学者对JVM了解多少

更新时间:2020-10-22 17:14:00 来源:星辉 浏览1050次

说到java,大家都知道这是一种十分流行且应用广泛的计算机语言,接触过java语言的人大多也都知道面向对象性、线程安全性和跨平台性等都是它的特点。那么是什么使java语言具备了这些优秀的特性呢,JVM就是实现了众多特性中一个的工具,这篇文章带大家学习JVM是什么,希望java初学者可以通过下面的内容对JVM有一个总体的认识和了解。


JVM是什么,就是java虚拟机,是英文Java Virtual Machine的缩写,是由软件技术模拟出计算机运行的一个虚拟的计算机 ,同时JVM是构成java技术的重要一部分,先来看看java技术的结构图:

image.png


运行期环境代表着Java平台,开发人员编写Java代码(.java文件),然后将之编译成字节码(.class文件),JVM才能识别并运行它,JVM针对每个操作系统开发其对应的解释器,所以只要其操作系统有对应版本的JVM,那么这份Java编译后的代码就能够运行起来,这就是Java能一次编译,到处运行的原因。


要全面的理解JVM是什么,要知道如下的内容:


1、JVM堆

Java堆是和Java应用程序最密切的内存空间,几乎所有的对象都放到堆中。并且堆完全由JVM管理,通过垃圾回收机制,垃圾对象会被自动清理,而不需显式的释放。根据垃圾回收机制的不同,Java堆通常被分为以下的集中不同的结构:New Generation:由 Eden + Survivor (From Space + To Space)组成;Eden:所有的new出来的新对象都存放到Eden区;Survivor Space:Eden每次垃圾清理过后,任然没又被清理的对象,会转移到交换区中;Old Generation:在交换区中未被清理的对象(默认清理18次标记),将转移到老年代。


2、JVM栈

Java栈是一块线程私有的内存空间,Java栈和线程执行密切相关。线程的执行基本单位就是函数调用,每次函数调用的数据就会通过Java栈传递。Java栈与数据结构上的栈有着类似的含义,它是一块先进后出的数据结构,只支持出栈和入栈的两种操作。在Java栈中保存的主要内容为栈帧。每次调用一个函数,都会有一个对应的栈帧被压入Java栈。每一个函数调用结束,都会有一个栈帧被弹出Java栈。例如:

image.png


如图所示,每次调用一个函数都会被当做栈帧压入到栈中。其中每一个栈帧对应一个函数。由于每次调用函数都会生成一个栈帧,从而占用一定的栈空间。如果线程中存在大量的递归操作,会频繁的压栈,导致栈的深入过于深入,当栈的空间被消耗殆尽的时候,会抛出StackOverflowError栈溢出错误。


3、JVM方法区

它主要存放一些虚拟机加载的类信息,常量,静态变量,即使编译器后的代码等数据。根据Java虚拟机规范的规定,当方法区无法满足内存分配需求时,将抛出OutOfMemoryError异常。运行时常量池:运行时常量区是方法区的一部分。用于存放编译期生成的各种字面量和符号引用,这部分内容将在类加载后进入方法区的运行时常量池中存放。还会有一些符号引用转换的直接引用一保存在运行时常量池中。运行时常量池具备动态性,也就是运行期间也可以将新的常量放入池中,例如String.intern()方法。当常量池无法再申请到内存时,会抛出OutOfMemoryError异常。


关于JVM是什么的问题,一句话总结下来就是:Java虚拟机是一种跨平台的软件,是一种新的网络计算平台。该平台包括许多相关的技术,使得同一种应用可以运行在不同的平台上。使用Java虚拟机是实现java语言与平台无关性的关键,所以在学习了JVM是什么后,要通过java教程来学习更多的JVM其他知识。


提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>