首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java内存区域

我们通过磁盘或者网络IO得到的数据,都需要先加载到内存中,然后CPU从内存中获取数据进行读取,也就是说内存充当了CPU和磁盘之间的桥梁 最新的JDK 8中对之前的运行时数据区相关内容有着不同的划分,...由执行引擎读取下一条指令,并执行该指令。...程序计数器区域 是唯一一个在《Java虚拟机规范》中没有规定任何OneOfMemoryError情况的区域 Java虚拟机栈(Java Virtual Machine Stack) 与上面的程序计数器一样...(但是在《Java虚拟机规范》中 它表明 所有的对象示例以及数组都应该在堆上分配), 具体听谁的咱也不知道… 相关细节: 一个JVM实例只存在一个堆内存,堆也是Java内存管理的核心区域。...这区域的内存回 收目标主要是针对常量池的回收和对类型的卸载,一般来说这个区域的回收效果比较难令人满意,尤 其是类型的卸载,条件相当苛刻,但是这部分区域的回收有时又确实是必要的。

13510

Java内存区域

Java运行时数据区域 Java虚拟机所管理的内存包括以下几个运行时数据区域,如下图: 程序计数器   程序计数器(Program Counter Register)是一块较小的内存区域,是当前线程执行的字节码的行号指示器...程序计数器所在的内存区域是唯一一个在Java虚拟机没有OOM(OutOfMemoryError)情况的区域。...上面三个内存数据区域(程序计数器、Java虚拟机栈、本地方法栈)都是私有的,那么我们来看一下内存线程共享的数据区域Java堆   Java堆是所有线程共享的一个内存区域,在虚拟机启动时创建。...主要是存放对象实例(并不是全部对象实例)和数组,因此Java堆是GC收集器管理的主要区域Java堆可以是处于物理上不连续的内存空间中,只要逻辑上是联系的。...方法区   方法区(Method Area)与Java堆一样是线程之间共享的内存区域。他主要存储被虚拟机加载的类信息、常量、静态变量、及时编译器编译后的代码等数据。

