定制化Azure站点Java运行环境(5)
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)的更多相关文章
- 定制化Azure站点Java运行环境(1)
Azure website提供了为现代化的web应用程序快速部署的PAAS平台,可以让用户几分钟之内快速的将自己的应用部署到云端,并且提供了自动扩展(auto-scaling),SSL,多种语言(Ja ...
- 定制化Azure站点Java运行环境(4)
定制化使用您自己的Tomcat版本和JDK环境 在上面章节中,介绍了如何通过web.config,定制默认的Azure website的Java运行环境,默认情况下,Azure站点的Tomcat是7. ...
- 定制化Azure站点Java运行环境(3)
定制化Azure Website提供的默认的Tomcat和JDK环境 在我们之前的测试中,如果你访问你的WEB站点URL时不加任何上下文,实际上你看到的web界面是系统自带的测试页面index.jsp ...
- 定制化Azure站点Java运行环境(2)
Azure Website上发布Java web应用 在Azure站点上发布Java Web应用非常简单,可以使用git从源代码发布,也可以使用FTP/FTPs直接发布,本节介绍FTP方式. 准备好你 ...
- Java 运行环境的安装、配置与运行
(一)SDK 的下载与安装 1. 下载SDK 为了建立基于SDK 的Java 运行环境,需要先下载Sun 的免费SDK 软件包.SDK 包含了一整套开发工具,其中包含对编程最有用的是Java 编译器. ...
- Windows7系统下JAVA运行环境下载、安装和设置(第二次更新:2012年03月14日)
1.下载 地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html,(由于Sun于2009年被oracle收购所以网址 ...
- Windows7下的Java运行环境搭建过程图解
第一步:下载JDK 地址:http://www.oracle.com/technetwork/java/javase/downloads/index-jsp-138363.html,(由于Sun于20 ...
- Java运行环境的配置(JDK和JRE)
Jdk 表示java开发环境,包含开发环境和运行环境 Jre 表示java运行环境 JDK就是Java Development Kit.简单的说JDK是面向开发人员使用的SDK,它提供了Java的开发 ...
- Editplus配置java运行环境
Editplus配置java运行环境 下载及安装: editplus官网下载地址:https://www.editplus.com/ 安装方法和安装普通exe应用程序一样,选在安装路径,下一步下一步, ...
随机推荐
- Python爬虫使用Selenium+PhantomJS抓取Ajax和动态HTML内容
1,引言 在Python网络爬虫内容提取器一文我们详细讲解了核心部件:可插拔的内容提取器类gsExtractor.本文记录了确定gsExtractor的技术路线过程中所做的编程实验.这是第二部分,第一 ...
- c++基础五个题(一)
一.深拷贝和浅拷贝? 浅拷贝是指源对象与拷贝对象共用一份实体,仅仅是引用的变量不同(仅仅是名称不同),对其中任何一个对象的改动都会影响另外一个对象,例如:一个人叫小王,后来改名小李,结果不管是小王死了 ...
- abiword Related Pages
Application Framework The 'af' directory contains all source code for the cross-platform application ...
- 在Cocos2d-X中新建Android项目
Windows下创建Cocos2d-X的Android项目并不复杂,关键是要改几个环境变量 一.进入Cocos2d-X主目录修改“create-android-project.bat” 大家都知道要点 ...
- Debain 7.2安装配置
一 下载安装Debian 7.2 安装debian CD1,在最后一步,使用网络安装基本界面. 二 修改源 cd /etc/apt mv sources.list sources.list.bak g ...
- ASP.NET用户自定义控件配置
一直以来开发中碰到要写自定义控件的时候总是习惯性的找度娘,而没有自己记住,结果今天就悲剧了,找了半天才找到,想想还是自己积累起来吧! 第一种配置方式: 配置写在webconfig文件中,位置如下: w ...
- zabbix 通过gateway 获取远程主机的JMX信息
DBHost=192.168.32.55 DBName= zabbix DBUser=zabbixuser DBPassword=zabbixpass StartTrappers=20 MaxHous ...
- 剑指offer-面试题16.反转链表
题目:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后的头结点 链表结点定义如下: struct ListNode { int m_nKey; ListNode* m_pNext; } 其实 ...
- mongodb导入导出备份恢复
mongodb数据库同样离不开必要的维护,如备份.恢复.导入.导出. 其实备份和恢复比导入和导出要方便些,而且一般不会出错,所以大部分时候使用备份和恢复操作就可以了 1. 备份Mongodb mong ...
- [转]Traceroute网络排障实用指南(1)
注:本文是同事的大作,虽是翻译的一篇英文PPT,但内容实在精彩,小小的Traceroute竟包含如此大的信息量,真是让人感慨!内容不涉及公司机密,所以一直想转到自己的Blog上来,自己需要时可以再翻阅 ...