会员登录|免费注册|忘记密码|管理入口 返回主站||保存桌面
Java内存图(3)
2025-01-14IP属地 湖北3

文章目录

  • 前言
  • 一、认知(3
  • 二、数组内存图
    • 一维数组
    • 多维数组
  • 总结



1.new一个对象的底层:1字宽存类型地址,1自宽存锁的信息(这两个是共有的) 若开辟的空间是一个数组,显示数组的长度,基本类型所占的字节大小,指针,方法的大小(其实这些都是0101010的数据

2.调用一个方法之后,该方法入栈之后要运行,此时其他方法都停止运行。只有最上面的方法才会运行,变成最上面了就会恢复运行。运行完毕会出去。一个方法下面的方法就是调动它的方法。

3.c语言中要自己写free()回收内存,java中有垃圾回收机制,没人指向的话就会自动回收。
堆中常量池中生成的没人指向不会被销毁,除非常量池内存不够了;其他地方生成的没人指向会被回收。

3.全局变量是定义在程序的最外层,即在所有函数之外的变量。全局变量可以在程序的任何地方被访问和使用。

局部变量是定义在函数内部的变量,只能在定义它的函数内部被访问和使用。局部变量在函数执行结束后会被自动释放。

全局变量的作用域是整个程序,而局部变量的作用域仅限于定义它的函数内部。

在使用全局变量时需要注意全局变量会在整个程序中被多个函数共享,如果在不同的函数中修改了全局变量的值,可能会引发错误或产生意外结果。因此在使用全局变量时需要谨慎考虑。

局部变量在函数内部使用,对其他函数是不可见的,因此在函数之间不会产生冲突。局部变量的作用域仅限于定义它的函数内部,这样可以避免变量名冲突和数据混乱的问题。

4.线程:由一个个方法组成,依托栈结构完成一系列的方法调用,进程由一个个的线程组成。

5.程序计数器:和栈搭配一起使用,记录方法的开始与结束,变量的有效与失效。

6. 所有的程序想要运行起来都需要调用硬件,操作硬件需要驱动(网卡,显卡,驱动厂商会提供,只能通过操作系统把对应的驱动调起来,操作系统只认识c,不认识java,java需要进行编译,通过jdk,jre翻译为自定义的c,自定义的c变为操作系统认识的c通过本地方法栈。

代码如下(示例

 
 

 

首先main方法入栈,数组为引用类型,值和句柄不在一起,而是在堆中开辟一块连续的空间

改变数组的值,为什么要用new呢?数组长度在声明时已经定下来了,数组长度不可变。

字符串常量池不会被立马回收掉

new person就是拿着person的模板(无static部分)复制一份在堆当中开辟一块空间

没有赋值的会有对应的默认值 0 0.0 null 

定义二维数组的语法

 

3表示数组有3行 
6表示数组有6列
int 表示数组中每个元素都是 int 类型
arr 是数组名,可以根据自己的需要指定名字

也可以视作有三个一维数组,每一个一维数组的长度为6

其余多维数组类似
 

代码如下(示例