涨薪技术|0到1学会性能测试第56课- 堆与栈、GC回收机制
前面的推文我们掌握了Tomcat调优技术。今天给大家分享JVM调优技术。后续文章都会系统分享干货,带大家从0到1学会性能测试。
01堆与栈
在上一章节介绍JVM内存模型时,发现JVM内存分为堆和栈两种,那么为什么需要将内存分为堆和栈两种呢?之所以分成两类是为了JVM在调用内存时更好的对内存进行管理。
在JAVA虚拟机中使用的数据又分为两类:
一是基础数据;
二是引用数据;
基础数据是引用数据本身,引用数据是引用数据对象。基础数据通常包括:byte、short、int、long、char、float、double、Boolean、returnAddres。引用类型包括:接口、类、数组。
栈是运行单位,所以的运行对象,都在是栈中,当程序运行时JVM会为每个线程一个栈大小。每个线程栈是不通用的,因为每个任务都有一个独立的线程来执行。堆是存储单位,所以有需要使用的数据都在堆中,堆是可以共享的。也就是堆是处理的数据的地方,栈是用来处理的逻辑的地方。之所以分堆与栈,这样的好处是可以将业务逻辑与数据进行分离,同时也可以提高数据的共享程度。
从软件设计的角度来看,栈代表了处理逻辑,而堆代表了数据,这样将数据与逻辑分离可以让处理逻辑更为清晰。这种隔离、模块化的思想在软件设计的方方面面都有体现。
堆与栈的分离,使得堆中的内容可以被多个栈共享,但栈不管理 Java栈还是方法栈其线程