网站运行java_定制化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和性能问题,例如:
因此上,在Java 8的设计中,Oracle和Java社区放弃了PermGen设置,从此之后不再有PermGen这样一个东西,但是元数据依然是需要保存的,所以在Java 8中,元数据移到了本地内存中,叫Metaspace的地方。
那么对于最终用户来讲有什么变化呢?你不会因为PermGen碰到OOM的问题,因为你所有的有效系统内存都可以做Metaspace了,所以你不需要单独设置metaspace,在一个64位系统的机器中,默认的Metaspace初始大小是21MB,那么最大呢?理论上如果你的元数据真的非常多,加载的类也很多,理论上最大可以用光你所有的有效系统内存。
那么有没有办法设置或者限制Metaspace的大小呢?可以,Java提供了两个参数来让你在必要的情况下设置Metaspace的大小:
–XX:MetaspaceSize:64微系统默认21MB,你可以设置大一些避免频繁的full GC
-XX:MaxMetaspaceSize:理论上大小没有限制,但你可以设置一个限制值
回到我们的Azure website的Java OPTS的设置上,在Java 8的环境里面PermSize已经无用了,所以web.config中设置可简化为:
网站运行java_定制化Azure站点Java运行环境(5)相关推荐
- 定制化Azure站点Java运行环境(1)
Azure website提供了为现代化的web应用程序快速部署的PAAS平台,可以让用户几分钟之内快速的将自己的应用部署到云端,并且提供了自动扩展(auto-scaling),SSL,多种语言(Ja ...
- 定制化Azure站点Java运行环境(2)
Azure Website上发布Java web应用 在Azure站点上发布Java Web应用非常简单,可以使用git从源代码发布,也可以使用FTP/FTPs直接发布,本节介绍FTP方式. 准备好你 ...
- arduino运行java_调试在Arduino MKR1000上运行的Arduino Uno代码
所以,我是Arduino的业余程序员,之前从未使用过Arduino MKR1000 . 我使用了Arduino Uno并使用Grove Ear夹心跳传感器和Grove温度传感器编写附加代码来检测心跳和 ...
- kind kubernetes 集群内如何通过 helm 部署定制化 Prometheus-Operator?
文章目录 1. Prometheus 简介 2. Prometheus 优势 3. Prometheus 架构图 4. Prometheus-Operator 简介 5. Prometheus-Ope ...
- OpenRasp Java运行时修改字节码技术
Java运行时修改字节码技术 Java运行时动态修改字节码技术,常用的有javassist asm来实现.不过最近在分析openrasp-java这块时,程序使用的javassist来动态插桩关键类, ...
- 02.Java开发环境搭建
Java为什么需要配置开发环境呢? 不是说Java一次编写处处运行吗?为什么还要配置Java环境? 答:Java程序是在JVM中运行的,那JRE是Java运行环境里面包含了Java运行核心类库和JVM ...
- Java开发环境的搭建与基础语法(温习知识点)
复习昨日内容 * Java语言概述* Java语言概述&发展史[了解]* Java的跨平台[了解]* JDK JRE JVM 有什么作用[理解] * Java开发环境的搭建 * JDK的下载与 ...
- 传统 Java 网站如何实现容器化?看看 Cars.com 如何玩转 Docker!
背景 Cars.com 是美国的汽车门户网站,为用户提供各种购车相关的信息和资讯,类似于国内的汽车之家. 他们之前的技术栈是比较传统的 Java Web 结构:Java 7, Websphere/W ...
- (视频) 《快速创建网站》 3.2 WordPress多站点及Azure在线代码编辑器 - 扔掉你的ftp工具吧,修改代码全部云端搞定...
本文是<快速创建网站>系列的第6篇,如果你还没有看过之前的内容,建议你点击以下目录中的章节先阅读其他内容再回到本文. 访问本系列目录,请点击:http://devopshub.cn/tag ...
最新文章
- 利用基于GPU的AI模拟一个现实宇宙 仅需36分钟
- 敏捷开发中Scrum方法
- STM32F103C8T6 CAN通信详解
- python view函数_Python爬虫实例(二)——爬取新馆疫情每日新增人数
- appium 移动端自动化测试工具(4)
- Java程序员从笨鸟到菜鸟之(九)——数据库有关知识补充(事务、视图、索引、存储过程)
- php js date 格式化,javascript date格式化示例_javascript技巧
- Python中类与对象的关系
- python import 错误 TypeError: 'module' object is not callable
- java输入年月输出日历_12月营销热点日历 | 2020年创意冲刺倒计时!
- 高中生住校好还是走读好?为什么?
- linux内核维护者,Linux 内核维护者封杀明尼苏达大学(转载) - 优秀的Free OS(Linux)版 - 北大未名BBS...
- setup.s (读核笔记系列)
- 什么是Meta分析异质性,怎么处理Meta分析异质性?看完这篇就够了
- C#中new一个对象的过程说明
- 《高等数学B(一)》笔记
- java fifo lifo_栈方法 LIFO - 队方法 FIFO
- 极光推送第一次进入APP无法获取RegistrationID
- 极路由 openwrt 使用 SyncY 实现百度云同步
- docker 中文乱码解决
热门文章
- 苹果手机6s运营商在哪里显示无服务器,iPhone6s信号很弱或无服务如何解决【解决方法】...
- 可能是全网首个前端源码共读活动,诚邀你加入一起学习
- oracle 11g 创建 job 20
- Linux下的用户和组
- windows update更新失败 安全模式进不去
- android:versionCode和android:versionName 用途
- Jar包转成Dll的方式(带嵌套的jar也能做) (转)
- View controller-based status bar
- Distributed transactions with multiple databases, Spring Boot, Spring Data JPA and Atomikos
- 三、SpringBoot-application.properties配置文件和application.yml配置文件