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方法

  • 相关阅读:
    简介anaconda下的jupyter notebook的代码分块运行
    此文件的签名已损坏或无效或360下载提示下载失败解决办法
    Java基础加强
    XML
    Servlet
    Tomcat
    json和跨域
    jQuery的ajax
    ajax请求状态码 以及 页面请求状态码
    ajax 基础
  • 原文地址:https://www.cnblogs.com/jiading/p/11717468.html
Copyright © 2011-2022 走看看