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

Java内存管理-JVM内存模型以及JDK7和JDK8内存模型对比总结(三)

图片 一、概述 Java内存管理采用[自动内存管理]机制,因为这个自动管理机制,Java程序员就不需要去写释放内存的代码,而且不容易出现内存泄漏问题(比C/C++程序员少一些烦恼)。...JDK1.4中新引入了NIO机制,它是一种基于通道与缓冲区的新I/O方式,可以直接从操作系统中分配直接内存,即直接堆外分配内存,这样能在一些场景中提高性能,因为避免了在Java堆和Native堆中来回复制数据...三、JDK7和JDK8的JVM内存模型的总结 1、方法区变化 这里介绍的是JDK1.8 JVM内存模型。...2、运行时常量池变化 在近三个JDK版本(1.6、1.7、1.8)中, 运行时常量池(Runtime Constant Pool)的所处区域一直在不断的变化,在JDK1.6时它是方法区的一部分;1.7又把他放到了堆内存中...五、参考内容 《深入理解Java虚拟机》 JDK1.8 JVM内存模型 Java内存区域与内存溢出异常(jdk 6,7,8) 对于JVM内存模型的理解(对比jdk1.7与1.8) https://www.cnblogs.com

1.5K20

原 【JDK并发基础】Java内存模型详解

