Java虚拟机学习笔记——JVM垃圾回收机制
Java虚拟机学习笔记——JVM垃圾回收机制
Java垃圾回收基于虚拟机的自动内存管理机制,我们不需要为每一个对象进行释放内存,不容易发生内存泄漏和内存溢出问题。
但是自动内存管理机制不是万能药,我们仍需要了解JVM垃圾回收机制,以便在Java程序运行时发生错误的时候可以快速定位,并解决。
内存模型图
线程共享区:
方法区(Method Area):线程共享,存储被JVM加载的类信息、常量、静态变量、编译器编译后的代码等数据。
Java堆(Java Heap):线程共享,用于存储对象实例,是垃圾收集器(GC)管理的主要区域,其中细分为:新生代(Eden空间、From Survivor空间、To Survivor空间)和老年代。
线程私有区:
虚拟机栈(Java Virtual Machine Stacks): 线程私有,每个方法在执行时会创建一个栈帧(Stack Frame)用于存储局部变量表、操作数栈、动态链接、方法出口等信息。一个方法调用至执行完成,就对应一个栈帧从入栈到出栈。
程序计数器(Program Counter Register):线程私有,可以看成当前程序执行的字节码的行号指示器,字节码通过改变程序计数器的值来选取下一条需要执行的字节码指令,Java的分支、循环、跳转、异常处理、线程恢复等都基于程序计数器。
本地方法栈(Native Method Stack): 线程私有,本地方法栈与虚拟机栈相似,虚拟机栈为执行Java字节码服务,本地方法栈则为Native方法服务。
这章节由于记录的是Java 垃圾回收机制,所以着重分析的是Java堆,因为Java堆是JVM垃圾回收(GC)的主要发生区域。(本篇内容基于Hotspot虚拟机实现,所有Jvm即HotspotVM)
首先我们在分析垃圾回收之前先看下Jdk1.8中的Java 堆中的区域分布:新生代,老年代,元空间,在8之前的jdk1.7则是分为了新生代,老年代,永久代。
之所以将永久代
- JAVA虚拟机(JVM)和JAVA垃圾回收机制(JAVA GARBAGE COLLECTION)---因为刚开始学习,有部分语言不太准确,请指出,谢谢!
- JavaWeb学习笔记—JVM的垃圾回收机制(转载)
- java学习笔记15:垃圾回收机制(Garbage Collection)、垃圾回收原理和算法、通用的分代垃圾回收机制、JVM调优和Full GC、开发中容易造成内存泄露的操作
- JVM垃圾回收机制学习笔记
- 学习JVM垃圾回收机制
- Java虚拟机的JVM垃圾回收机制
- [C#]C#学习笔记-垃圾回收机制
- JVM学习笔记(三)------内存管理和垃圾回收
- jvm学习笔记三--内存管理和垃圾回收
- 《C#入门到精通》学习笔记 -- 垃圾回收机制
- JVM学习笔记之垃圾回收算法
- C#学习笔记12-GC的工作原理基础和垃圾回收机制
- JVM学习笔记(三)------内存管理和垃圾回收 .
- C#学习笔记之垃圾回收机制
- JVM学习笔记----内存管理和垃圾回收
- Java虚拟机的JVM垃圾回收机制
- JVM学习笔记之内存分配与垃圾回收
- java学习笔记4_垃圾回收机制
- JVM学习之java垃圾回收机制