blog 2019.3.6 day9 java内存的操作

面向对象进阶

jvm内存的分配

开发工具会把java文件变成class文件(通过编译器)
xxx.java------xxx.class
xxx.class—通过类加载器加载。(类加载器常见的有三种)------在内存分配空间

jvm会将内存分为五块:

栈:java栈的区域比较小,空间默认在1M左右,特点:存取数据的 速度非常快,在栈里面执行的基本都是快速的任务。栈内的对象使用完马上就删除了,栈一般存基本数据类型,和对象的引用。

堆:new出来的对象都存放在堆里面,堆里面的每一个对象都会产生一个唯一的地址。这个内存地址会赋值给栈里面的引用。堆里面的对象需要垃圾回收机制才能销毁。要销毁一个对象 对象=null.

这是程序员无法控制的,这也就是java堆比较占内存的地方。

方法区:又称为静态区,主要存放
    (1)类(class)
    (2)常量
    (3)成员方法 public void xxxx()  没有加static的方法叫做 成员方法,属于对象的方法。只能通过创建对象,对象加点的方法调用他
                             public static xxxxxx 属于类的方法。
  
      
      (4)静态方法/静态属性
       和非静态的最大区别 就是加载时间不同。 静态在类加载的时候就在内存分配空间了,非静态只有在调用的时候才 分配空间。
       (5)静态变量
       被所有线程共享的区域。

=常量池:开发过程中涉及到的字面量=
int i = 10;
i 和10 都存放在栈内,因为int是基本数据类型。

String s = “123”
s存放在栈内,因为他是变量。
“123”在常量池里面。
因为string不是基本数据类型,String是一个类、对象。========================================================
pc寄存器(计数器):(一般操作不了)主要用来保存jvm的指令和地址
本地方法栈:
主要用来保存native方法进入区域的地址。

在这里插入图片描述
在这里插入图片描述

两种创建abc的方法完全不一样

在这里插入图片描述

Q:

java的内存 是怎么工作/操作的。

介绍一下栈和堆的数据结构。

栈的特点: 分为顺序栈和链式栈
栈:一端受限,另外一端允许操作的线性表
理解:先进后出,先进来的数据放在栈底,后出来的数据在栈顶,栈底是封闭的,只能从栈顶出。先放的数据后取,后放的数据先取。L I F O (last in first out)栈存储数据有两种结构:1、顺序存储:首先要分配一个足够大的数组,控制这个输入一端进行增删,另一端控制住不让操作。让操作的叫栈顶,不让操作的叫栈底。

左边 入栈 右边出栈
在这里插入图片描述

2、链式存储:采用链表结构,链表不是连续的,是一块一块的。控制入栈和出栈的一个端口。控制一端不能操作。
优点:要多少申请多少,空间不够再申请即可。但是用完了一定要释放空间。

数组:增删改的效率很低,查询效率高
链表:增删改效率高,增删改效率低。

堆:经过排序的一种树形的数据结构,堆的数据结构指的就是二叉树,堆可以看成一棵树的数组结构。
需要从书架上取出任意位置的一本书,不需要动其他的书,直接取你想要的书。

书架–堆机构
盒子–栈结构(取自己想要的书需要先取出来这本书上面的所有书)

猜你喜欢

转载自blog.csdn.net/qq_39263750/article/details/88228536