jvm——metaspace代替永久代
http://www.cnblogs.com/duanxz/p/3520829.html
1.什么时候会触发fullGC?fullGC频繁可能的原因是什么?
当metaSpace超过MaxMataSpaceSize设置值时会触发FullGC,默认是无穷大;
存在类、类加载器导致的内存泄漏或大小不合适
2.metaSpace的组成?
Klass MetaSpace:
用来存klass的(class文件在jvm中运行时的数据结构);
一个紧接着Heap的连续的存储空间;
这块内存大小可通过-XX:CompressedClassSpaceSize参数来控制,这个参数默认是1G,但是这块内存也可以没有,假如没有开启压缩指针就不会有这块内存,这时候Klass信息存在NoKlass Metaspace中。
NoKlass MetaSpace:
专门来存klass相关的其他的内容,比如method,constantPool等;
这块内存是由多块内存组合起来的,所以可以认为是不连续的内存块组成的;
NoKlass Mestaspace是由一块块内存慢慢组合起来的,在没有达到限制条件的情况下,会不断加长这条链,让它可以持续工作。
3.java8中永久代被元数据区取代,有什么好处?
1)把永久代从jvm虚拟机中移除,metaSpace放置于内存中,既节省了JVM的内存空间,又避免了永久代大小设置不合理带来的困扰。
2)解决永久代的OOM问题。内存空间一般来说是足够大的,当meatSpace超级大的时候,就被操作系统杀死了。(如果Klass Metaspace用完了,那就会OOM了,不过一般情况下不会)
3)
4.元空间的问题?
元空间虚拟机采用了组块分配的形式,同时区块的大小由类加载器类型决定。类信息并不是固定大小,因此有可能分配的空闲区块和类需要的区块大小不同,这种情况下可能导致碎片存在。元空间虚拟机目前并不支持压缩操作,所以碎片化是目前最大的问题。
5.元空间的优化?
-XX:MaxMetaspaceSize:默认是无穷大;功能就是为metaSpace设置一个最大阈值,当metaSpace的内存超过这个值的时候会触发FullGC;
(我觉得这个内存说的是Klass和NoKlass的总和?为什么元空间的初始大小是21M?这里说的元空间是Klass+NoKlass么? 下面那个-->" -XX:CompressedClassSpaceSize:默认是1G;" 这里给的默认值应该是Klass空间的默认值吧,怎么比元空间的还大?)

-XX:CompressedClassSpaceSize:默认是1G;这个参数主要是设置Klass Metaspace的大小,不过这个参数设置了也不一定起作用,前提是能开启压缩指针,假如-Xmx超过了32G,压缩指针是开启不来的。
6.什么时候类加载器会被回收?类加载器在metaSpace中么?


