转自: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系统jdk1.8安装包!mac系统jdk1.8安装包!mac系统jdk1.8安装包!mac系统jdk1.8安装包!mac系统jdk1.8安装包!mac系统jdk...
JDK1.8,也被称为Java Development Kit 1.8,是Oracle公司发布的一个重要的Java开发工具集,它包含了许多用于构建和运行Java应用程序所需的组件和服务。这个版本的JDK引入了一系列创新特性,极大地提升了Java语言的...
提供两种资源方式:(JDK1.8压缩包64位Windows版本)上面JDK1.8压缩包直接下载(解压一下就可以用),想自己下载的下方官网网址自行查找 官网下载地址:https://www.oracle.com/java/technologies/downloads/ JDK...
JDK1.8,全称Java Development Kit 1.8,是Oracle公司发布的一个重要的Java开发工具包,其版本号为1.8.0_25。这个版本在Java发展历程中占据着举足轻重的地位,因为它引入了许多创新特性,极大地提升了Java开发者的...
**JDK 1.8 API 中文 CHM** 是Java开发者的重要参考资料,它包含了Java开发工具包(JDK)1.8版本的所有公共类、接口和框架的详细文档。这个CHM(Compiled HTML Help)文件是Windows平台上的帮助文档格式,用户可以...
这个压缩包的使用不仅简化了部署过程,还确保了在JDK1.8下的兼容性和稳定性,这对于依赖Dubbo且希望利用管理工具优化服务运行的开发者来说非常有价值。同时,了解如何正确配置和使用Dubbo Admin,有助于提升微服务的...
- **兼容性**:虽然JDK 1.8在大多数情况下与之前的版本兼容,但在某些特定场景下(如使用了默认方法的接口实现),可能会出现不兼容的情况。 - **资源管理**:随着JDK 1.8引入的新特性和API,开发者应关注如何有效地...
**JDK 1.8免安装解压缩版详解** JDK(Java Development Kit)是Java编程语言的软件开发工具包,它为Java开发者提供了编译、调试和运行Java应用程序所需的所有工具。JDK 1.8是Oracle公司发布的一个重要版本,其中...
JDK 1.8是Java历史上的一个重要版本,它引入了许多新特性,增强了性能,并且对开发者提供了更多的便利。下面将详细讨论JDK 1.8中的关键知识点。 1. **Lambda表达式**:这是JDK 1.8最重要的更新之一,它简化了处理...
在这个"jdk1.8版本免安装"的压缩包中,我们可以找到JDK 1.8.0_181的具体内容,这是一个更新版本,包含了修复的漏洞和性能改进。 首先,JDK 1.8最重要的特性之一是Lambda表达式,它简化了函数式编程,使得处理集合...
JDK1.8 Windows Zip解压缩版是一款专为Windows操作系统设计的Java Development Kit(Java开发工具包)的非安装版本,它以ZIP压缩格式提供,方便用户下载后直接解压使用,无需经过传统的安装过程。这个版本特别适合...
**Mac OS上的JDK 1.8安装指南** 在Mac OS操作系统上安装Java Development Kit (JDK) 1.8是开发Java应用程序的基础步骤。JDK不仅提供了Java编译器,还包含了运行Java程序所需的Java Runtime Environment (JRE)。本...
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环境下...
2. **配置源兼容性**:在IDE中,可以设置项目源代码兼容性为JDK 1.7,这样可以在JDK 1.8环境下编译和运行,但不会使用1.8的新特性。 3. **调整代码**:如果无法升级Spring版本,可能需要手动修改代码以适应JDK 1.8...
总之,JDK1.8在Windows 64位环境下提供了稳定且功能丰富的Java开发环境。通过正确安装和配置,开发者可以充分利用其特性,编写出高性能、易维护的Java应用。无论是新手还是经验丰富的开发者,对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 ...
JDK1.8安装包,正式名称为Java Development Kit 8,是Oracle公司于2014年3月发布的一款重要的Java开发工具包。作为Java语言的核心组件,JDK1.8不仅包含了Java的运行环境(JRE),还提供了编译、调试以及运行Java应用...
本文将详细介绍在Linux环境下安装JDK1.8的过程。 首先,我们需要了解JDK1.8的重要性。它是Oracle公司发布的Java 8版本,包含了重要的新特性,如Lambda表达式、函数式接口、方法引用和新的日期时间API。这些特性极大...
这个“jdk1.8-windows”文件很可能是JDK 1.8的Windows平台安装包,适用于在Windows操作系统上开发和运行Java程序。 在Windows系统中安装JDK 1.8的步骤如下: 1. **下载**:首先,你需要从Oracle官方网站或者可信的...