`
haoran_10
  • 浏览: 436703 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

JVM学习(1)-JVM运行时数据区

阅读更多
导言:java是基于一门虚拟机的语言,所以了解并且熟知虚拟机运行原理非常重要。
 
先整体看一张java虚拟机技术图:


 
一、堆
1、方法区,Method Area,主要存放已被虚拟机加载的类信息、常量、静态变量、及时编译器编译后的代码等数据。
又称为永久代。
 
比如spring 使用IOC或者AOP创建bean时,或者使用cglib,反射的形式动态生成class信息,
如果生成大量的动态类,造成堆内存不足,则会抛出OutOfMemoryError异常。
又比如tomcat把jsp编译成servlet类的时候,也会造成这种情况。
 
2、运行时的常量池:是方法区的一部分。用于存放编译器生成的各种字面量和符号引用,这部分内容将在类加载后存放到方法区的运行时常量池中。常量池有动态性,可以添加数据。比如string常量池,imtern()。其实就是享元模式的一种实现。
 
运行时常量池溢出:比如一直往常量池加入数据,就会引起OutOfMemoryError异常
 
3、java堆,java heap。是java虚拟机所管理的内存中最大的一块。是所有线程共享的一块内存区域,在虚拟机启动时创建。存放对象实例,数组。而垃圾收集器管理的主要区域也是这个区域,也被称为GC堆。
分为新生代和老年代。
当对象大量生成造成内存不足时,也会抛出异常。
 
二、栈
1、虚拟机栈,是线程私有的,与线程的生命周期相同。描述的是java方法执行的内存模型:每个方法被执行的时候都会同时创建一个栈帧,用于存放局部变量表(基本类型、对象引用)、操作数栈动态链表、方法出口等信息。
如果一个线程请求的栈深度大于虚拟机所允许的深度,将抛出StackOverflowError异常, 比如递归调用。
如果线程生成数量过多,无法申请足够多的内存时,则会抛出OutOfMemoryError异常。比如tomcat请求数量非常多时,设置最大请求数。
 
2、本地方法栈,Native Method Stack。也就是调用虚拟机使用到的Native方法服务。也会抛出以上两种异常。
 
3、程序计算器。当前线程所执行的字节码的行号指示器。
 
三、直接内存
并不是虚拟机运行时数据区的一部分。JDK1.4引入的nio,可以使用Native函数库直接分配堆外内存,然后通过一个存储在java堆里面的DiectByteBuffer对象作为这块内存的引用进行操作。这样能在一些场景中提高性能,因为避免了java堆和Native堆中来复制数据。

 

 

四、小结

虚拟机内运行时数据区整体就是上面所述,所有java对象分配回收等一系列的操作都在上述数据区,我们自己也根据虚拟机规范写一个java虚拟机,也要遵循以上原则。

 

  • 大小: 14.3 KB
0
0
分享到:
评论

相关推荐

    第3节: 揭秘JVM运行时数据区-02

    第3节: 揭秘JVM运行时数据区-02第3节: 揭秘JVM运行时数据区-02第3节: 揭秘JVM运行时数据区-02第3节: 揭秘JVM运行时数据区-02第3节: 揭秘JVM运行时数据区-02第3节: 揭秘JVM运行时数据区-02第3节: 揭秘JVM运行...

    JVM运行时数据区

    JVM定义了若干个程序执行期间使用的数据区域。这个区域里的一些数据在JVM启动的时候创建,在JVM退出的时候销毁。其他的数据依赖于每一个线程,在线程创建的时候创建,在线程退出的时候销毁。

    JVM参数优化及JVM解析.docx

    1、JVM参数推荐 2、Java运行时数据区 3、JVM内存模型 4、堆的内存划分 5、垃圾回收(GC) 6、JVM参数汇总

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

    包括JVM执行过程、虚拟机类加载机制、运行时数据区、GC、类加载器、内存分配与回收策略等,全套视频加资料高清无密码  第1讲 说在前面的话 免费 00:05:07  第2讲 整个部分要讲的内容说明 免费 00:06:58  第3讲...

    JVM-Java虚拟机

    运行时数据区;对象的创建流程与内存分配; 对象内存布局;如何访问一个对象;GC基本原理;串行收集器;并行收集器; 能学到什么:1,JVM底层运行机制和原理;2JVM参数;3,垃圾回收原理;4,垃圾回收器的使用;5,...

    Android代码-JVM-Sandbox

    > JVM沙箱容器,一种JVM的非侵入式运行期AOP解决方案 > Real - time non-invasive AOP framework container based on JVM 目标群体 BTRACE好强大,也曾技痒想做一个更便捷、更适合自己的问题定位工具,既可支持线上...

    很入理解JVM体系

    部分章节如下,内容在附件里面大家随意下载,欢迎...3、运行时数据区 4、本地库接口 2.3、JVM内存参数调整及监控 1、JVM之内存调整 2、JVM监控工具之Jconsole 3、JVM监控工具之JProfile 加群:113035529 共同交流学习

    面向大数据处理框架的JVM优化技术综述

    当前,以Hadoop、Spark为...这些大数据处理框架采用分布式架构,使用Java、Scala等面向对象语言编写,在集群节点上以Java虚拟机(JVM)为运行时环境执行计算任务,因此依赖JVM的自动内存管理机制来分配和回收数据对象.

    JVM-内存管理 2012-12.pdf

    详细介绍了JVM 内存管理相关知识 内存空间( VM运行时数据区域) ◦ 内存结构 ◦ 内存空间 内存分配 内存回收(GC) 内存分析工具

    全面了解JVM组成底层工作原理以及数据结构

    JVM介绍入门到深入,通过全面了解JVM组成底层工作原理以及数据结构,在今后JVM深入分析中全面提升运行性能

    运行时数据区域

    深入理解JVM第二章的运行时数据区域

    JVM 虚拟机.md

    JVM 学习,包含运行数据区域,GC,JMM 等常见问题

    Java进阶教程解密JVM视频教程

    JVM 是 Java 程序的运行环境,学习 JVM,方能了解 Java 程序是如何被执行的,为进一步深入底层原理乃至程序性能调优打好基础。通过学习这门课程,你将掌握:1. JVM 内存结构的组成、各部分功能作用,学会利用内存...

    jvm调优实战经验

    小池塘A(堆内存):JVM运行时数据区域,它为类实例和数组分配的内存。堆可以是固定大小的也可以是可变大小的。其中 Heap = {Old + NEW = { Eden , from, to } }。 小池塘B(非堆内存):包括所有线程之间共享的一个...

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

    包括JVM执行过程、虚拟机类加载机制、运行时数据区、GC、类加载器、内存分配与回收策略等,全套视频加资料高清无密码  第1讲 说在前面的话 免费 00:05:07  第2讲 整个部分要讲的内容说明 免费 00:06:58  第3讲...

    Java内存模型与JVM运行时数据区的区别详解

    主要介绍了Java内存模型与JVM运行时数据区的区别详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    jvm-compressor-benchmark:JVM上数据压缩库的基准套件

    另外,为了更准确地了解结果如何应用于您的用例,最好的办法是收集反映您的用法的特定测试数据集,并在此基础上运行测试。 有关更完整的描述,请检出项目运行测试要运行测试,首先需要使用编译Java源代码: ant ...

    超硬核!!!一篇文章搞定整个JVM运行时数据区

    JVM运行时数据区1 JVM运行时数据区2 解析JVM运行时数据区2.1 方法区(Method Area)2.2 Java堆(Java Heap)2.3 程序计数器(Program Counter Register)2.4 Java虚拟机栈(Java Virtual Machine Stacks)2.5 本地...

    03 运行时数据区概述及线程.pptx

    03 JVM 运行时数据区概述及线程的 PPT 重绘。讲述 Java 虚拟机 运行时数据区所处位置,结构划分,以及各个区域与线程的关系。

Global site tag (gtag.js) - Google Analytics