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堆内存划分

这两天看到下面这篇文章的图不错。

一图读懂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
时间: 2024-11-03 08:51:14

JVM7、8详解及优化的相关文章

Mysql 配置参数详解以及优化配置

mysql有以下几种日志: 错误日志:   log-err 查询日志:   log 慢查询日志:  log-slow-queries 更新日志:   log-update 二进制日志: log-bin 要把日志生成在 /var/log 目录下(是系统日志存放的地方,只有 root 账号有写权限),需要 MySQL进程对这个目录有读写权限,一般是不这么做的,也考虑到安全问题,包括 MySQL 本身的数据安全,因为对 MySQL 的所有操作,都会记录到常规查询日志.MySQL的日志就不要用 /var

Apache常用目录详解、配置文件详解及优化、配置文件权限详解

Apache常用目录详解 1)? /etc/httpd/conf/httpd.conf???(Apache的主配文件) httpd.conf是Apache的主配文件,整个Apache也不过就是这个配置文件,里面几乎包含了所有的配置.有的distribution都将这个文件拆分成数个小文件分别管理不同的参数.但是主要配置文件还是以这个文件为主.只要找到这个文件名就知道如何设置了.后面会详细解释Apache主配文件的每一行配置 2) /etc/httpd/conf.d/*.conf ?( ?(inc

直播卡顿原因详解及优化

随着视频直播的发展,很多直播团队可能会遇到视频直播卡顿,频繁出现缓冲标志或者直播画面一卡一卡等情况.究竟是哪些原因造成了视频直播观看的卡顿情况呢? 又拍直播云结合实践经验,从设备.视频流.网络这三方面进行解剖分析造成直播卡顿的问题及其解决方法. 视频直播卡顿原因 造成直播视频卡顿的原因主要有设备.视频流.网络这三方面的问题. 问题排查及解决方法 设备 高清视频往往会给硬件带来解码压力,由于解码造成的卡顿尤为明显.同时如果PC端Flash Player或移动端播放软件版本过低,可能也会造成解码问题

从技巧、案例和工具入手,详解性能优化怎么做

颜圣杰,.NET平台软件工程师,对DDD领域驱动设计感兴趣,目前在研究ABP框架,热爱写作与分享. 最近一段时间系统新版本要发布,在beta客户测试期间,暴露了很多问题,除了一些业务和异常问题外,其它都集中在性能上.有幸接触到这些性能调优的机会,这里跟大家归纳交流一下. 性能优化是一个老生常谈的问题了,典型的性能问题如页面响应慢.接口超时,服务器负载高.并发数低,数据库频繁死锁等.而造成性能问题又有很多种,比如磁盘I/O.内存.网络.算法.大数据量等.我们可以大致把性能问题分为四个层次:代码层次

Tomcat记录-tomcat常用配置详解和优化方法

常用配置详解 1 目录结构 /bin:脚本文件目录. /common/lib:存放所有web项目都可以访问的公共jar包(使用Common类加载器加载). /conf:存放配置文件,最重要的是server.xml. /logs:存放日志文件. /server/webapps:来管理Tomcat-web服务用的.仅对TOMCAT可见,对所有的WEB APP都不可见(使用Catalina类加载器加载). /shared/lib:仅对所有WEB APP可见,对TOMCAT不可见(使用Shared类加载

tomcat常用配置详解 及优化

常用配置详解 1 目录结构 /bin:脚本文件目录. /common/lib:存放所有web项目都可以访问的公共jar包(使用Common类加载器加载). /conf:存放配置文件,最重要的是server.xml. /logs:存放日志文件. /server/webapps:来管理Tomcat-web服务用的.仅对TOMCAT可见,对所有的WEB APP都不可见(使用Catalina类加载器加载). /shared/lib:仅对所有WEB APP可见,对TOMCAT不可见(使用Shared类加载

(转)MyISAM Key Cache详解及优化

原文:http://huanghualiang.blog.51cto.com/6782683/1372721 一.MyISAM Key Cache详解: 为了最小化磁盘I/O,MyISAM将最频繁访问的索引块("indexblock")都放在内存中,这样的内存缓冲区我们称之为Key Cache,它的大小可以通过参数key_buffer_size来控制.在MyISAM的索引文件中(MYI),连续的单元(contiguous unit)组成一个Block,Index block的大小等于该

hadoop之mapreduce详解(优化篇)

一.概述 优化前我们需要知道hadoop适合干什么活,适合什么场景,在工作中,我们要知道业务是怎样的,能才结合平台资源达到最有优化.除了这些我们当然还要知道mapreduce的执行过程,比如从文件的读取,map处理,shuffle过程,reduce处理,文件的输出或者存储.在工作中,往往平台的参数都是固定的,不可能为了某一个作业去修改整个平台的参数,所以在作业的执行过程中,需要对作业进行单独的设定,这样既不会对其他作业产生影响,也能很好的提高作业的性能,提高优化的灵活性. 现在回顾下hadoop

MySQL参数详解及优化

MySQL安装完成之后,需要对MySQL进行配置以及优化,从而使MySQL可以更高效的运行. vi /etc/my.cnf    #打开配置文件 [mysqld] datadir=/data/mysqldata             #在此位置读取数据 socket=/tmp/mysql.sock        #sock 通信设置 user=mysql                    #使用mysql启动 symbolic-links=0                #是否支持快捷方