28030
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Java内存区域

    基本问题: 介绍下 Java 内存区域(运行时数据区) Java 对象的创建过程(五步,建议能默写出来并且要知道每一步虚拟机做了什么) 对象的访问定位的两种方式(句柄和直接指针两种方式) 拓展问题: String...2 运行时数据区域 Java 虚拟机在执行 Java 程序的过程中会把它管理的内存划分成若干个不同的数据区域。 ? 这些组成部分一些事线程私有的,其他的则是线程共享的。...在 HotSpot 虚拟机中和 Java 虚拟机栈合二为一。 2.4 堆 Java 虚拟机所管理的内存中最大的一块,Java 堆是所有线程共享的一块内存区域,在虚拟机启动时创建。...2.5 方法区 方法区与 Java 堆一样,是各个线程共享的内存区域,它用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。...JDK1.7及之后版本的 JVM 已经将运行时常量池从方法区中移了出来,在 Java 堆(Heap)中开辟了一块区域存放运行时常量池。

    1.2K20

    Java内存区域详解

    一.概述 Java虚拟机在执行Java程序时,会把它管理的内存划分为若干个不同的数据区域。JDK1.8和之前版本略有不同。...有两个作用: 字节码解释器通过改变程序计数器来依次读取指令,从而实现代码的流程控制,如:顺序执行、选择、循环、异常处理。...2.4 堆 Java 虚拟机所管理的内存中最大的一块,Java 堆是所有线程共享的一块内存区域,在虚拟机启动时创建。此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例以及数组都在这里分配内存。...Java 堆是垃圾收集器管理的主要区域,因此也被称作GC 堆(Garbage Collected Heap)。...最大堆内存可通过-Xmx参数配置,若没有特别配置,将会使用默认值,详见:Default Java 8 max heap size) ...... 2.5 方法区 方法区也是各个线程共享的内存区域,它用于存储已经被虚拟机加载的类信息

    44440

    Java 内存区域详解

    写在前面 (常见面试题) 基本问题 介绍下 Java 内存区域(运行时数据区) Java 对象的创建过程(五步,建议能默写出来并且要知道每一步虚拟机做了什么) 对象的访问定位的两种方式(句柄和直接指针两种方式...二 运行时数据区域 Java 虚拟机在执行 Java 程序的过程中会把它管理的内存划分成若干个不同的数据区域。 JDK 1.8 和之前的版本略有不同,下面会介绍到。...从上面的介绍中我们知道程序计数器主要有两个作用: 字节码解释器通过改变程序计数器来依次读取指令,从而实现代码的流程控制,如:顺序执行、选择、循环、异常处理。...2.4 堆 Java 虚拟机所管理的内存中最大的一块,Java 堆是所有线程共享的一块内存区域,在虚拟机启动时创建。此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例以及数组都在这里分配内存。...Java 堆是垃圾收集器管理的主要区域,因此也被称作GC 堆(Garbage Collected Heap)。

    48420

    Java 内存区域详解

    引言 学习Java也有一段时间了,总感觉有些东西学的不是很精通。例如Java内存区域到底是怎么样的?程序是怎么跑的?对象是怎么存放的?这些都影响了我对自己的程序运行的熟悉程度。 一....运行时数据区域 ? Java虚拟机在执行java程序的过程中,会把它所管理的内存划分成若干个不同的数据区域(每当运行一个java程序都会启动一个虚拟机)。...,例如使用ThreadPoolExecutor创建多个线程时,堆与方法区都可以被多个线程读取。...堆是java垃圾收集器管理的主要区域(很多时候会称为GC堆,不叫垃圾堆),垃圾收集器实现了对象的自动销毁。...总结 了解java内存区域是对java的深入学习,以前只知道有堆和栈的区分,现在我们了解到了具体的堆栈的作用。内存是怎么划分的,对象是怎么存储的,方法和属性的存放区别。

    42720

    Java内存区域总结

    (写在前面(常见面试题) 下面是面试官可能在“Java内存区域”知识点问你的问题,快拿出小本本记下来! 基本问题: 介绍下Java内存区域(运行时数据区)。...(为什么要学习Java内存区域) 对于Java程序员来说,在虚拟机自动内存管理机制下,不再需要像C/C++程序开发程序员这样为内一个new 操作去写对应的delete/free操作,不容易出现内存泄漏和内存溢出问题...2 运行时数据区域 Java虚拟机在执行Java程序的过程中会把它管理的内存划分成若干个不同的数据区域。 ? 这些组成部分一些事线程私有的,其他的则是线程共享的。...在HotSpot虚拟机中和Java虚拟机栈合二为一。 2.4 堆 Java虚拟机所管理的内存中最大的一块,Java堆是所有线程共享的一块内存区域,在虚拟机启动时创建。...JDK1.7及之后版本的 JVM 已经将运行时常量池从方法区中移了出来,在 Java 堆(Heap)中开辟了一块区域存放运行时常量池。

    42750

    JVM-Java内存区域

    运行时数据区域 JVM在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域,都有着各自的用途以及创建和销毁时间。包括以下几个如图所示的运行时数据区域: ?...4、Java堆 (Java Heap) 对于大多数应用来说,Java堆是Java虚拟机所管理的内存中最大的一块区域,在虚拟机启动时创建。...“GC堆” Java堆是垃圾收集器管理的主要区域,因此很多时候也被称为“GC堆”。 a、从内存回收角度看: 由于现在的收集器基本都是采用分代收集算法,所以Java堆可以细分为:新生代和老年代。...5、方法区(Method Area) 与Java堆一样,是各线程共享的内存区域。...参考资料 《Java虚拟机原理图解》 1.1、class文件基本组织结构 7、直接内存(Direct Memory) 直接内存并不是虚拟机运行时数据区的一部分,也不是Java虚拟机规范中定义的内存区域

    79910

    java内存区域划分详解

    概述:这篇将从概念上介绍Java虚拟机内存的各个区域,讲解这些区域的作用,服务对象以及其中可能产生的问题。...Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域,这些区域都有各自的用途以及创建和销毁时间,称之为运行时数据区域。...程序计数器可能出现的异常:此内存区域是唯一一个在Java虚拟机规范中没有规定任何OutofMemory区域的地方,一般遇到OOM问题,不会是这里。...ok,我们继续吧,下面要说的就是最最最最重要的了,Java堆,Java堆属于线程共享的区域,所有的对象实例和数组都要在堆上进行分配,Java堆在虚拟机启动时创建,此内存的唯一目的就是存放对象实例,Java...由于直接内存不属于Java虚拟机运行时数据区的一部分,也不是虚拟机规范中定义的内存区域,JDK1.4中新加入了NIO类,引入了一种基于通道与缓冲区的I/O方式,它可以使用Native函数库直接分配对外内存

    73241

    Java 读取文件

    JAVA有多种读取文件的方式,其中比较深层次的原理在我的另外一篇文章分析过:JDK核心JAVA源码解析(5) - JAVA File MMAP原理解析,那么,我们有哪些方式去读取一个文件的内容呢?...从ClassPath中读取文件 直接从项目的classpath(maven的话src/main/resource编译之后也会存在于classpath下)读取: InputStream inputStream...JDK7中的读取文件内容的方式 利用Path对象省略了各种StreamReader,同时原生自带读取所有内容到内存的方法,在读取比较小的文件所有内容时我们可以考虑这么做: Path path = Paths.get...JDK8中的读取文件内容的方式 JDK8继续优化了这块的代码,引入了Stream相关框架,同时针对文件读取也能转化为Stream操作: Path path = Paths.get(getClass()....利用FileUtils读取文件 我们还可以使用commons-io包里面的读取文件相关类FileUtils: commons-io commons-io 2.5 利用FileUtils

    4.1K20

    Java虚拟机--虚拟机内存区域Java虚拟机内存区域

    Java虚拟机内存区域 Java程序在JVM虚拟机中运行,当我们一个类被加载到虚拟机中时,JVM会给该类分配具体的内存空间/内存地址,而这被分配的区域就是Java虚拟机运行时内存区域。...在后续的执行过程中,Java虚拟机会用一部分内存区域来存储程序运行期间所需要用到的数据和相关信息,通常我们称这部分内存区域叫做Runtime Data Area---运行时数据区,也就是我们常说的Java...Java运行时数据区会被分割为若干个不同的区域,这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有些区域则是依赖程序中线程的启动而建立,结束而销毁。...根据《Java虚拟机规范(Java SE 7版本)》的规定,Java虚拟机所管理的内存包括如下几个Java运行时候数据区域: ?...Java虚拟机堆 在Java虚拟机中,Java虚拟机堆是各个线程中共享的内存区域,也是我们Java程序中新建的对象数数组锁分配内存的区域

    2.1K80

    JAVA】JVM 内存区域的划分

    第三,堆(Heap),它是 Java 内存管理的核心区域,用来放置 Java 对象实例,几乎所有创建的 Java 对象实例都是被直接分配在堆上。...在 Oracle Hotspot JVM 中,本地方法栈和 Java 虚拟机栈是在同一块儿区域,这完全取决于技术实现的决定,并未在规范中强制。...正文 首先,为了让你有个更加直观、清晰的印象,我画了一个简单的内存结构图,里面展示了我前面提到的堆、线程栈等区域,并从数量上说明了什么是线程私有,例如,程序计数器、Java 栈等,以及什么是 Java...另外,还额外划分出了直接内存等区域。 这张图反映了实际中 Java 进程内存占用,与规范中定义的 JVM 运行时数据区之间的差别,它可以看作是运行时数据区的一个超集。...后记 以上就是 【JAVA】JVM 内存区域的划分 的所有内容了; 介绍了主要的内存区域,以及在不同版本 Hotspot JVM 内部的变化,并且分析了各区域是否可能产生 OutOfMemoryError

    23430

    Java内存区域和GC机制

    Java内存区域   了解Java GC机制,必须先清楚在JVM中内存区域的划分。在Java运行时的数据区里,由JVM管理的内存区域分为下图几个模块: ?...4,堆区(Heap):堆区是理解Java GC机制最重要的区域,没有之一。...在JVM所管理的内存中,堆区是最大的一块,堆区也是Java GC机制所管理的主要内存区域,堆区由所有线程共享,在虚拟机启动时创建。...Java对象的访问方式 一般来说,一个Java的引用访问涉及到3个内存区域:JVM栈,堆,方法区。   ...可以使用-XX:+UseAdaptiveSizePolicy开关来控制是否采用动态控制策略,如果动态控制,则动态调整Java堆中各个区域的大小以及进入老年代的年龄。

    51020
    领券