• Java 虚拟机规范中说明:所有的对象实例(all class instances)以及数组都要在堆上分配;

    • the heap is the runtime data area from which memory for all class instances and arrays is allocated.

0. 访问修饰符,static,栈内存

Java Error - Illegal Modifier for Parameter - Only final Permitted

  • 函数内的局部变量仅存在于栈内存上;

    • 局部变量不可用 public/private/protected、static 等词修饰;
    • 最多使用 final(only final permitted);
  • 栈内存上(局部对象)无所谓访问权限的概念;也即不可用 public/private/protected 等修饰符修饰函数内的局部变量;
  • static 修饰成员说明,所有类实例中仅存在一份;
    • 创建这些被 static 修饰的成员不需要类的实例化;
    • 因为栈上的对象都是 temporary 临时的,栈上对象也就无所谓 static 这一含义了;

1. JVM

从 .java 到 .class(字节码文件) 是 javac (java compiler)的工作,JVM 工作在 .class 文件在各个操作系统的平台上:

  • Interpreter for Mac/Windows/Linux,表示的是各操作系统平台上的字节码解释器(.class interpreter)
  • javac 使得 .java 文件(本地机器码)转变为字节码(.class)

2. java 运行时系统(Runtime System)

/

  • PC register:program counter register,程序计数器,只占据一块很小的内存空间,可将其看做是当前线程所执行的字节码(.class)的行号指示器。

    • 在虚拟机的概念模型里,字节码解释器(.class interpreter)工作时便是通过改变这个程序技术器的值来选择下一条要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成;
    • 在多线程环境下,java 虚拟机是通过线程轮流切换以及分配处理器执行时间的方式来实现(也即在任何一个确定时刻,一个处理器(多核处理器的一个内核)都只会执行一条线程中的指令),因此为了线程切换后能够恢复到正确的执行位置,每个线程都需要一个独立的程序计数器(program counter register),各条线程之间计数器互不影响,独立存储,称这类内存区域为“线程私有”的内存;
  • 执行引擎(execute engine)是 java 虚拟机最核心的组成成分。虚拟机是相对物理机而存在的,这两种执行器都有代码执行能力,其区别是物理机的执行引擎直接建立在处理器、硬件、指令集和操作系统层面,而虚拟机的执行引擎都是由自己实现的,因此可以自行制定指令集和执行引擎的结构体系,并且能够执行那些不被硬件直接支持的指令集格式;

Java 内存管理、JVM 工作原理与 Java 运行时系统相关推荐

  1. ND4J/DL4J的内存管理:工作原理

    ND4J/DL4J的内存管理:工作原理 ND4J使用堆外内存存储N维数组NDArray,以便提升从本机代码(例如BLAS和CUDA库)使用NDArray时的性能. "堆外"意味着系 ...

  2. Java 详解 JVM 工作原理和流程

    2019独角兽企业重金招聘Python工程师标准>>> 作为一名Java使用者,掌握JVM的体系结构也是必须的. 说起Java,人们首先想到的是Java编程语言,然而事实上,Java ...

  3. java内存区域及静态常量池、运行时常量池介绍

    java内存区域介绍 我们先来介绍下虚拟机运行时数据区的结构: 我们项目中的每一个线程在运行时,都会有拥有自己独立的栈数据和程序计数器.程序计数器可以看作字节码命令的指示器,记录了下个需要执行的字节码 ...

  4. java 内存管理_高性能Java代码之内存管理

    本文通过几个方面,来介绍Java代码的内存管理. 有的代码,GC根本就回收不了,直接系统挂掉.GC是一段程序,不是智能,他只回收他认为的垃圾,而不是回收你认为的垃圾. GC垃圾回收: Grabage ...

  5. Java内存管理-Stackoverflow问答-Java是传值还是传引用?(十一)

    做一个积极的人 编码.改bug.提升自己 我有一个乐园,面向编程,春暖花开! 推荐阅读 第一季 0.Java的线程安全.单例模式.JVM内存结构等知识梳理 1.Java内存管理-程序运行过程(一) 2 ...

  6. Java内存管理-一文掌握虚拟机创建对象的秘密(九)

    做一个积极的人 编码.改bug.提升自己 我有一个乐园,面向编程,春暖花开! 推荐阅读 第一季 0.Java的线程安全.单例模式.JVM内存结构等知识梳理 1.Java内存管理-程序运行过程(一) 2 ...

  7. Java内存管理-掌握虚拟机类加载机制(四)

    勿在流沙筑高台,出来混迟早要还的. 做一个积极的人 编码.改bug.提升自己 我有一个乐园,面向编程,春暖花开! 上一篇介绍了整个JVM运行时的区域,以及简单对比了JDK7和JDK8中JVM运行时区域 ...

  8. [转载] Java内存管理-你真的理解Java中的数据类型吗(十)

    参考链接: Java中的字符串类String 1 做一个积极的人 编码.改bug.提升自己 我有一个乐园,面向编程,春暖花开! 推荐阅读 第一季 0.Java的线程安全.单例模式.JVM内存结构等知识 ...

  9. JVM 工作原理和流程

    转 Java 详解 JVM 工作原理和流程 <div class="article-info-box"><div class="article-bar- ...

最新文章

  1. java浮点数误差_浮点数运算的误差
  2. python干啥用的啊-python干什么用的
  3. mooc服务器返回数据为空,服务返回的json数据过大,nginx无法返回给client
  4. C++用参数返回结果与用返回值返回结果的思考
  5. 【深度学习】你有哪些深度学习(RNN、CNN)调参的经验?
  6. 牛客33-tokitsukaze and Number Game(数论)
  7. go json部分解析_Go语言爱好者周刊:第 60 期 — 今天这题你做对了吗?
  8. java读取与写入excel(.xls .xlsx)
  9. iOS中网络请求的使用(GET请求与POST请求)
  10. win7工作组无法查看计算机名,WIN7下无法查看工作组计算机怎么办
  11. MATLAB中的曲线拟合
  12. 学习笔记:pscc2020基础
  13. 未来10年,将被人工智能/机器学习/大数据颠覆的三大行业
  14. Android关系型数据库应用——电话(短信)黑名单 .
  15. js三元运算符 js运算符优先级
  16. EViews11.0程序安装及注意事项
  17. 【报告分享】2021年中国网络文学出海报告-艾瑞咨询(附下载)
  18. 流体力学有限元法(一)
  19. Unity中的资源管理-资源类型和基本使用
  20. 计算机键盘重复,win7系统电脑键盘打字时总是出现重复字符的解决方法

热门文章

  1. cocos2d-x CCArray用法 遍历和删除元素
  2. 1.视频全屏展示(适应各种屏幕尺寸)
  3. k8s service type_通过搭建MySQL掌握k8s(Kubernetes)重要概念(上):网络与持久卷...
  4. Linux内核写入s3c2440,Linux空板的系统写入
  5. python编程语言的优缺点_组队学习优秀作业 | Python的发展历史及其前景
  6. distcp集群迁移问题总结
  7. c++多数据平均数_定量分析中的几个概念-平均数、算数平均数、调和平均数以及权重及应用...
  8. java查看堆内对象_如何查看一个对象占用堆内存的大小
  9. java static 区别_Java中static和final的区别
  10. python爬虫大作业爬多少数据_爬虫大作业