堆、栈和方法区

it2023-03-26  76

java虚拟机的内存可以分为三个区域:堆heap、栈stack和方法区method area。

栈描述的是方法执行的内存模型。每个方法被调用都会创建一个栈帧(存储局部变量、操作数、方法出口等)JVM为每个线程创建一个栈,用于存放该线程执行方法的信息(实际参数、局部变量等)栈属于线程私有,不能实现线程间的共享!栈的存储特性是“先进后出,后进先出”栈是由系统自动分配,速度快!栈是一个连续的内存空间!

堆用于存储创建好的对象和数组(数组也是对象)JVM只有一个堆,被所有线程共享堆是一个不连续的内存空间,分配灵活,速度慢!

方法区

JVM只有一个方法区,被所有线程共享!方法区实际也是堆,只是用于存储类、常量相关的信息!用来存放程序中永远是不变或唯一的内容。(类信息【Class对象】、静态变量、字符串常量等) package com.company; public class Student { int id; String name; int age; Computer comp; void study(){ System.out.println("我在学习"+comp.brand); } void play(){ System.out.println("我在玩游戏"); } //构造方法。用于创建这个类的对象,无参的构造方法由系统自动创建 Student(){ } //程序入口 public static void main(String[] args) { Student stu=new Student(); stu.id=1001; stu.name="zx"; stu.age =18; Computer c1=new Computer(); c1.brand="lenovo"; stu.comp=c1; stu.play() ; stu.study(); } } class Computer{ String brand;//品牌 }

最新回复(0)