![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eiN5Jei4-1668999202076)(JVM优化.assets/image-20220914152329478.png)]](https://1000bd.com/contentImg/2024/04/20/44081892d877635b.png)
堆
方法区
虚拟机栈
本地方法栈
public class JVMCase {
//常量
public final static String MAN_SEX_TYPE = "man";
//静态变量
public static String WOMAN_SEX_TYPE = "woman";
public static void main(String[] args) {
Student student =new Student();
student.setName("张三");
student.setSexType(MAN_SEX_TYPE);
student.setAge(18);
//调取静态方法
print(student);
//调用非静态方法
new JVMCase().print1(student);
}
//常规的静态方法
private static void print(Student student){
System.out.println("name:"+student.getName()+";sex:"+student.getSexType());
}
private void print1(Student student){
System.out.println(student.getName()+"说:hello");
}
}
public class Student {
private String name;
private String sexType;
private int age;
}
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-y0hVnrNS-1668999202080)(JVM优化.assets/image-20220914155951490.png)]](https://1000bd.com/contentImg/2024/04/20/04993a271c9b0f95.png)
4,将会进行到最后一个初始化阶段,在这个阶段中,jvm首先会执行构造器方法,编译器会将.java文件编译为.class文件,
5,执行方法,启动main线程,执行mian方法,开始执行第一行代码,此时堆内存会创建一个student对象,对象引用student会存放在栈中


GC:
GC算法:
问题???
JVM的内存区域中,程序计数器,虚拟机栈和本地方法栈这三个区域时线程私有的,随着线程的创建而创建,销毁而销毁。
栈中的栈帧随着方法的进入和退出进行入栈和出栈操作。每个栈帧中分配多少内存基本时类结构确定下来的时候就已知的,因此这三个区域的内存分配和回收都具有确定性
垃圾回收器的重点就是关注堆和方法区中的内存,堆中回收主要时对象的回收,方法区中回收的主要时废弃常量,无用的类的回收
一般一个对象不被引用,就代表该对象可以被回收,判断该该对象是否可以被回收:
引用计数算法:
可达性分析算法:
以上两种算法都是通过引用判断对象是否可以被回收,在jdk1.2之后,引入了扩充概念
| 引入类型 | 功能特点 |
|---|---|
| 强引用(Strong Reference) | 被强引用关联对象永远不会被垃圾回收器回收掉 |
| 软引用(Soft Reference) | 软引用关联的对象,只有当系统要发生内存溢出时,才会要去回收软引用的对象 |
| 弱引用(Weak Reference) | 只被弱引用的对象,只要发生垃圾回收器时间,就会被回收 |
| 虚引用(Phantom Reference) | 被虚引用关联的对象的唯一作用是能在这个对象被回收器回收时收到一个系统通知 |
知道Java程序种对象的回收条件,怎么回收这些对象,jvm垃圾回收遵循两个特点:
自动性
不可预期性
JVM提供了不同的收集算法来实现这一套东西:
| 回收算法类型 | 优点 | 缺点 |
|---|---|---|
| 标记-清除算法(Mark-Sweep) | 不需要移除对象,简单高效 | 标记-清楚过程效率低,GC产生内存碎片 |
| 复制算法(Copying) | 简单高效,不会产生内存碎片 | 内存使用率低,有可能产生频繁复制问题 |
| 标记-整理算法(Mark-Compact) | 综合了前两种算法的优点 | 仍然需要移动局部对象 |
| 分代收集算法(Generational Collection) | 分区回收 | 对于长时间存活对象的场景回收效果不明显,可能会起到反作用 |