JVM组成
1. 类加载器,用来把字节码文件加载进入到runtime区域
2. 执行引擎: 用来执行.class中的指令
包含即时编译器和垃圾回收装置
3. 运行时区域就是jvm内存
先由编译器把.java文件,编译成.class文件
此时底层os仍然看不懂,所以需要把他在进行编译成底层支持的机器码。
此时类加载器首先给它加载到jvm的方法区,
然后在堆中创建一个java.lang下的类对象
执行引擎用来执行类中的方法,以及通过即时编译器加速机器码的编译
运行时区域
堆: jvm内存中最大的一块区域,用来给对象提供存储,线程共享,物理地址不连续,性能略慢
虚拟机栈:存储各种变量,线程私有,生命周期跟随着线程的生命周期。秉持着先进后出的原则。
一般用来存储本地变量,以及入栈出栈的记录
物理地址连续,性能较快
方法区: 存储加载进来的类,方法,静态变量,常量
计数器:用来当前线程指示下一条需要执行的指令
本地方法栈:用来调用本地c或者c++的本地库
垃圾回收机制
当一个对象在堆存储中被创建后,他就会被gc监控,主要是看他的被引用的情况,当这个对象的引用被释放了就回触发回收
内存优化
可以配置jvm的虚拟机参数
-Xms初始堆内存,可以避免jvm总是调整堆内存大小浪费性能
-Xmx最大对内存