`

jdk1.8下模拟永久代内存溢出

    博客分类:
  • jvm
 
阅读更多

转自:https://blog.csdn.net/qq_26093341/article/details/80791899

 

相信不少小伙伴在看深入理解Java虚拟机的时候,作者给我们举例一个demo来发生PermGen space

1、通过List不断添加String.intern();

2、通过设置对应的-XX:PermSize与-XX:MaxPermSize(更快看到效果),

3、在jdk1.6的环境下会抛出OOM:PermGen space异常

public static void main(String[] args) {
    List<String> str=new ArrayList<>();
    int i=0;
    while (true){
        str.add(String.valueOf(i).intern());
    }

}

然而在jdk1.8的环境下,这段代码,会出现OOM,但不是出现PermGenSpace,而是会当堆内存不够用(-Xmx)的时候,抛出Java heap space,而且会温馨提示

ignoring option PermSize=10M; support was removed in 8.0

ignoring option MaxPermSize=10M; support was removed in 8.0

---------------------------------------------------------------------------------------------------------

首先我们看一下String.intern()方法,官方的注释是

Returns a canonical representation for the string object. A pool of strings, initially empty, is maintained privately by the class String. When the intern method is invoked, if the pool already contains a string equal to this String object as determined by the equals(Object) method, then the string from the pool is returned. Otherwise, this String object is added to the pool and a reference to this String object is returned. It follows that for any two strings s and t, s.intern() == t.intern() is true if and only if s.equals(t) is true. All literal strings and string-valued constant expressions are interned. String literals are defined in section 3.10.5 of the The Java? Language Specification.

大概意思就是,如果常量池已经存在这个string对象,那么就返回这个字符串的引用。否则将此string对象加入常量池,再返回引用

~

但是在jdk1.8中,其实已经没有永久代这一说了,取而代之的是一个叫元空间(Meta space)。而常量池放到了堆中,所以也就不会出现PermGen space了

---------------------------------------------------------------------------------------------------------

那么如果想看到metaspace的异常怎么做呢?

一个是可以把这两个值设置的足够小,那么启动就会报错了。

-XX:MetaspaceSize=3M -XX:MaxMetaspaceSize=3M

一个是可以使用jdk动态加载技术,例如cglib动态的生成大量的数据来达到

分享到:
评论

相关推荐

    mac系统jdk1.8安装包!mac系统jdk1.8安装包!mac系统jdk1.8安装包!mac系统jdk1.8安装包!mac系

    mac系统jdk1.8安装包!mac系统jdk1.8安装包!mac系统jdk1.8安装包!mac系统jdk1.8安装包!mac系统jdk1.8安装包!mac系统jdk1.8安装包!mac系统jdk1.8安装包!mac系统jdk1.8安装包!mac系统jdk1.8安装包!mac系统jdk...

    JDK1.8中文文档 JDK1.8中文 jkd8中文文档 JDK中文版

    JDK1.8,也被称为Java Development Kit 1.8,是Oracle公司发布的一个重要的Java开发工具集,它包含了许多用于构建和运行Java应用程序所需的组件和服务。这个版本的JDK引入了一系列创新特性,极大地提升了Java语言的...

    JDK1.8压缩包下载解压即用

    提供两种资源方式:(JDK1.8压缩包64位Windows版本)上面JDK1.8压缩包直接下载(解压一下就可以用),想自己下载的下方官网网址自行查找 官网下载地址:https://www.oracle.com/java/technologies/downloads/ JDK...

    JDK1.8 官网版本jdk1.8

    JDK1.8,全称Java Development Kit 1.8,是Oracle公司发布的一个重要的Java开发工具包,其版本号为1.8.0_25。这个版本在Java发展历程中占据着举足轻重的地位,因为它引入了许多创新特性,极大地提升了Java开发者的...

    jdk1.8 JDK1.8 中文 CHM

    **JDK 1.8 API 中文 CHM** 是Java开发者的重要参考资料,它包含了Java开发工具包(JDK)1.8版本的所有公共类、接口和框架的详细文档。这个CHM(Compiled HTML Help)文件是Windows平台上的帮助文档格式,用户可以...

    dubbo admin jdk1.8

    这个压缩包的使用不仅简化了部署过程,还确保了在JDK1.8下的兼容性和稳定性,这对于依赖Dubbo且希望利用管理工具优化服务运行的开发者来说非常有价值。同时,了解如何正确配置和使用Dubbo Admin,有助于提升微服务的...

    jdk 1.8 Mac dmg

    - **兼容性**:虽然JDK 1.8在大多数情况下与之前的版本兼容,但在某些特定场景下(如使用了默认方法的接口实现),可能会出现不兼容的情况。 - **资源管理**:随着JDK 1.8引入的新特性和API,开发者应关注如何有效地...

    JDK1.8版本免安装解压缩版

    **JDK 1.8免安装解压缩版详解** JDK(Java Development Kit)是Java编程语言的软件开发工具包,它为Java开发者提供了编译、调试和运行Java应用程序所需的所有工具。JDK 1.8是Oracle公司发布的一个重要版本,其中...

    jdk1.8压缩包下载

    JDK 1.8是Java历史上的一个重要版本,它引入了许多新特性,增强了性能,并且对开发者提供了更多的便利。下面将详细讨论JDK 1.8中的关键知识点。 1. **Lambda表达式**:这是JDK 1.8最重要的更新之一,它简化了处理...

    JDK1.8 windows zip解压缩版

    JDK1.8 Windows Zip解压缩版是一款专为Windows操作系统设计的Java Development Kit(Java开发工具包)的非安装版本,它以ZIP压缩格式提供,方便用户下载后直接解压使用,无需经过传统的安装过程。这个版本特别适合...

    Mac OS jdk1.8安装包

    **Mac OS上的JDK 1.8安装指南** 在Mac OS操作系统上安装Java Development Kit (JDK) 1.8是开发Java应用程序的基础步骤。JDK不仅提供了Java编译器,还包含了运行Java程序所需的Java Runtime Environment (JRE)。本...

    jdk1.8版本免安装

    在这个"jdk1.8版本免安装"的压缩包中,我们可以找到JDK 1.8.0_181的具体内容,这是一个更新版本,包含了修复的漏洞和性能改进。 首先,JDK 1.8最重要的特性之一是Lambda表达式,它简化了函数式编程,使得处理集合...

    jdk1.8免安装版

    Java JDK 1.8免安装版是一款为开发者和用户提供了便捷的Java开发环境的软件包。这个版本的特点在于,它不需要传统的安装过程,也不需要手动配置环境变量,从而简化了Java开发环境的搭建,尤其适合那些希望快速启动...

    dubbo-admin在jdk1.8环境下运行

    dubbo-admin在jdk1.8环境下运行,dubbo-admin在jdk1.8环境下运行dubbo-admin在jdk1.8环境下运行dubbo-admin在jdk1.8环境下运行dubbo-admin在jdk1.8环境下运行dubbo-admin在jdk1.8环境下运行dubbo-admin在jdk1.8环境下...

    spring对应jdk1.8的jar包

    2. **配置源兼容性**:在IDE中,可以设置项目源代码兼容性为JDK 1.7,这样可以在JDK 1.8环境下编译和运行,但不会使用1.8的新特性。 3. **调整代码**:如果无法升级Spring版本,可能需要手动修改代码以适应JDK 1.8...

    linux jdk1.8

    linux jdk1.8linux jdk1.8linux jdk1.8linux jdk1.8linux jdk1.8linux jdk1.8linux jdk1.8linux jdk1.8linux jdk1.8linux jdk1.8linux jdk1.8linux jdk1.8linux jdk1.8linux jdk1.8linux jdk1.8linux jdk1.8linux ...

    Linux JDK1.8安装包

    本文将详细介绍在Linux环境下安装JDK1.8的过程。 首先,我们需要了解JDK1.8的重要性。它是Oracle公司发布的Java 8版本,包含了重要的新特性,如Lambda表达式、函数式接口、方法引用和新的日期时间API。这些特性极大...

    JDK安装包(jdk1.8.zip)

    jdk1.8安装包

    JDK 1.8中文API文档

    **JDK 1.8中文API文档** JDK(Java Development Kit)是Oracle公司发布的用于开发Java应用程序的软件包,其中包含Java运行时环境、Java编译器以及一系列的工具和类库。JDK 1.8是Java发展历程中的一个重要版本,引入...

    jdk1.8 64位

    jdk1.8 64位下载jdk1.8 64位下载jdk1.8 64位下载jdk1.8 64位下载jdk1.8 64位下载jdk1.8 64位下载jdk1.8 64位下载jdk1.8 64位下载jdk1.8 64位下载jdk1.8 64位下载jdk1.8 64位下载jdk1.8 64位下载jdk1.8 64位下载jdk...

Global site tag (gtag.js) - Google Analytics