JVM内存模型入门

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

综述

其实没有太多新东西

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

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

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

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

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

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

实例讲解

值类型函数调用

在栈空间存储活动记录:

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

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

对象类型函数调用

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

方法区

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

一个例子

例如如下这段代码:

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

JVM内存模型入门的更多相关文章

  1. jvm内存模型-和内存分配以及jdk、jre、jvm是什么关系(阿里,美团,京东)

    参考:JVM的垃圾回收机制 总结(垃圾收集.回收算法.垃圾回收器) 1.什么是jvm?(1)jvm是一种用于计算设备的规范,它是一个虚构出来的机器,是通过在实际的计算机上仿真模拟各种功能实现的.(2) ...

  2. JVM内存模型、指令重排、内存屏障概念解析

    在高并发模型中,无是面对物理机SMP系统模型,还是面对像JVM的虚拟机多线程并发内存模型,指令重排(编译器.运行时)和内存屏障都是非常重要的概念,因此,搞清楚这些概念和原理很重要.否则,你很难搞清楚哪 ...

  3. JVM内存模型和性能优化 转

    JVM内存模型和性能优化 JVM内存模型优点 内置基于内存的并发模型:      多线程机制 同步锁Synchronization 大量线程安全型库包支持 基于内存的并发机制,粒度灵活控制,灵活度高于 ...

  4. JVM内存模型和性能优化

    JVM内存模型优点 内置基于内存的并发模型:      多线程机制 同步锁Synchronization 大量线程安全型库包支持 基于内存的并发机制,粒度灵活控制,灵活度高于数据库锁. 多核并行计算模 ...

  5. JVM初探 -JVM内存模型

    JVM初探 -JVM内存模型 标签 : JVM JVM是每个Java开发每天都会接触到的东西, 其相关知识也应该是每个人都要深入了解的. 但接触了很多人发现: 或了解片面或知识体系陈旧. 因此最近抽时 ...

  6. JVM内存模型和关键参数设置

    一. JVM内存模型: Jvm内存模型是学好Java很重要的一部分,该部分学习能让我们在系统运维的时候,或者优化服务器的时候能够有方法,懂原理. 二. Jvm关键参数: 1. 堆大小设置参数: -Xm ...

  7. 记录JVM内存模型,参数含义和优化

    一.JVM内存模型 (图片来自网络) 根据Java虚拟机规范,JVM将内存划分为: New(年轻代) Tenured(年老代) Perm (永久代) 其中New和Tenured属于堆内存,堆内存会从J ...

  8. 【转】JVM内存模型

    http://longdick.iteye.com/blog/473866 图解JVM内存模型 博客分类: JVM JVM活动SUN  /** *  转载请注明作者longdick    http:/ ...

  9. jvm内存模型和内存分配

    1.什么是jvm? (1)jvm是一种用于计算设备的规范,它是一个虚构出来的机器,是通过在实际的计算机上仿真模拟各种功能实现的. (2)jvm包含一套字节码指令集,一组寄存器,一个栈,一个垃圾回收堆和 ...

随机推荐

  1. JS基础_原型对象

    原型prototype 我们创建的每一个函数,解析器都会向函数中添加一个属性prototype 这个属性,对应着一个对象,这个对象就是我们所谓的原型对象 1.如果函数作为普通函数调用prototype ...

  2. 【.net core 0基础】创建你的第一个.net core应用

    1.下载.NET core相应的SDK,https://dotnet.microsoft.com/download 2.安装完成后,打开命令提示符,输入命令 dotnet,检查是否正确安装,如果命令能 ...

  3. TensorFlow 学习(2)——正式起步

    学习TensorFlow官方文档中文版 http://wiki.jikexueyuan.com/project/tensorflow-zh/get_started/basic_usage.html 一 ...

  4. tfserving 调用deepfm 并预测 java 【参考】

    https://blog.csdn.net/luoyexuge/article/details/79941565?utm_source=blogxgwz8 首先是libsvm格式数据生成java代码, ...

  5. brew update 很慢

    brew使用国内镜像源 这里用中科大的,另外还有清华的可用 # 步骤一 cd $(brew --repo) git remote set-url origin https://mirrors.tuna ...

  6. centos6.5 内核 :2.6.32 升级内核

    问题:    CentOS 6.5 的内核一般都是2.6,在2.6的内核下,Docker运行会比较卡,所以一般会选择升级到更高版本,本次教程升级版本为4.4.102 一.升级内核 1.查看内核版本 u ...

  7. 在xcode找不到发布证书

    解决方法 1.访问XCode的Preferences>Accounts,在Apple IDs里面找到你的帐号,选中后,在右侧,在Name下面会有一行描述.双击.在弹出窗口里面,有个刷新按钮,点击 ...

  8. kubernetes排错系列:(二)、运行很久的kubernetes集群,创建出来的pod都是pending状态

    1.查看pod信息 # 查看pod 报错信息kubectl get pods发现pod的ip没有 生成,也没有分配到某个node节点 # 查看pod详细时间kubectl describe pods发 ...

  9. koa2-connect-history-api-fallback 使用

    单页面应用程序(SPA)通常使用一个web浏览器可以访问的索引文件,比如index.html,然后,在HTML5 History API的帮助下(vue-router就是基于History API实现 ...

  10. Appium+python自动化2-环境搭建

    一.必备软件安装 小编的环境是Windows 7版本 64位系统(32位的同学自己想办法哦) 1.jdk1.6.0 (64位) 2.android-sdk_r24.3.4-windows 3.pyth ...