zoukankan      html  css  js  c++  java
  • JVM内存模型入门

    JVM内存模型入门

    本文是学习笔记,原文地址在:https://www.bilibili.com/video/av62009886

    综述

    其实没有太多新东西

    1571677643861

    JVM主要分为五个区域:栈区、堆区、本地方法栈、程序计数器和方法区(元数据空间)。

    本地方法栈是存储C++的native方法运行的栈区

    程序计数器指向程序运行的位置

    方法区主要存储静态的方法和变量,类加载器classloader等等全局的数据

    堆区主要存对象,栈区存储对象的引用类型

    栈、本地方法栈和程序计数器合起来是线程私有的,堆区和方法区是全局共享的。

    实例讲解

    值类型函数调用

    1571676644627

    在栈空间存储活动记录:

    1571676811184

    函数运行完成后,栈空间会被释放

    Java的基础数据类型都是值类型,但包装类不是!包装类是引用类型,数据在堆上!

    1567940987662

    对象类型函数调用

    1571676978933

    注意看函数中的那个Person p=new Person();,它在堆上开辟了一段内存并存储对象(由于没有初始化,id默认是0,name默认是null),栈中保存的是引用类型,只占4个字节,此时函数参数也是地址,所以我们对对象的修改会持久反映在对象上,这就是和值类型的不同。

    方法区

    例如main函数,就是存在于方法区的(因为它是静态方法)。

    一个例子

    例如如下这段代码:

    1571677767229

    注意这里的Main和main函数不是一回事,Main是指那个大类。new Main().func1(p2);看的时候不要混了。实际上是创建了一个新的匿名对象并调用了这个对象的func1方法

  • 相关阅读:
    战胜忧虑<2>——忙碌可以消除忧虑
    战胜忧虑<1>——不要让忧郁侵入你的生活
    Django的下载和安装
    Github 如何上传本地文件
    Python_相对路径的获取
    Python_生成HTMLTestRunner测试报告
    Python_requests实例
    Charles抓包(Http/Https请求)
    Python_base_函数返回值
    Python_base_print 取消自动换行
  • 原文地址:https://www.cnblogs.com/jiading/p/11717468.html
Copyright © 2011-2022 走看看