JVM7、8详解及优化
一、引言:永久代为什么被移出HotSpot JVM了?
详见:JEP 122: Remove the Permanent Generation
原因主要有两个:
- 1、由于Permanent Generation内存经常不够用或发生内存泄露,引发恼人的java.lang.OutOfMemoryError: PermGen (在Java Web开发中非常常见)。
- 2、移除Permanent Generation可以促进HotSpot JVM与 JRockit VM的融合,因为JRockit没有永久代。
This is part of the JRockit and Hotspot convergence effort. JRockit customers do not need to configure the permanent generation (since JRockit does not have a permanent generation) and are accustomed to not configuring the permanent generation.
根据上面的各种原因,永久代最终被移除,方法区移至Metaspace,字符串常量移至Java Heap。
1. JVM堆内存划分
这两天看到下面这篇文章的图不错。
1.1 JDK7及以前的版本
其中最上一层是Nursery内存,一个对象被创建以后首先被放到Nursery中的Eden内
存中,如果存活期超两个Survivor之后就会被转移到长时内存中(Old Generation)中。
永久内存中存放着对象的方法、变量等元数据信息。通过如果永久内存不够,就会得到如下错误:
Java.lang.OutOfMemoryError: PermGen
- 1
- 1
1.2 JDK8版本
JDK8中把存放元数据中的永久内存从堆内存中移到了本地内存(native memory)中,这样永久内存就不再占用堆内存,它可以通过自动增长来避免JDK7以及前期版本中常见的永久内存错误(Java.lang.OutOfMemoryError: PermGen)。
JDK8也提供了一个新的设置Matespace内存大小的参数:
-XX:MaxMetaspaceSize=128m
- 1

- 1
注意:如果不设置JVM将会根据一定的策略自动增加本地元内存空间。如果你设置的元内存空间过小,你的应用程序可能得到以下错误:
java.lang.OutOfMemoryError: Metadata space
JVM7、8详解及优化的更多相关文章
- JS中的函数节流throttle详解和优化
JS中的函数节流throttle详解和优化在前端开发中,有时会为页面绑定resize事件,或者为一个页面元素绑定拖拽事件(mousemove),这种事件有一个特点,在一个正常的操作中,有可能在一个短的 ...
- my.cnf 详解与优化【转】
MySQL配置文件my.cnf 例子最详细翻译,可以保存做笔记用. #BEGIN CONFIG INFO#DESCR: 4GB RAM, 只使用InnoDB, ACID, 少量的连接, 队列负载大#T ...
- apache配置文件详解与优化
apache配置文件详解与优化 一.总结 一句话总结:结合apache配置文件中的英文说明和配置详解一起看 1.apache模块配置用的什么标签? IfModule 例如: <IfModule ...
- tomcat常用配置详解和优化方法
tomcat常用配置详解和优化方法 参考: http://blog.csdn.net/zj52hm/article/details/51980194 http://blog.csdn.net/wuli ...
- Dockerfile详解及优化
Dockerfile详解 0. Dockerfile的作用 docker可以根据Dockerfile中的指令来构建docker镜像.Dockerfile是一个文本文件,其应当包含用户想要构建一个镜像的 ...
- Tomcat记录-tomcat常用配置详解和优化方法(转载)
常用配置详解 1 目录结构 /bin:脚本文件目录. /common/lib:存放所有web项目都可以访问的公共jar包(使用Common类加载器加载). /conf:存放配置文件,最重要的是serv ...
- php详解和优化
nginx结合php使用FastCGI方式 apache结合php,php是作为一个模块加载到apache中 (1)FastCGI工作原理 1.用户发送http请求报文给nginx服务器 2.ngin ...
- IIS应用程序池配置详解及优化
参数说明 1.常规 属性名称 属性详解 NET CLR 版本 配置应用程序池,以加载特定版本的 .NET CLR.选定的 CLR版本应与应用程序所使用的相应版本的 .NET Framework 对应. ...
- (转)MyISAM Key Cache详解及优化
原文:http://huanghualiang.blog.51cto.com/6782683/1372721 一.MyISAM Key Cache详解: 为了最小化磁盘I/O,MyISAM将最频繁访问 ...
- ggplot2|theme主题设置,详解绘图优化-“精雕细琢”-
本文首发于“生信补给站”公众号,https://mp.weixin.qq.com/s/hMjPj18R1cKBt78w8UfhIw 学习了ggplot2的基本绘图元素ggplot2|详解八大基本绘图要 ...
随机推荐
- 启动ECLIPSE时,提示failed to create the java virtual machine
修改eclipse.ini中的-XX:MaxPermSize=256M 这一项的原始值是512M.
- java IO字符流
字节流:因为内存中数据都是字节,二进制数据. 字符流:方便处理文本数据.字符流是基于字节流的. ascii 编码表,并且各国都有自己的编码表. unicode码表,世界码表.优化后 utf-8码表. ...
- Qt 随机数
相关函数 #include <QtGlobal> qsrand(unsigned seed); qrand(); 以上函数产生的随机数为伪随机数.之所以称为伪随机数,有以下两点原因: ...
- bzoj1941 Hide and Seek
Description 小猪iPig在PKU刚上完了无聊的猪性代数课,天资聪慧的iPig被这门对他来说无比简单的课弄得非常寂寞,为了消除寂寞感,他决定和他的好朋友giPi(鸡皮)玩一个更加寂寞的游戏- ...
- python 笔记 2017
26.反斜杠用处,断言一些字符包含特殊字符的 if "<h3 class=\"entH 22222setH\">刷新成功</h3>" i ...
- VBA文本型数字变成数值
sub test()with activesheet .usedrange.numberformatlocal="" .usedrange=.usedrange.valueen ...
- shell脚本函数
不调用就不执行 调用就执行 调用时候的$1是指执行时候的参数1 调用之后的$是位置参数
- Java常用的加密解密类(对称加密类)
Java常用的加密解密类 原文转载至:http://blog.csdn.net/wyc_cs/article/details/8793198 原创 2013年04月12日 14:33:35 1704 ...
- javascript创建对象之寄生构造函数模式(六)
这种模式的基本思想是创建一个函数,该函数的作用仅仅是封装创建对象的代码,然后再返回新创建的对象; 但是从表面上看,这个函数有很像典型的构造函数. function createHuman(name,s ...
- ie6,7下的textarea的type获取
<input type='button' value="按钮" class='gys'> <textarea class='gys gystextarea'> ...