无论你是Java还是C,或者其他编程语言编写高并发程序时,都或多或少的会涉及内存模型。...高并发程序下数据访问的一致性和安全性受到挑战,为了保证程序正确执行,Java内存模型(以下简称JMM)由此而诞生。如果不理解JMM,就会对内存可见性,有序性等问题出现时无从下手。...       在共享内存模型里,线程间的是通过读-写内存中的公共状态进行隐式通信的,那线程在Java虚拟机里是什么位置呢?...Java线程之间的通信由JMM控制,JMM的抽象示意图如下: ?        本地内存A和B有主内存中共享变量x的副本。假设初始时三个内存中的x值都为0。...2.这个写回内存操作会使其他CPU里缓存了该内存地址的数据无效。 参考:        《深入理解Java虚拟机》        《Java并发编程的艺术》        《Java高并发程序设计》

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

    jdk(4) - JVM内存

    JVM 运行时内存划分 1.1 整体分布 主要分为 : jvm 内存 计数器 : 利用自增特性,主持线程顺次执行栈中的指令; JVM栈 : 由栈帧组成,每个栈帧包含当前方法的入口,返回信息,参数和变量...,基础类型和对象的引用等; 本地方法栈 : 主要维护JNI相关的信息 堆 : 用于存放程序运行中创建的对象数据; 本地内存 元数据区 : 用于存放永久对象的区域; 直接内存 : 用于存放堆外内存,...直接使用操作系统本身内存的区域(如 NIO部分类库实例); image.png 图中,绿色为线程私有的,换色则属线程公用; 1.2 堆内存划分 年轻代 Eden : 新对象的存放之地;占用内存达到阈值后会触发...servivor0 : 幸存区,用于youngGC时,临时存放幸存的对象; servivor1 : 同servivor0; servivor0, servivor1 配合Eden,使得youngGC时,不产生内存碎片...,同时保证了新生内存都在Eden区; 参考文章 : 为什么JVM新生代中有两个survivor?

    64010

    jdk1.7和jdk1.8的堆内存模型

    jdk1.7的堆内存模型 Young 年轻区(代) Young区被划分为三部分,Eden区和两个大小严格相同的Survivor区,其中,Survivor区间中,某一时刻只有其中一个是被使用的,另外一个留做垃圾收集时复制对象用...Virtual区: 最大内存和初始内存的差值,就是Virtual区。 jdk1.8的堆内存模型 由上图可以看出,jdk1.8的内存模型是由2部分组成,年轻代+ 年老代。...年轻代:Eden + 2*Survivor 年老代:OldGen 在jdk1.8中变化最大的Perm区,用Metaspace(元数据空间)进行了替换。...官网给出了解释:http://openjdk.java.net/jeps/122 This is part of the JRockit and Hotspot convergence effort....现实使用中,由于永久代内存经常不够用或发生内存泄露,爆出异常 java.lang.OutOfMemoryError: PermGen。

    82220

    JVM之JVM运行时内存结构, JDK1.7 JVM内存结构, JDK1.8 JVM内存结构, JVM堆内存结构

    1 JDK1.7结构 1.1 JVM内存图 程序计数器: 线程私有的(每个线程都有一个自己的程序计数器), 是一个指针. 代码运行, 执行命令....方法区: 线程共享的(所有的线程共享一份), .class的信息, 类的信息, 方法的定义, 常量池, 静态变量等. 1.2 JDK1.7 堆内存结构 Young 年轻区(代) Young区被划分为三部分...JDK1.8 结构 2.1 JVM运行时内存JDK1.8和JDK1.7的jvm内存最大的区别是, 在1.8中方法区是由元空间(元数据区)来实现的,常量池移到堆中. 1.8不存在方法区,将方法区的实现给去掉了...元空间: 存储.class 信息, 类的信息,方法的定义,静态变量等.而常量池放到堆里存储 2.2 JDK1.8堆内存结构 由上图可以看出,jdk1.8的内存模型是由2部分组成, 年轻代+年老代....现实使用中,由于永久代内存经常不够用或发生内存泄露,爆出异常java.lang.OutOfMemoryError: PermGen。基于此,将永久区废弃,而改用元空间,改为了使用本地内存空间。

    80510

    Java_JDK

    JDK简介   JDK全称Java SE Development kit(JDK),即java标准版开发包,是Oracle提供的一套用于开发java应用程序的开发包,它提供编译,运行java程序所需要的各种工具和资源...,包括java编译器,java运行时环境,以及常用的java类库等 推荐使用jdk1.8版本 优点:   1)jdk中最稳定版本   2)企业工作和高校学习都推荐使用的版本 JDK安装 安装教程一...JDK8、Windows10为例   1.运行安装程序:jdk-8u152-windows-x64.exe;   2.尽量更改默认安装目录(可选择默认路径),方便以后管理   3.JDK安装完成后...,系统会弹出一个安装JRE的提示窗口,因为JDK已经包含了JRE,我们可以直接关闭窗口,当然你也可以选择安装   这样Java_JDK就安装完成了 bin文件夹:全都是工具 include文件夹...:包含了其他语言写的程序 jre文件夹:Java运行环境 lib文件夹:包含了人家写好的所有Java类 src.zip压缩文件:Java源代码 JDK下载地址   1.Oracle官网:立即下载   2

    37530

    JDK1.9-数组原理内存

    2.1 内存概述 内存是计算机中的重要原件,临时存储区域,作用是运行程序。我们编写的程序是存放在硬盘中的,在硬盘中的程 序是不会运行的,必须放进内存中才能运行,运行完毕后会清空内存。...Java虚拟机要运行程序,必须要对内存进行空间的分配和管理。 2.2 Java虚拟机的内存划分 为了提高运算效率,就对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式。...JVM的内存划分: 2.3 数组在内存中的存储 一个数组内存图 以上方法执行,输出的结果是[I@5f150435,这个是什么呢?是数组在内存中的地址。...new出来的内容,都是在堆 内存中存储的,而方法中的变量arr保存的是数组的地址。 输出arr[0],就会输出arr保存的内存地址中数组中0索引上的元素 两个数组内存

    23640

    Java 虚拟机原理】JDK 体系结构 | Java 源码运行原理 | Java 虚拟机内存

    文章目录 一、JDK 体系结构 二、Java 源码运行原理 三、Java 虚拟机内存结构 一、JDK 体系结构 ---- JDK 体系结构 : 下图所有的内容都是 JDK 体系中的组成元素 ; Java..., javadoc 生成 Java 文档 ; JRE : 橙色部分以下的都是 JRE 运行环境 ; Java Virtual Machine : Java 运行最重要的基础是 Java 虚拟机 , 也就是下图最底层的..." Java Virtual Machine " , 这是 Java 代码一次编译 , 到处运行的基础 , Java 程序实际上是运行在虚拟机上的 ; 二、Java 源码运行原理 ---- Java...Linux 操作系统 , Java 虚拟机会将字节码文件转为 Linux 机器码 , 在 Linux 系统中运行 ; 在不同的操作系统中 , Java 虚拟机的底层实现是不同的 ; 三、Java 虚拟机内存结构..., 使用类加载器将 class 文件装载到 Java 虚拟机 内存中 ; Java 虚拟机内存 模型 就是 运行时数据区 , 这部分内存可划分为以下 5 个区域 : 堆区 : 对象创建好之后都放在堆内存

    77320

    最新java内存模型_java内存模型

    Java内存模型 Java内存模型是每个java程序员必须掌握理解的,这是Java的核心基础,对我们编写代码特别是并发编程时有很大帮助。...由于Java程序是交由JVM执行的,所以我们在谈Java内存区域划分的时候事实上是指JVM内存区域划分。 1.1....Java内存模型指的就是Runtime Data Area(运行时数据区),即程序执行期间用到的数据和相关信息保存区。 1.2....Java内存模型 根据 JVM 规范,JVM 内存共分为虚拟机栈、堆、方法区、程序计数器、本地方法栈五个部分。结构如下图: 1.2.1. PC程序计数器: l 每个线程对应有一个程序计数器。...Java内存模型工作示意图 1) 首先类加载器将Java代码加载到方法区 2) 然后执行引擎从方法区找到main方法 3) 为方法创建栈帧放入方法栈,同时创建该栈帧的程序计数器

    1.2K10

    java内存模型_简述java内存模型

    什么是JMM   JMM即为JAVA 内存模型(java memory model)。...Java内存模型,就是为了屏蔽系统和硬件的差异,让一套代码在不同平台下能到达相同的访问结果。JMM从java 5开始的JSR-133发布后,已经成熟和完善起来。   ...此处的主内存和工作内存跟JVM内存划分(堆、栈、方法区)是在不同的层次上进行的,如果非要对应起来,主内存对应的是Java堆中的对象实例部分,工作内存对应的是栈中的部分区域,从更底层的来说,主内存对应的是硬件的物理内存...JVM在设计时候考虑到,如果JAVA线程每次读取和写入变量都直接操作主内存,对性能影响比较大,所以每条线程拥有各自的工作内存,工作内存中的变量是主内存中的一份拷贝,线程对变量的读取和写入,直接在工作内存中操作...因为JMM的工作内存和主内存之间存在延迟,而且java会对一些指令进行重新排序。

    1.1K21

    Java之安装JDK

    image.png window系统安装java 下载JDK 首先需要下载 java 开发工具包 JDK 在下载页面中根据自己的系统选择对应的版本,本文以 Window 64位系统为例: image...安装JDK,安装过程中可以自定义安装目录等信息,例如我们选择安装目录为 C:\Program Files (x86)\Java\jdk1.8.0_91。...注意:如果使用 1.5 以上版本的 JDK,不用设置 CLASSPATH 环境变量,也可以正常编译和运行 Java 程序。...变量设置参数如下: 变量名:JAVA_HOME 变量值:C:\Program Files (x86)\Java\jdk1.8.0_91 // 要根据自己的实际路径配置 变量名:CLASSPATH...测试JDK是否安装成功 1、"开始"->"运行",键入"cmd"; 2、键入命令: java -version、java、javac 几个命令,出现以下信息,说明环境变量配置成功; image

    42920
    领券