我知道堆的PermGen区域中String池的概念.所以,当我们做类似的事情
String firstString = "Stack";
String secondString = "Stack";
Run Code Online (Sandbox Code Playgroud)
两个引用firstString和secondString指向池中的同一个对象.但我尝试使用int类型的变量.
int firstInt = 5;
int secondInt = 5;
if(firstInt == secondInt) {
System.out.println("Both point to same allocated memory");
} else {
System.out.println("Both point to different allocated memory");
}
Run Code Online (Sandbox Code Playgroud)
结果是Both point to same object,当我尝试
Integer firstInteger = new Integer(2);
Integer secondInteger = new Integer(2);
if(firstInteger == secondInteger) {
System.out.println("Both point to same object");
} else {
System.out.println("Both point to different object");
}
Run Code Online (Sandbox Code Playgroud)
输出是 …
我在Solaris上部署了Jboss 6.1,它运行正常.然后我做了一些FTP和Telnet,直接root登录被禁用.之后我得到了PermGen空间错误.
这个错误可能是什么原因?请帮忙.
错误:
12:21:30,873 ERROR [AbstractKernelController] Error installing to PostClassLoader: name=vfs:///usr05/ccapp/app/jboss-6.1.0/server/srs/deploy/SRSEar.ear state=ClassLoader mode=Manual requiredState=PostClassLoader: org.jboss.deployers.spi.DeploymentException: Error during deploy: vfs:///usr05/ccapp/app/jboss-6.1.0/server/srs/deploy/SRSEar.ear
at org.jboss.deployers.spi.DeploymentException.rethrowAsDeploymentException(DeploymentException.java:49) [:2.2.2.GA]
at org.jboss.deployers.plugins.deployers.DeployerWrapper.deploy(DeployerWrapper.java:185) [:2.2.2.GA]
at org.jboss.deployers.plugins.deployers.DeployersImpl.doDeploy(DeployersImpl.java:1832) [:2.2.2.GA]
at org.jboss.deployers.plugins.deployers.DeployersImpl.doInstallParentFirst(DeployersImpl.java:1550) [:2.2.2.GA]
at org.jboss.deployers.plugins.deployers.DeployersImpl.install(DeployersImpl.java:1491) [:2.2.2.GA]
at org.jboss.dependency.plugins.AbstractControllerContext.install(AbstractControllerContext.java:379) [jboss-dependency.jar:2.2.0.SP2]
at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:2044) [jboss-dependency.jar:2.2.0.SP2]
at org.jboss.dependency.plugins.AbstractController.incrementState(AbstractController.java:1083) [jboss-dependency.jar:2.2.0.SP2]
at org.jboss.dependency.plugins.AbstractController.executeOrIncrementStateDirectly(AbstractController.java:1322) [jboss-dependency.jar:2.2.0.SP2]
at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:1246) [jboss-dependency.jar:2.2.0.SP2]
at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:1139) [jboss-dependency.jar:2.2.0.SP2]
at org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:939) [jboss-dependency.jar:2.2.0.SP2]
at org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:654) [jboss-dependency.jar:2.2.0.SP2]
at org.jboss.deployers.plugins.deployers.DeployersImpl.change(DeployersImpl.java:1983) [:2.2.2.GA]
at org.jboss.deployers.plugins.deployers.DeployersImpl.process(DeployersImpl.java:1076) [:2.2.2.GA]
at org.jboss.deployers.plugins.main.MainDeployerImpl.process(MainDeployerImpl.java:679) [:2.2.2.GA]
at org.jboss.system.server.profileservice.deployers.MainDeployerPlugin.process(MainDeployerPlugin.java:106) [:6.1.0.Final]
at org.jboss.profileservice.dependency.ProfileControllerContext$DelegateDeployer.process(ProfileControllerContext.java:143) [:0.2.2]
at org.jboss.profileservice.dependency.ProfileDeployAction.deploy(ProfileDeployAction.java:151) [:0.2.2]
at org.jboss.profileservice.dependency.ProfileDeployAction.installActionInternal(ProfileDeployAction.java:94) [:0.2.2] …Run Code Online (Sandbox Code Playgroud) 尝试了许多方法来增加permgen大小,但没有运气.
我在我的pom中使用以下配置
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.18.1</version>
<configuration>
<includes>
<argLine>-Xmx512m -XX:MaxPermSize=512m -XX:PermSize=216m</argLine>
</includes>
</configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)
在命令行中尝试"设置MAVEN_OPTS = -Xmx512m -XX:MaxPermSize = 128m",也没有运气.
我正在使用嵌入式Glassfish的Maven插件 - 这是我的插件声明:
<plugin>
<artifactId>maven-glassfish-plugin</artifactId>
<packaging>maven-plugin</packaging>
<version>1.0-alpha-4</version>
<configuration>
<httpPort>8080</httpPort>
</configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)
通过我的数据密集型Web应用程序几次点击后,我的PermGen空间用完了.
java.lang.OutOfMemoryError:PermGen空间
我已经配置了MAVEN_OPTS以使用更多内存:
set MAVEN_OPTS=-Xmx1024m
Run Code Online (Sandbox Code Playgroud)
但看起来产生的Java进程mvn glassfish:run在占用之前只能获得大约半GB的内存.
Glassfish插件是否具有任何用于增加其内存的配置设置?
谢谢!
这是我一直以来的一个老问题.我想在开发环境中重新部署.在一些部署之后,我用完permgen并且必须杀死服务器.多年前我试图找到问题的解决方案,但刚刚发现Spring和Hibernate互相指责问题.有没有找到解决方案?
Spring Roo声称它不会在运行时生成类,因此它不会成为问题.它真的有效,如果确实如此,我该如何配置我的应用程序呢?
我知道这里有两个问题,但如果你能回答一个问题就够了:)
为了确定在下一次重新调试之后jvm是否可能遇到permgen空间不足,我想先监测当前的permgen空间使用情况
就像是:
set myPermGenThreshold = 0.51 (51%)
currentlyUsedPermGenSize = (...ask the jvm here... say it's 0.6)
if (currentlyUsedPermGenSize > myPermGenThreshold ) {
(...restart tomcat...)
}
else {
(...redeploy application...)
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试在Windows Tomcat服务器上运行多个工具.服务器启动正常,我也可以看到Tomcat的管理器页面.但是当我打开一个工具时,会出现"OutOfMemoryError:PermGen space".我在catalina.bat中设置MaxPermSize尝试了很多,这是我的CATALINA_OPTS:
set CATALINA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8 -server -Xms64m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m -XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled"
Run Code Online (Sandbox Code Playgroud)
当我在我的Tomcat服务器旁边运行JVisualVM时,我可以看到参数被很好地拾取:

但是当我进入监视器选项卡并检查PermGen时,最大值是67mb而不是我设置CATALINA_OPTS的512.所以参数设置,但Tomcat忽略它们..

我已经尝试了几个小时解决这个问题,但没有成功..
任何人?
如何在Windows中为jvm添加PermGen空间?我发现很多关于它的链接?但我不明白我必须点击并写下新值
假设我编写了一个程序,它创建了很多String对象和intern()它们:
String someString = param1 + param2;
someString.intern();
Run Code Online (Sandbox Code Playgroud)
这对于一小组字符串来说很好,但是如果我尝试创建十亿个字符串String呢?(或者说亿亿亿?)据我所知,JVM 在PermGen区域为s 维护一个常量池,而PermGen没有得到GC -ed.String
因此,如果我String在循环中创建了过多的对象,但是我删除了对它们的引用,那么它们将得到GC -ed(我将用尽PermGen空间)吗?这些String都是独一无二的,没有任何重复.
我有一个Java 7项目,它每n分钟由n个进程运行一次脚本。这是运行脚本的代码示例。
ScheduledFuture scheduledFuture = scheduledService.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
try (GroovyClassLoader cl = new GroovyClassLoader()) {
// Load up reusable script modules in the class loader
Class scriptClass = cl.parseClass(scriptSource);
Foo script = optimizationClass.newInstance();
// Tell Groovy that we don't need class meta info
GroovySystem.getMetaClassRegistry().removeMetaClass(scriptClass);
script.run();
cl.clearCache();
} catch (IOException e) {
LOGGER.error("Failed to cleanup Groovy class loader, this will cause a memory leak", e);
}
}
}, 0, scheduledRun, TimeUnit.SECONDS);
scheduledFuture.get();
Run Code Online (Sandbox Code Playgroud)
由于某些原因,Groovy 2.1.7在Perm Gen中没有内存泄漏。当升级到Groovy 2.3.8或Groovy …