朗读

java(2)内存分析

堆、栈、方法区

Java虚拟机内存可以分为堆(stack),栈(heap),方法区(method area)

先看一段简单的程序

public class student {

int id;
String name;
int age;
computer comp;
void stduy() {
System.out.println("xu"+comp.brand);
}
void play() {
System.out.println("我在玩王者荣耀");
}
student(){
System.out.println("调用构造方法");
}

//程序执行的入口
public static void main(String[] args) {
student student=new student();//创建一个对象
student.play();
computer c1 =new computer();
c1.brand = "联想";
student.comp=c1;
student.stduy();
}
}class computer{
String brand;
}

java是面向对象的语言,其实面向对象和面向过程(C语言)是相辅相成的,两者并不能完全分开。

面向对象其实是量变到质变的堆积,就是比如当代吗超过几万行之后,面想对象的就不易于管理和扩展(就是没法弄了

于是就出现了面向对象。类是对象的抽象--即抽出像的部分(也可以说它是一个模板)。

虽然语言不一样,但是大多数语言的底层都是类似的,因此内存分析很重要。

  • 栈描述的是方法的执行的内存模型,每调用一个方法就会创建一个栈帧(方法即函数)。
  • 就是程序运行之后会产生很多的线程(线程和进程的区别。,自己百度)
  • Java虚拟机jvm会为每一个线程开辟一个栈。
  • 栈属于线程私有的,不能共享。
  • 栈的储存特征是“先进后出,后进先出”--(学过数据结构就知道这个)------形象一点就像一个子弹夹。
  • 栈是一个连续的储存空间(顺序表)。
  • 速度快

  • 用来储存创建好的对象和数组-----数组也是对象
  • jvm只有一个堆,被所有线程所共享。
  • 灵活,但是速度慢。

方法区

  • java只有一个方法区,方法区也属于堆。
  • 用来储存类,常量信息以及程序中不变或是唯一的内容
  • 静态常量,字符串常量。

 

 

点赞

发表评论

昵称和uid可以选填一个,填邮箱必填(留言回复后将会发邮件给你)
tips:输入uid可以快速获得你的昵称和头像

Title - Artist
0:00