首页 > 系统相关 >jdk7 jdk8 堆内存区别

jdk7 jdk8 堆内存区别

时间:2023-08-02 17:18:05浏览次数:35  
标签:错误 内存空间 jdk8 内存 JDK8 OutOfMemoryError jdk7

1、堆内存划分

在JDK7以及其前期的JDK版本中,堆内存通常被分为三块区域Nursery内存(young 

generation)、长时内存(old generation)、永久内存(Permanent Generation for 

VM Matedata),显示如下图:

  jdk7之前

堆内存不够最常见的错误就是OOM(OutOfMemoryError)

栈内存溢出最常见的错误就是StackOverflowError,程序有递归调用时候最容易发生

 

 

2、而在JDK8中情况发生了明显的变化,就是一般情况下你都不会得到这个错误,原因

在于JDK8中把存放元数据中的永久内存从堆内存中移到了本地内存(native memory)

中,JDK8中JVM堆内存结构就变成了如下:

 

这样永久内存就不再占用堆内存,它可以通过自动增长来避免JDK7以及前期版本中

常见的永久内存错误(java.lang.OutOfMemoryError: PermGen),也许这个就是你的

JDK升级到JDK8的理由之一吧。当然JDK8也提供了一个新的设置Matespace内存

大小的参数,通过这个参数可以设置Matespace内存大小,这样我们可以根据自己

项目的实际情况,避免过度浪费本地内存,达到有效利用。

 

-XX:MaxMetaspaceSize=128m 设置最大的元内存空间128兆

 

注意:如果不设置JVM将会根据一定的策略自动增加本地元内存空间。

如果你设置的元内存空间过小,你的应用程序可能得到以下错误:


 

java.lang.OutOfMemoryError: Metadata space

标签:错误,内存空间,jdk8,内存,JDK8,OutOfMemoryError,jdk7
From: https://www.cnblogs.com/zeenzhou/p/17601166.html

相关文章

  • Spring内存码
    Spring内存码依然不会配环境orz,干脆直接拿以前那个java-sec-code了,springboot版本2.1.5.RELEASEspring内存码基础的有controller型和interceptor型,两个组件都可以动态添加,注入思路和以前一样,所以先看初始化的流程一、Controller型controller作用是接收特定参数,与@RequestMappi......
  • JDK8流的使用
    ​流的作用,将原先命令式的编程思想转换成声明式编程,是编程思想的改变,应尽快学习利用。流是从支持数据处理操作的源生成的元素序列,源可以是数组、文件、集合、函数。流不是集合元素,它不是数据结构并不保存数据,它的主要目的在于计算。涉及到以上四种,都可以试着用流处理。流的作用......
  • JDK8 流的使用说明
    流的作用,将原先命令式的编程思想转换成声明式编程,是编程思想的改变,应尽快学习利用。流是从支持数据处理操作的源生成的元素序列,源可以是数组、文件、集合、函数。流不是集合元素,它不是数据结构并不保存数据,它的主要目的在于计算。涉及到以上四种,都可以试着用流处理。流的作用:中......
  • win 11 无法安装ensp 组件VBox(版本过老)导致AR路由器报错 40,关闭win11 内存完整性 开关
        解决办法如下:1、先关闭内存完整性 2、重新安装vbox(成功) 3、启动ensp(无40报错) ......
  • SQL Server 内存占用较高 - 清除缓存 或 设置内存最大占用值
    SQLServer对服务器内存的使用策略是用多少内存就占用多少内存,只用在服务器内存不足时,才会释放一点占用的内存,所以SQLServer服务器内存往往会占用很高查看内存状态:DBCCMemoryStatus这些内存一般都是SqlServer运行时候用作缓存的:数据缓存:执行查询语句,SqlServer会将相......
  • 多线程任务新jdk8写法
    ListuniqueList=groupIds.stream().distinct().collect(Collectors.toList());//分组后的listList<List<String>>groupedIdList=Lists.partition(uniqueList,10);List<CompletableFuture<ResultBody<List<TyGroupVo>>>>futureLis......
  • 【八股文 02】C++ 进程内存布局及其相关知识
    1引言本文环境为Linux操作系统(x86)+C++。目的是了解进程内存布局,但是在了解的过程中发现需要前置一些知识,因此内容概览如下所示:1C/C++程序从源代码到可执行程序的构建过程1.1预处理,也叫预编译1.2编译1.3汇编1.4链接2各平台文件格式3ELF文件3.1ELF文......
  • C++内存管理基础
    在c语言中内存管理函数为malloc和free,而在c++中内存管理的函数则是new和delete。首先来看new和delete对于申请的内置类型的空间是如何处理的内置类型的处理申请连续的多个空间voidtest1(){ int*ret=(int*)malloc(sizeof(int)*10); int*rett=newint[10];//和malloc一......
  • 初学C语言day07--指针与堆内存
    什么是指针:指针是一种特殊的数据类型,使用它可以定义指针变量,指针变量中存储的是整形数据,该整型数据代表了内存的编号(地址),可以通过这个编号访问对应的内存为什么要使用指针:1、函数之间是相互独立的,但是有时候需要共享变量传参是单向值传递全局变量可以共享,但是容易命名冲突......
  • 使用VS开发人员工具观察类在内存中的布局
    1.先要生成相应文件2.打开VS2019开发人员工具3.cd至文件目录4.输入cl/d1reportSingleClassLayoutanimaldemo.cpp其中reportSingleClassLayoutanimalLayout后面的animal为我们想要查看的类名,demo.cpp是其所在的源文件......