《深入理解Java虚拟机》读后总结

基于Sun HotSpot JVM

直接上图:

从图中看到,JVM内存分为两个主要区域,一个是所有线程共享的数据区,一个是线程隔离数据区(线程私有)

线程隔离数据区

程序计数器(Program Counter Register):

一小块内存空间,单前线程所执行的字节码行号指示器。字节码解释器工作时,通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成。

JVM虚拟机栈(Java Virtual Machine Stacks):

Java方法执行内存模型,用于存储局部变量,操作数栈,动态链接,方法出口等信息。是线程私有的。

本地方法栈(Native Method Stacks):

为JVM用到的Native方法服务,Sun HotSpot 虚拟机把本地方法栈和JVM虚拟机栈合二为一。是线程私有的。

线程共享的数据区

方法区(Method Area):用于存储JVM加载的类信息、常量、静态变量、即使编译器编译后的代码等数据。运行时常量池(Runtime Constant Pool):是方法区的一部分,用于存放编译器生成的各种字面量和符号引用,这部分内容将在类加载后存放到方法取得运行时常量池中。具备动态性,用的比较多的就是String类的intern()方法。

JVM堆( Java Virtual Machine Heap):存放所有对象实例的地方。

新生代,由Eden Space 和大小相同的两块Survivor组成

旧生待,存放经过多次垃圾回收仍然存活的对象

如图:

直接内存(Direct Memory):

它并不是虚拟机运行时数据区的一部分,也不是JAVA虚拟机规范中定义的内存区域。在JDK1.4中加入了NIO类,引入了一种基于通道(Channel)于缓冲区(Buffer)的I/O方式,他可以使用Native函数库直接分配堆外内存,然后通过一个存储在JAVA堆里面的DirectByteBuffer对象作为这块内存的引用进行操作。这样能在一些场景中显著提高性能,因为避免了在JAVA堆中和Native堆中来回复制数据。

深入java虚拟机需要读吗_《深入理解Java虚拟机》读后总结(一)JVM内存模型相关推荐

  1. 深入java虚拟机 第四版_深入理解Java虚拟机-常用vm参数分析

    Java虚拟机深入理解系列全部文章更新中... https://blog.ouyangsihai.cn/shen-ru-li-jie-java-xu-ni-ji-java-nei-cun-qu-yu- ...

  2. java虚拟机的生命周期_深入理解Java虚拟机——JVM的生命周期

    package test; public class JVMTestLife { public static void main(String[] args) { new Thread(new Run ...

  3. java对象的访问定位_深入理解java虚拟机---对象的访问定位(十)

    引用其他人的文章: https://www.cnblogs.com/YYfish/p/6722258.html 那是怎么访问对象呢? java 程序是通过栈上的reference数据来操作堆上的具体对 ...

  4. java spring boot 注解验证_如何理解Java原生注解和Spring 各种注解?

    作者:digdeep .cnblogs.com/digdeep/p/4525567.html 导引 Spring中的注解大概可以分为两大类: spring的bean容器相关的注解,或者说bean工厂相 ...

  5. java中io是什么_深入理解Java中的IO

    深入理解Java中的IO 转载自:http://blog.csdn.net/qq_25184739/article/details/51205186 本文的目录视图如下: Java IO概要 a.Ja ...

  6. java如果不使用多态_深入理解java多态没有烤山药的存在,java就不香了吗?

    @ 我不想知道各位理解java多态没有烤山药的存在,java香不香的问题了,我不要你们认为,我只要我觉得 (感觉要被打....) 在博主认为多态绝对是面向对象的第三大特性中让很多小白同学以及初学者难以 ...

  7. java垃圾回收策论_深入理解 Java 虚拟机【3】垃圾收集策略与算法

    作者:杨立滨 链接:https://github.com/yanglbme/jvm 程序计数器.虚拟机栈.本地方法栈随线程而生,也随线程而灭:栈帧随着方法的开始而入栈,随着方法的结束而出栈.这几个区域 ...

  8. java中对象的生存期_深入理解Java虚拟机-判断对象是否存活算法与对象引用

    我们知道Java中的对象一般存放在堆中,但是总不能让这些对象一直占着内存空间,这些对象最终都会被回收并释放内存,那么我们如何判断对象已经成为垃圾呢?这篇文章会提出两种算法解决这个问题.另外,本文还要谈 ...

  9. java 注解处理器的作用_深入理解Java:注解(Annotation)--注解处理器

    如果没有用来读取注解的方法和工作,那么注解也就不会比注释更有用处了.使用注解的过程中,很重要的一部分就是创建于使用注解处理器.Java SE5扩展了反射机制的API,以帮助程序员快速的构造自定义注解处 ...

  10. finally在java程序中的作用_深入理解Java中的finally

    问题 在Java的异常体系中,我们经常会使用finally语句块来保证进行一些无论有无异常都要执行的处理流程,但finally语句块与return语句究竟哪个先执行总是让人迷惑.根据书本介绍,似乎是f ...

最新文章

  1. Python Qt GUI设计:窗口布局管理方法【强化】(基础篇—6)
  2. 记一次用iview实现表格合并单元格的具体操作
  3. IBM:决胜量子计算五大战略!商用近在咫尺
  4. VTK:PolyData之ConnectivityFilter_SpecifiedRegion
  5. Java AIO初探(异步网络IO)
  6. 备份数据库的expdp语句_【ORACLE语句备份】数据库表同步 ——定时任务管理器(EXPDP导出,IMPDP导入)...
  7. Elasticsearch了解多少,说说你们公司es的集群架构,索引数据大小,分片有多少,以及一些调优手段 。
  8. 阿里巴巴为什么选择Apache Flink?
  9. mysql未监控在3306_监控MySQL或Web服务是否正常
  10. C4D插件X-Particles粒子特效(五)
  11. 这几招教你如何增加食物中铁的吸收
  12. 跨站点请求伪造攻击的原理及防御
  13. 苹果域对应关系 Manifest.db文件解析
  14. 从契约演进看区块链的变革性
  15. faker假数据php,php faker 伪造数据
  16. android融云消息免打扰
  17. 盐城北大青鸟东台基地开展春季游学活动
  18. 利用vue实现树表格分页
  19. 计算机编程语言及Java
  20. 人工智能专业需要什么电脑

热门文章

  1. 【Redis】Redis 使用 redisson 做分布式锁 复盘 maven 依赖 netty 冲突
  2. 【Elasticsearch】实用BM25 -第2部分:BM25算法及其变量
  3. 【Java】java 实现 线程交替输出
  4. Kafka 与Spark的集成
  5. 【Spark】reduceByKey和GroupByKey
  6. drools 7.x 事件元数据
  7. import com.google.common.* 出错,找不到
  8. spark学习-42-Spark的driver理解和executor理解
  9. idea如何安装scala插件
  10. Spring技术社群,欢迎加入