`

JVM学习 - 体系结构 内存模型

    博客分类:
  • jvm
 
阅读更多
  • 二:JVM内存区域模型

JVM学习 - 体系结构 内存模型

1.方法区

也称"永久代” 、“非堆”,  它用于存储虚拟机加载的类信息、常量、静态变量、是各个线程共享的内存区域。默认最小值为16MB,最大值为64MB,可以通过-XX:PermSize 和 -XX:MaxPermSize 参数限制方法区的大小。

运行时常量池:是方法区的一部分,Class文件中除了有类的版本、字段、方法、接口等描述信息外,还有一项信息是常量池,用于存放编译器生成的各种符号引用,这部分内容将在类加载后放到方法区的运行时常量池中。

2.虚拟机栈

描述的是java 方法执行的内存模型:每个方法被执行的时候 都会创建一个“栈帧”用于存储局部变量表(包括参数)、操作栈、方法出口等信息。每个方法被调用到执行完的过程,就对应着一个栈帧在虚拟机栈中从入栈到出栈的过程。声明周期与线程相同,是线程私有的

 局部变量表存放了编译器可知的各种基本数据类型(boolean、byte、char、short、int、float、long、 double)、对象引用(引用指针,并非对象本身),其中64位长度的long和double类型的数据会占用2个局部变量的空间,其余数据类型只占1 个。局部变量表所需的内存空间在编译期间完成分配,当进入一个方法时,这个方法需要在栈帧中分配多大的局部变量是完全确定的,在运行期间栈帧不会改变局部 变量表的大小空间。

3.本地方法栈

 与虚拟机栈基本类似,区别在于虚拟机栈为虚拟机执行的java方法服务,而本地方法栈则是为Native方法服务。

4.堆 

也叫做java 堆、GC堆是java虚拟机所管理的内存中最大的一块内存区域,也是被各个线程共享的内存区域,在JVM启动时创建。该内存区域存放了对象实例及数组(所有new的对象)。其大小通过-Xms(最小值)和-Xmx(最大值)参数设置,-Xms为JVM启动时申请的最小内存,默认为操作系统物理内存的1/64但小于1G,-Xmx为JVM可申请的最大内存,默认为物理内存的1/4但小于1G,默认当空余堆内存小于40%时,JVM会增大Heap到-Xmx指定的大小,可通过-XX:MinHeapFreeRation=来指定这个比列;当空余堆内存大于70%时,JVM会减小heap的大小到-Xms指定的大小,可通过XX:MaxHeapFreeRation=来指定这个比列,对于运行系统,为避免在运行时频繁调整Heap的大小,通常-Xms与-Xmx的值设成一样

由于现在收集器都是采用分代收集算法,堆被划分为新生代和老年代。新生代主要存储新创建的对象和尚未进入老年代的对象。老年代存储经过多次新生代GC(Minor GC)任然存活的对象。

新生代:

 程序新创建的对象都是从新生代分配内存,新生代由Eden Space和两块相同大小的Survivor Space(通常又称S0和S1或From和To)构成,可通过-Xmn参数来指定新生代的大小,也可以通过-XX:SurvivorRation来调整Eden Space及Survivor Space的大小。

老年代:

用于存放经过多次新生代GC任然存活的对象,例如缓存对象,新建的对象也有 可能直接进入老年代,主要有两种情况:①.大对象,可通过启动参数设置-XX:PretenureSizeThreshold=1024(单位为字节,默 认为0)来代表超过多大时就不在新生代分配,而是直接在老年代分配。②.大的数组对象,切数组中无引用外部对象。

老年代所占的内存大小为-Xmx对应的值减去-Xmn对应的值。

5.程序计数器 

它的作用是当前线程所执行的字节码的行号指示器,在虚拟机的模型里,字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、异常处理、线程恢复等基础功能都需要依赖计数器完成。

  • 三:直接内存

直接内存并不是虚拟机内存的一部分,也不是Java虚拟机规范中定义的内存区域。jdk1.4中新加入的NIO,引入了通道与缓冲区的IO方式,它可以调用Native方法直接分配堆外内存,这个堆外内存就是本机内存,不会影响到堆内存的大小。

分享到:
评论

相关推荐

    JVM体系架构

    JVM体系架构,主要介绍JVM 内存模型。

    深入理解Java虚拟机视频教程(jvm性能调优+内存模型+虚拟机原理)视频教程

    第4节jvm初体验-内存溢出问题的分析与解决 [免费观看] 00:17:59分钟 | 第5节jvm再体验-jvm可视化监控工具 [免费观看] 00:21:17分钟 | 第6节杂谈 [免费观看] 00:12:37分钟 | 第7节Java的发展历史00:27:24分钟 | ...

    深入理解JVM内存结构及运行原理全套视频加资料.txt

    2019最新深入理解JVM内存结构及运行原理(JVM调优)高级核心课程视频教程下载。JVM是Java知识体系中的重要部分,对JVM底层的了解是每一位Java程序员深入Java技术领域的重要因素。本课程试图通过简单易懂的方式,系统...

    JVM深入理解.xmind

    文件总结了JVM的体系结构:四大块,类装载子系统(class loader subsystem),执行引擎子系统(Executionengine子系统),垃圾回收系统(gc),运行时数据区(JVM内存)。

    深入理解_Java_虚拟机 JVM_高级特性与最佳实践

    / 316 12.1 概述 / 316 12.2 硬件的效率与一致性 / 317 12.3 Java内存模型 / 318 12.3.1 主内存与工作内存 / 319 12.3.2 内存间交互操作 / 320 12.3.3 对于volatile型变量的特殊规则 / 322 12.3.4 对于long和...

    JavaSE基础面试题.docx

    9.JVM生命周期及体系结构 10.JVM如何调优 11.Java中的内存模型 12.JVM如何调整内存大小 13.如何实现Java优化 14.各个集合在项目中的应用场景 15.对ArrayList扩容的理解 16.使用LinkedList删除元素的步骤 17.HashMap...

    JAVA虚拟机精讲

    《Java虚拟机精讲》以极其精练的语句诠释了HotSpot VM 的方方面面,比如:字节码的编译原理、字节码的内部组成结构、通过源码的方式剖析HotSpot VM 的启动过程和初始化过程、Java 虚拟机的运行时内存、垃圾收集算法...

    涵盖了 Java 基础、集合、源码、并发、虚拟机、框架、数据库、网络编程、设计模式、新特性和数据结构等多个知识领域的面试突击

    深入理解JVM内存模型、垃圾收集等底层知识 熟悉主流框架的设计思想和运行原理 掌握数据库、缓存、分布式系统等企业级开发技能 拓展视野,了解大数据、人工智能等前沿领域 综上所述,这本Java面试书籍旨在为广大Java...

    vmlens:在JVM上对多线程应用程序进行单元测试变得容易

    并且数据争用仅发生在特定的硬件体系结构和JVM上。 因此,vmlens使用Java内存模型执行所有可能的线程交织并检查程序流中的数据竞争。 描述了vmlens如何使用Java内存模型来测试所有线程交织。 易于使用 使用vmlens...

    Java虚拟机内存优化实践

    前面一篇文章介绍了Java虚拟机的体系结构和内存模型,既然提到内存,不得不说到内存泄露。众所周知,Java是从C++的基础上发展而来的,而C++程序的很大的一个问题是内存泄露难以解决,尽管Java的JVM有一套自己的垃圾...

    Java全能学习面试手册——Java面试题库.zip

    16 27道顶尖的Java多线程、锁、内存模型面试题!.pdf 17 29道常见的Spring面试题!.pdf 18 30个Java经典的集合面试题!.pdf 19 36道面试常问的MyBatis面试题!.pdf 20 40道常问的Java多线程面试题!.pdf 21 55道BAT...

    代码随想录最新第三版-最强八股文

    Java基础、Java内存模型、Java面向对象、Java集合体系、接口、Lambda表达式、类加载机制、内部类、代理类、Java并发、JVM、Java后端编译、Spring 3. Go defer底层原理、goroutine、select实现机制 4. 算法学习 数组...

    Java虚拟机(JVM)概述

    JVM可以解读指令代码并与底层进行交互:包括操作系统平台和执行指令并管理资源的硬件体系结构。从本质上讲,虚拟机是个被构建来提供特定或通用目的服务环境的非实体计算机。这听起来像是一个仿真器,用来仿真机器未...

    java虚拟机精讲(电子工业出版社出版)

    第1 章 Java体系结构 / 1 第2 章 字节码的编译原理 / 37 第3 章 字节码文件 / 67 第4 章 剖析HotSpot 的Launcher / 97 第5 章 剖析HotSpot 的初始化过程 / 122 第6 章 内存分配与垃圾回收 / 147 第7 章 类加载...

    Java及大数据学习路线.pdf

    Nginx反向代理、负载均衡、动静分离 JVM内存模型、参数调优 JUC线程⾼级 分布式架构注册中⼼Zookeeper 虚拟化应⽤容器Docker 全⽂检索引擎ElasticSearch 消息队列RabbitMQ 前端VUE/ES6 2⼤数据学习路线 2.1JavaSE ...

    Java虚拟机

    第五部分探讨了Java实现高效并发的原理,包括JVM内存模型的结构和操作;原子性、可见性和有序性在Java内存模型中的体现;先行发生原则的规则和使用;线程在Java语言中的实现原理;虚拟机实现高效并发所做的一系列锁...

    disquawk:https

    DiSquawk 分布式Squawk(DiSquawk)是Java虚拟机(JVM),它在非缓存一致的体系结构上实现Java内存模型。 DiSquawk正在使用构建的520核原型机上进行开发和测试。 DiSquawk最初基于 JVM和的核心库。局限性没有垃圾...

    涵盖了90%以上的面试题

    计算机网络体系结构 谈谈你对Struts的理解。 谈谈你对Hibernate的理解。 谈谈你对Lucene和solr的理解 谈谈你对ActiveMQ的理解 Spring的IOC,DI和AOP 谈谈你对webservice和dubbo的理解 谈谈你的SOA的理解。 谈谈你对...

    达内java培训目录

    JavaSE核心 异常处理、多线程基础、IO系统、网络编程、Java反射机制、JVM性能调优(JVM内存结构剖析、GC分析及调优、JVM内存参数优化)、Java泛型、JDK新特性 熟练掌握JavaSE核心内容,特别是IO和多线程;...

Global site tag (gtag.js) - Google Analytics