Java学习笔记三(虚拟机内存结构)

一、虚拟机内存结构

1、栈(stack)

  1. 存放都是方法中的局部变量,每一次方法的运行都是栈当中,方法中的数据传递都是通过栈的。
  2. 局部变量:方法的参数,或者方法内定义的变量
  3. 作用域:局部变量一旦超出其作用域,立刻从栈中消失

2、堆(heap)

  1. 凡是new出来的都在堆当中,堆中的东西都会有有个地址值(16进制),堆中的数据都会有默认值:
    整数:0
    浮点数:0.0
    字符:‘\u0000’
    布尔:false
    引用:null
  2. java堆垃圾收集器管理的主要区域,因此被称之为GC

3、方法区(method area)

  1. 存储.class相关信息,包含方法的信息,它用于存储已经被虚拟机加载的类信息、常量、静态变量、编译器编译后的代码等数据。
  2. 方法区也称之为永久代,一个是标准一个是实现

4、本地方法区(native method area)

  1. 与系统相关,和栈所发挥的作用类似。
  2. 区别:
    栈是为虚拟机执行java代码(字节码)服务
    本地方法区则是为虚拟机能使用到的Native方法服务

5、寄存器(PC register)

  1. 与CPU相关,也称之为程序计算器
  2. 作用:
    ①字节码解释器通过改变程序计算器来依次读取命令
    ②在多线程的情况下,程序计算器用于记录当前线程执行的位置,从而实现线程来回切换后依然从记录位置开始执行

6、总结

堆:new出来都在堆中,堆中的数据都有默认值
栈:局部变量都存储在栈中,栈中运行的方法和方法间值的传递
方法区:静态变量和常量都在方法区,方法区存放的是.class信息

7、jdk1.7

把我们的运行时常量池从方法区移出,在堆(heap)中开辟了一块空间存放运行时常量池

8、jdk1.8

方法区(HotSpot永久代)被彻底移除,取而代之的生死元空间(Metaspace),元空间使用的直接内存

9、一些原理图

创建数组内存图:
大范德萨范德萨
数组冒泡排序:
在这里插入图片描述
java内存详细图:
在这里插入图片描述
jdk1.7和jdk1.8内存结构对比:
在这里插入图片描述
值传递和引用传递
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值