首先明白JVM是什么?它为什么这么如此重要,JVM就是Java运行虚拟机,想要在Java领域深入研究,那么我们的JVM不可不学,还有要深入的学。虚拟机有两种分别是程序虚拟机和系统虚拟机,JVM就是程序虚拟机。Java是“一次编译,到处运行”的这样一个过程。Java程序通过一次的编译之后,就会将Java代码编译为字节文件,也就是平时说的Class文件如下图:
Java一次编译的实现弄清JVM,还得先知道JDK和JRE是什么?JDK就是Java的工具包是程序员使用Java语言编写的Java程序所需的开发工具包,JRE是Java运行环境也就是Java虚拟机。Java程序编译后的文件是xxx.class文件的,它是按照Java的标准编译的文件,然而Java虚拟机是给Java制定的标准的,很快结果,JVM是运行Java程序的。
云办公JVM的作用就是给Java程序提供一个独立的运行环境,要知道Java是跨平台的,不需要依赖任何的其他的平台和系统,这样Java的可扩展性很强,Java的内存结构以及是怎么样实现的如下图:
JVM内部结构内存空间主要包括四个方法区、Java堆、Java栈、本地方法栈,接下来讲解它们的作用。1,Java堆它是线程共享的区域,比如我们类的实例就存放在这个Java堆里面的,也就是Java垃圾收集器管理的主要区域GC堆;1,方法区是各个线程的共享区域,主要存放类信息、静态变量、常量、接口、类的权限定名、字段等;3,Java栈它是每个线程的私有区域,一个线程对应一个Java栈,生命周期和线程一样,当我们执行的每一个方法就会往栈中压入一个元素(元素叫:栈帧);4,本地方法栈主要是为使用到本地操作系统方法服务的。
JVM垃圾收集器我们要知道栈中的数据是以栈帧的格式存在的,而栈帧是一个内存区块,是一个数据集,而且是一个方法和运行周期的数据集,当执行一个方法或者调用时它就会产生一个栈帧(StackFrame)F1,然后压入到栈里面,以此类推,每次执行方法或者调用就会产生栈帧压入栈中,这就是遵循了“先进后出、后进先出”的原则。
讲解程序代码理解Java虚拟机最为重要的就是弄清Java堆的优化,也就是Java堆内存空间的控制,为什么呢?因为Java堆里面会产生大量的垃圾GC,它会导致程序变慢的原因。垃圾收集器的意义,主要有效地防止内存泄漏和更有效地使用空间内存,那什么内存泄漏和内存溢出呢?内存泄漏它是指程序在申请内存之后,无法释放已申请的内存空间,
C#编程语言而内存溢出是指程序申请内存的时候,没有足够的内存供给申请者,也就是假如我要4G内存,而你只给3G内存。或者给你一块存储int类型数据空间,但是你存储long的类型数据,然后导致内存不够用了,会报错OOM,也就是内存溢出。