专栏首页IT笔记分享Java虚拟机笔记(一)

Java虚拟机笔记(一)

JDK和JRE区别

1、一般把Java程序设计语言,java虚拟机,java API类库这三部分统称为JDK(Java Development Kit),JDK是用于支持Java程序开发的最小环境。

2、Java API类库中Java SE API子集和Java虚拟机这两部分统称为JRE(Java Runtime Environment),JRE是支持Java程序运行的标准环境。

Java虚拟机内存区域

一、程序计数器

可以看做当前线程所执行的字节码的行号指示器。为线程私有的内存。是在Java虚拟机内存区域唯一一个不会内存溢出的区域。

二、Java虚拟机栈

Java虚拟机栈描述的是Java方法执行的内存模型:每个方法在执行的同时都会创建一个栈帧,用于存储局部变量表、操作数栈、动态链栈、方法出口等信息。Java虚拟机栈也是线程私有,生命周期和线程相同。

Java虚拟机栈中的局部变量表:存放编译期可知的各种基本数据类型、引用类型(reference)和runAddress类型。局部变量表所需要的内存空间在编译期间完成内存分配,在方法运行期间不会改变局部变量表的大小。

异常:

1)StackOverflowError:线程请求的栈的深度大于虚拟机所允许的深度。

2)OutOfMemoryError:扩展时无法申请到足够的内存。

三、本地方法栈

与Java虚拟机栈类似,线程私有,会抛出StackOverflowError和OutOfMemoryError异常。

Java虚拟机栈区别是本地方法栈为虚拟机使用的Native方法服务,Java虚拟机栈为虚拟机执行Java方法服务。

四、Java堆

存放对象实例,被所有线程共享,虚拟机启动时创建。Java堆又称GC堆,垃圾收集器管理的主要区域。

Java堆可以细分为:新生代和老年代。也可以分为Eden空间、From Survivor空间、To Survivor空间等。

如果在堆中没有内存完成实例分配,并且也无法再扩展,会抛出OutOfMemoryError异常

五、方法区

用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。是线程共享的区域。

与java堆一样不需要连续的内存和可以选择的固定大小并且可以扩展。不同点是可以选择不实现垃圾收集,这个区域主要的内存回收目标是针对常量池的回收和对类型的卸载。

当方法区无法满足内存分配需求时,将抛出OutOfMemoryError异常

六、运行时常量池

是方法区的一部分,用于存放编译期生成的各种字面量和符号引用,这部分内容将在类加载后进入方法区的运行时常量池中存放。具备动态特性,运行时也能将新的常量存放入池。同样在无法申请内存时会抛出OutOfMemoryError异常。

七、直接内存

不是虚拟机运行数据区的一部分。NIO类可以使用Native函数库直接分配堆外内存,然后通过存储在Java堆中的DirectByteBuffer对象作为这块内存的引用进行操作,避免了在Java堆和Native堆中来回复制数据。也会抛OutOfMemoryErrory异常

本文分享自微信公众号 - IT笔记分享(xiaosen_javashare)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-02-15

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • SpringMVC的工作原理图

    2、  DispatcherServlet收到请求调用HandlerMapping处理器映射器。

    凯哥Java
  • mysql 数据库中的三种判断是否包含总结

    1:在使用mysql数据库进行存储数据的时候,有时候,一个字段,要存储使用逗号分隔的多个数据,在查询的时候,传递的是一个keyword,需要在逗号分隔的字段中进...

    凯哥Java
  • 剖析Java中HashMap数据结构的源码及其性能优化

    存储结构 首先,HashMap是基于哈希表存储的。它内部有一个数组,当元素要存储的时候,先计算其key的哈希值,根据哈希值找到元素在数组中对应的下标。如果这个位...

    凯哥Java
  • Java中常见数据结构:list与map -底层如何实现

                    哈希表依赖两个方法:hashCode()和equals()

    凯哥Java
  • 史上最强Java NIO入门:担心从入门到放弃的,请读这篇!

    本文原题“《NIO 入门》,作者为“Gregory M. Travis”,他是《JDK 1.4 Tutorial》等书籍的作者。

    JackJiang
  • “大话架构”阿里架构师分享Java程序员需要突破的技术要点

    源码分析是一种临界知识,掌握了这种临界知识,能不变应万变,源码分析对于很多人来说很枯燥,生涩难懂。

    凯哥Java
  • 【译】用Java创建你的第一个区块链-part1

    区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。所谓共识机制是区块链系统中实现不同节点之间建立信任、获取权益的数学算法 。

    凯哥Java
  • Java并发编程:深入剖析ThreadLocal

    想必很多朋友对ThreadLocal并不陌生,今天我们就来一起探讨下ThreadLocal的使用方法和实现原理。首先,本文先谈一下对ThreadLocal的理解...

    凯哥Java
  • Java 下载zip文件

    List attachFileList = bookService.findAttachFileList(ids);

    凯哥Java
  • redis持久化rdb和aof之间的优势劣势

    概念: 在指定的时间间隔内将内存中的数据集快照写入磁盘, 也就是行话讲的Snapshot快照,它恢复时是将快照文件直接读到内存里。

    李红

扫码关注云+社区

领取腾讯云代金券