jvm——metaspace代替永久代的更多相关文章
- JVM —— 移除永久代
近期准备生产环境 JDK 升级到 1.8,本地先升级了下,发现 -XX:PermSize 和 -XX:MaxPermSize 已经失效,取而代之的是一个新的区域 -- Metaspace(元数据区). ...
- JVM 知识点补充——永久代和元空间
之前已经讲过了不少有关 JVM 的内容,今天准备将之前没有细讲的部分进行补充,比如:永久代和元空间. 永久代 Java 的内存中有一块称之为方法区的部分,在 JDK8 之前, Hotspot 虚拟机中 ...
- JVM年轻代,老年代,永久代详解
前言 最近被问到了这个问题,解释的不是很清晰,有一些概念略微模糊,在此进行整理和记录,分享给大家.本篇文章主要讲解内存区域的年轻代,老年代和永久代,略微提及一些垃圾回收算法,下面是正文. 堆整体 堆主 ...
- (适合入门)JVM堆内存相关的启动参数:年轻一代、岁和永久代内存分配
假设你要观察JVM进程消耗的堆内存,通过命令工具jmap或可视化工具jvisualvm.exe.JVM这些参数的默认启动值.假设你想知道JVM内存分配策略,最开始手动设置这些参数.通过JDK统计结果, ...
- 性能测试三十四:jvm内存结构(栈、堆、永久代)
Java内存管理机制 Java采用了自动管理内存的方式Java程序是运行在Jvm之中的Java的跨平台的基于Jvm的跨平台特性内存的分配和对象的创建是在Jvm中用户可以通过一系列参数来配置Jvm Jv ...
- JVM堆内存相关的启动参数:年轻代、老年代和永久代的内存分配
如果想观察JVM进程占用的堆内存,可以通过命令工具jmap或者可视化工具jvisualvm.exe.JVM这些启动参数都拥有默认值,如果想了解JVM的内存分配策略,最好手动设置这些启动参数.再通过JD ...
- JVM深入:JDK8-废弃永久代(PermGen)迎来元空间(Metaspace)(转)
转载自:https://www.cnblogs.com/yulei126/p/6777323.html 1.背景 2.为什么废弃永久代(PermGen) 3.深入理解元空间(Metaspace) 4. ...
- JVM虚拟机21: 1.8中废弃永久代(PermGen)迎来元空间(Metaspace)
1.JDK8永久代的废弃 JDK8 永久代变化如下图: 1.新生代:Eden+From Survivor+To Survivor 2.老年代:OldGen 3.永久代(方法区的实现) : PermGe ...
- jdk源码剖析五:JDK8-废弃永久代(PermGen)迎来元空间(Metaspace)
目录 1.背景 2.为什么废弃永久代(PermGen) 3.深入理解元空间(Metaspace) 4.总结 ========正文分割线===== 一.背景 1.1 永久代(PermGen)在哪里? 根 ...
随机推荐
- I/O流之---FileInputStream和FileOutputStream的使用
FileInputStream和FileOutputStream都属于文件字节流. 通常我们可以用来做文件的复制操作,如下: import java.io.File; import java.io.F ...
- ROS自动切换策略
自动切换策略,具体如下 监视地址:1.1.1.1 轮询时间:30s:超时时间:1000ms up /ip firewall nat set [/ip firewall nat find comment ...
- vmnet2访问外网
1.vmnet2用于内网之间的访问,外部网络访问不了它.它可以访问外网,要想访问外网就必须有真实主机共享网络给它 2.[root@localhost ~]# vim /etc/sysconfig/ne ...
- 【VS开发】cmd dos 批处理重命名文件
原文地址:http://hi.baidu.com/benchoi/item/c1f531f5f1367b0b85d2785b 批处理实现文件批量重命名并自动加递增序列号 有时我们想把一些图片批量重命名 ...
- js --- ffmpeg rtsp 推流,websocket通信,cnavas 渲染
首先选择正确的ffmpeg包 百度搜索ffmpeg官网,点击进入下图所示. 点击download,进入下载页面,选择window,window下面只有一个builds版本,如图红线部分圈出来的 点击b ...
- [转帖]oracle备份恢复之recover database的四条语句区别
oracle备份恢复之recover database的四条语句区别 https://www.cnblogs.com/andy6/p/5925433.html 需要学习一下. 1 recover d ...
- ubuntu 安装 TensorFlow、opencv3 的 tips
安装tensorflow: 创建tensorflow虚拟环境 conda create -n tensorflow python=2.7 输入命令查看可用版本的tensorflow-gpu cond ...
- 用Kindle阅读PDF最简单的3个方法!
老实说,Kindle 对于PDF文件是很不友好的,经常会出现各种排版问题,所以,对电子阅读器方面比较了解的同学都知道,如果需要经常用阅读器查看PDF文件的话,最好还是买一款更大屏幕的设备,而Kindl ...
- cmd内部命令和外部命令的区别
内部命令 我们可以直接在CMD下就可以执行的命令,例如:telnet.ftp.dir.cd.等等,你可以在CMD下输入help进行查看 外部命令 就是cmd下不能直接运行的命令,(例如大家常用的nc) ...
- MySQL水平分表
业务表增长速度较快,单表数据较大,对表的读写有影响. 思路:化整为零,把单表拆解为多表,按指定的算法规则选择表. 好处:能大幅降低单表的数据,读写更快,同时分散了表数据, SQL语句也分散到不同的表中 ...