简介
JVM,是Java虚拟机,可以安装在各操作系统,是一个进程。Java虚拟机是一个可以执行Java字节码的虚拟机进程。
Java程序在Java虚拟机上运行。
Java程序一次编译后,在各操作系统运行不需要重新编译。只要该操作系统安装了Java虚拟机即可。
因此,Java语言是平台(操作系统)无关的编程语言。Java程序员不需要为不同的操作系统重新编码Java代码。
Java虚拟机内存结构(Java虚拟机的运行内存)
内存,即运行内存,这里说的运行内存是指Java虚拟机的运行内存。计算机才有运行内存,运行内存是计算机的资源之一,程序/进程是占用运行内存的。
Java虚拟机是一个虚拟机,但对操作系统来说也是一个进程。比如,操作系统有16G运行内存,Java虚拟机分了一些运行内存,比方说Java虚拟机这台计算机有3G的运行内存,每个Java程序运行时便占用这3G的运行内存。
这里要插入一段解释,进程和线程,进程和线程是相对的。
一个JVM里的Java程序都是线程。
操作系统是管理计算机资源的,所以Java虚拟机管理Java虚拟机的运行内存。
Java虚拟机的运行内存可以分为几部分(Java虚拟机的运行内存的几大内存区域):
1.Java堆(Heap),线程共享,运行内存中最大的一块,虚拟机启动时创建,该区域的唯一目的是存放对象实例,比如new Object(),申请一些内存空间,就是Java堆这一区域。
2.方法区(method area):线程共享,用于存储已经被虚拟机加载的 类信息,常量,静态变量,
3.程序计数器:线程私有,一块较小的内存空间,他的作用是:当前线程所执行的字节码的行号的一个指示器,
4.JVM栈:线程私有,生命周期与线程相同,JVM栈内存模型:描述的是Java方法执行,每个方法被执行的时候都会同时创建一个栈帧(Stack Frame)用于存储局部变量表、操作栈、动态链接、方法出口等信息。每一个方法被调用直至执行完成的过程,就对应着一个栈帧在虚拟机栈中从入栈到出栈的过程。
5.本地方法栈:线程私有,......,
JVM内存回收
JVM运行内存是有限的,为了Java程序在JVM里良好的运行,需要实施内存回收机制,
之前说JVM内存分成5大部分,其中,Java堆这一块是内存回收的重点关注的地方,即Java实例,new 的对象,
未完待续......
现在说回收堆内存这一块,简单来说,如果一个对象凉了,那么这个对象就是垃圾,就要回收掉,
那么如何判断对象凉了(可达性分析算法,图论),
JVM垃圾回收机制:https://blog.csdn.net/A12115419/article/details/122603193