Java 8下PermGen及参数设置

在上一章节中,我们定制化使用了Java 8环境,使用我们的测试页面打印出了JVM基本参数,但如果我们自己观察,会发现在MXBeans中,没有出现PermGen的使用数据,初始大小等信息,即使我们已经设置了大小:

在Java 7及以前版本中,PermGen主要存放加载的类和元数据信息,如果设置过小,类加载失败,可能会出现OutOfMemory的经典错误,在Azure website里面的Java开发中,碰到的客户定制化设置的问题也会涉及到PermGen的大小定制化。

那么在Java 8里面,PermGen去哪了呢?

我们可以先来看一下JVM的内存模型,JVM的内存分为Heap memory和Non-Heap memory,Heap memory主要会存放一些Java Object对象信息,而non-heap memory如PermGen主要会存放一些加载的Java classes和元数据信息。

在Java 8之前的Java版本当中,Heap size可以通过 MS, MX进行大小设置,而PermGen可以通过PermSize, MaxPerm在Java option中进行大小设置。之前的JVM的一个明显问题是,你在启动的时候设置了 XX:MaxPermSize,那么一旦在运行过程中加载的类超过了这个大小限制,你就会马上碰到那个著名的OOM(out of memory)错误,当然这种设计除了会出现OOM,也会有无法动态调整,很难调优等缺点,也会导致一系列的bug和性能问题,例如:

http://bugs.java.com/view_bug.do?bug_id=6962931

因此上,在Java 8的设计中,Oracle和Java社区放弃了PermGen设置,从此之后不再有PermGen这样一个东西,但是元数据依然是需要保存的,所以在Java 8中,元数据移到了本地内存中,叫Metaspace的地方。

那么对于最终用户来讲有什么变化呢?你不会因为PermGen碰到OOM的问题,因为你所有的有效系统内存都可以做Metaspace了,所以你不需要单独设置metaspace,在一个64位系统的机器中,默认的Metaspace初始大小是21MB,那么最大呢?理论上如果你的元数据真的非常多,加载的类也很多,理论上最大可以用光你所有的有效系统内存。

那么有没有办法设置或者限制Metaspace的大小呢?可以,Java提供了两个参数来让你在必要的情况下设置Metaspace的大小:

微系统默认21MB,你可以设置大一些避免频繁的full GC

-XX:MaxMetaspaceSize:理论上大小没有限制,但你可以设置一个限制值

回到我们的Azure website的Java OPTS的设置上,在Java 8的环境里面PermSize已经无用了,所以web.config中设置可简化为:

定制化Azure站点Java运行环境(5)的更多相关文章

  1. 定制化Azure站点Java运行环境(1)

    Azure website提供了为现代化的web应用程序快速部署的PAAS平台,可以让用户几分钟之内快速的将自己的应用部署到云端,并且提供了自动扩展(auto-scaling),SSL,多种语言(Ja ...

  2. 定制化Azure站点Java运行环境(4)

    定制化使用您自己的Tomcat版本和JDK环境 在上面章节中,介绍了如何通过web.config,定制默认的Azure website的Java运行环境,默认情况下,Azure站点的Tomcat是7. ...

  3. 定制化Azure站点Java运行环境(3)

    定制化Azure Website提供的默认的Tomcat和JDK环境 在我们之前的测试中,如果你访问你的WEB站点URL时不加任何上下文,实际上你看到的web界面是系统自带的测试页面index.jsp ...

  4. 定制化Azure站点Java运行环境(2)

    Azure Website上发布Java web应用 在Azure站点上发布Java Web应用非常简单,可以使用git从源代码发布,也可以使用FTP/FTPs直接发布,本节介绍FTP方式. 准备好你 ...

  5. Java 运行环境的安装、配置与运行

    (一)SDK 的下载与安装 1. 下载SDK 为了建立基于SDK 的Java 运行环境,需要先下载Sun 的免费SDK 软件包.SDK 包含了一整套开发工具,其中包含对编程最有用的是Java 编译器. ...

  6. Windows7系统下JAVA运行环境下载、安装和设置(第二次更新:2012年03月14日)

    1.下载 地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html,(由于Sun于2009年被oracle收购所以网址 ...

  7. Windows7下的Java运行环境搭建过程图解

    第一步:下载JDK 地址:http://www.oracle.com/technetwork/java/javase/downloads/index-jsp-138363.html,(由于Sun于20 ...

  8. Java运行环境的配置(JDK和JRE)

    Jdk 表示java开发环境,包含开发环境和运行环境 Jre 表示java运行环境 JDK就是Java Development Kit.简单的说JDK是面向开发人员使用的SDK,它提供了Java的开发 ...

  9. Editplus配置java运行环境

    Editplus配置java运行环境 下载及安装: editplus官网下载地址:https://www.editplus.com/ 安装方法和安装普通exe应用程序一样,选在安装路径,下一步下一步, ...

随机推荐

  1. sql中插入多条记录-微软批处理

    这是使用批处理的一个例子: System.IO.StreamWriter messagelog = null; string messageString = ""; SqlConn ...

  2. linux开启mysql远程登录

    Mysql默认root用户只能本地访问,不能远程连接管理mysql数据库,Linux如何开启mysql远程连接?设置步骤如下:1.GRANT命令创建远程连接mysql授权用户itloggermysql ...

  3. C语言中预定义符 __FILE__, __LINE__, __FUNCTION__, __DATE__, __TIME__ 的使用演示

    本文演示了C语言中预定义符 __FILE__, __LINE__, __FUNCTION__, __DATE__, __TIME__ 的使用. 这几个预定义符的名称就没必要再介绍了,顾名思义嘛. // ...

  4. SVN的错误: working copy locked

    提示:your working copy appears to be locked. run cleanup to amend the situation. 产生这种情况大多是因为上次svn命令执行失 ...

  5. < IOS > 论苹果数据持久化。

    最近做的音乐播放器,用了太多的数据存储.在各种APP中无可避免的要用到数据存储.在IOS中,给了很多办法进行数据持久化.但是万宗不离其变,都是要存储到本地中,IOS提供了沙盒机制,沙盒有多大呢???这 ...

  6. 国际C语言混乱代码大赛代码赏析(一)【转】

    本文转载自:http://blog.csdn.net/ce123_zhouwei/article/details/9073869 国际C语言混乱代码大赛代码赏析(一) 近段时间在看<C专家编程& ...

  7. Unity uGUI 登录界面

    小记:进入冬季,天气确实变冷了,即使这样也不能作为自己不学习的理由!!! 昨天咱们一起学习了UGUI的Button的相关知识,那么今天咱们做一个简单的登录Demo,有些人可能不屑但是多学点总没什么坏处 ...

  8. 字符串最小表示法 O(n)算法

    网上看了这篇文章后还是感觉有些地方讲的没有详细的证明所以添加了一点 红色字是博主写的 求字符串的循环最小表示: 上面说的两个字符串同构的,并没有直接先求出Min(s),而是通过指针移动,当某次匹配串长 ...

  9. NPOI新建和读取EXCEL

    //基本NPOI 1.2.5.0 static void Main(string[] args) { string path = string.Format("E:\\export{0}.x ...

  10. css直接写出小三角

    在开发移动端项目时,总是遇到很多小三角,之前一直用图片,感觉好麻烦,今天尝试了直接用CSS写出小三角!先看看如何写出各种小三角! /*箭头向上*/ .arrow-up { ; ; border-lef ...