JVM(Java virtual machine)Java虚拟机

对于学习Java,一定要了解到JVM的基础知识,知道JVM的内存分配以及JVM的基本常识

对于要深入理解JVM的推荐这篇,对于开发和程序运行架构有帮助 https://mp.weixin.qq.com/s/6AohfmVfbtn1-RJjG43UFw

常用总结(较为shallow):

(1)Java编译执行过程JVM基本常识

(2)JVM内存分配 (推荐博文https://www.cnblogs.com/dingyingsi/p/3760447.html

首先JVM的逻辑内存模型图如下

JVM基本常识

1、程序计数器:

内存较小、各条线程间的计数器互不影响,独立存储即“线程私有”;作为当前线程的行号指示器,用于记录当前虚拟机正在执行的线程指令地址

2、Java虚拟机栈(栈内存):

线程私有、存储局部变量表(Java编译期可知的各种基本数据类型对象引用、returnAddress类型)、操作栈、动态链接、方法出口等信息,当线程请求的栈深度超过了虚拟机允许的最大深度时,就会抛出StackOverFlowError即栈内存溢出;

3、本地方法栈:

线程私有的,保存的是native方法的信息

4、Java堆区

java堆是所有线程共享的一块内存,几乎所有对象的实例和数组都要在堆上分配内存(但不是所有的对象和数组都会在堆内存分配空间),因此该区域经常发生垃圾回收的操作;

5、方法区:

存放已被加载的类信息、常量、静态变量、即时编译器编译后的代码数据。主要存放java类定义信息,与垃圾回收关系不大,但不是没有垃圾回收。

GC垃圾回收:

1、确定哪些是垃圾

2、进行垃圾的回收

类加载机制:

Java虚拟机不和任何语言绑定,它只与class文件的二进制文件格式相关联,即任意门功能性语言都可以表示为一个能被Java虚拟机所接受的有效的class文件。

JVM基本常识

常量池:class文件的资源仓库;

类加载过程:

加载---验证---准备---解析---初始化

参考https://www.jianshu.com/p/355ae3bcec41,这篇笔记也比较精炼

相关文章: