初步了解Java虚拟机JVM

Java虚拟机 JVM
  • JVM是Java Virtual Machine(Java虚拟机)的缩写
  • JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿 真模拟各种计算机功能来实现的。
  • JVM就是一个虚拟的用于执行bytecodes字节码的计算机 • Java虚拟机是Java最核心技术,也是跨平台的基础。
  • Java语言使用Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。
  • Java虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令执行。这就是Java的能 够“一次编译,到处运行”的原因
JVM内存模型
JVM
  • 本地方法栈
  • 虚拟机栈
  • 方法区(元空间)
  • 程序计数器
  • JVM垃圾回收机制 内存划分
类加载子系统
加载顺序: 
 // 静态的变量是优先在new之前加载,并且会提供一个默认值
	1.加载
	通过类加载子系统,会加载.class文件,
	会通过执行引擎会执行class文件的解析和翻译工作
	2.链接
	1.验证 2.准备 3.解析
		先要判断class文件是否是合理的,对于java文件而言,前缀必须CA
		2.准备工作是将验证忠厚的文件引入到JVM内存模型(虚拟机栈)
		3.对class文件进行解析(需要使用JVM的指令集)
	3.初始化
	初始化其实就是new对象的过程

在创建对象的时候;
App app = new App();
在app创建的过程中,还是执行了很多顺序的
static{

}

类加载的机制:

就是在程序运行中,通过JVM的类加载子系统,将编译之后的class文件

类加载的过程:
加载器分类:

1.引导性,Bootstrap类型的类加载器
三种JVM提供的类加载器:
BootstrapLoader :引导类加载器      sun.boot.class.path
ExtClassLoader  :扩展类加载器      java.ext.dirs
AppClassLoader  :应用程序类加载器  java.class.path
	
2.自定义的类加载器
双亲委派机制
加载类的时候 
Bootstrap 双亲委派机制   

App.class --> AppClassLoader --> ExtClassLoader  --> BootstrapLoader  --I
Custom ClassLoader														|
App.class <-- AppClassLoader <-- ExtClassLoader  <-- BootstrapLoader  <-J


如果是使用的自定义String

如何打破双亲委派机制?
	1.自己写一个类加载器 
	2.重写loadclass方法 
	3.重写findclass方法 

虚拟机栈包含的内容:

局部变量表 
操作数栈 
动态链接 
方法出口

堆区的内存划分:

新生代: 
	尹甸圆区
	form
	to
	//新生代老年代比例 2:8
	//伊甸园区:form:to=8:1:1
	伊甸园区内存不够的时候回发生一次垃圾回收
	该回收是叫Minor GC,每次GC都会伴随STW,stop the word,耗时比较久
	
	如果发生在老年代的GC叫FULL GC/Marjor GC,事件很长
	可能需要等待好几秒钟
	
	一般是不太能允许FULL GC的发生
	内存满了才会发生垃圾回收
老年代内存 100M 1G jvm
实现调优

猜你喜欢

转载自blog.csdn.net/qq_45525250/article/details/116699631