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

最新文章

  1. 和我一起学python,控制语句 (life is short ,we need python)
  2. (六)、nodejs中的express框架获取http参数
  3. 关于Servlet的PrintWriter 中文乱码问题
  4. C++转换unicode utf-8 gb2312编码
  5. 【hdu3065】病毒侵袭持续中
  6. 常用SQL代码段
  7. 关于python 模块导入
  8. POJ 2115 C Looooops(扩展欧几里得应用)
  9. 关于指针要注意的地方还有尝试在codeblocks上建立项目
  10. tablehost
  11. [LeetCode] Range Sum Query - Mutable 题解
  12. .24-浅析webpack源码之事件流compilation(2)
  13. BZOJ 1854: [Scoi2010]游戏 [连通分量 | 并查集 | 二分图匹配]
  14. 如何让window.open()以post请求方式调用(巧妙解法)
  15. android studio设置代理更新
  16. vue-element-ui之弹窗重置
  17. 为虚机Linux系统设置静态IP,ping通外网并解决相关问题
  18. 基于AT89C51单片机烟雾传感器
  19. maven在Idea建立工程,运行出现Server IPC version 9 cannot communicate with client version 4错误
  20. WPF编程,窗口保持上次关闭时的大小与位置。

热门文章

  1. 石川es6课程---5、函数-参数
  2. leetcode-hard-array-238. Product of Array Except Self-NO
  3. CMD命令行管道命令
  4. JS字符串转换为JSON的方法
  5. props的写法
  6. NDk的目录
  7. linux命令行下常用快捷键
  8. 几行python代码解决相关词联想
  9. c++ qsort函数应用
  10. 科学论文写作 Tips