小编Ric*_*ich的帖子

解决PermGen问题的各种选择

我正在研究Java 6 18 VM上垃圾收集的各种选项,并希望得到一些指示.

我们在JBoss上运行我们的应用程序,偶尔在重新部署期间会出现臭名昭着的PermGen错误.互联网上有很多相互矛盾和过时的信息,说明解决或缓解这个问题的最佳方法.

我所看到的,以下是正确的:

  • VM选项本身无法解决此问题,只能推迟它.
  • 解决此问题的唯一可靠方法是修复Application Server本身(不太可能)或在Application Server中运行的代码(我们的代码或第三方库)(更有可能)中的编码错误.Permgen的填充通常是应用程序类加载器加载到Application Server类加载器加载的对象的引用的结果,从而防止应用程序的类加载器的垃圾收集.

我有两个问题:

  1. 以上是正确的吗?
  2. 哪里做VM选项CMSClassUnloadingEnabled,并CMSPermGenSweepingEnabled来到这个?从我可以看到CMSClassUnloadingEnabled取代或隐含启用CMSPermGenSweepingEnabled.他们中的任何一个都有助于解决上述问题吗?

java garbage-collection memory-leaks

10
推荐指数
1
解决办法
4292
查看次数

使用Guava和GWT

有人能告诉我在GWT中启用番石榴支持需要做些什么.

我已经下载了Guava R07,其中有以下两个文件:

  • 番石榴r07.jar
  • 番石榴-R07-gwt.jar

我有几个问题:

  1. 这些文件在哪里?我猜我的IDE可以使用标准Jar进行编码,并且两者都可供GWT编译器用于构建JavaScript吗?
  2. 我是否需要将-gwt.jar中的所有.gwt.xml文件添加到项目的主gwt.xml文件中,或仅添加我需要的部分?
  3. 在Guava和GWT项目的主干上有其他Jars(即不在下载中,例如jsr305的一个),我认为我可能需要它,但我不确定.

对不起,通常我没有这种事情的麻烦,但我不能完全解决在哪里.

仅供参考我暂时使用GWT 1.6,但我希望尽快转向2.如果Guava与1.6不兼容则不是问题.

更新

我在名为gwtlib的文件夹中有以下文件:

  • 番石榴-R07-gwt.jar
  • 番石榴r07.jar
  • jsr305-1.3.9.jar

我的Ant脚本执行以下操作:

<path id="project.class.path">
    <fileset dir="gwtlibs" includes="guava-r07.jar"/>
    <fileset dir="gwtlibs" includes="guava-r07-gwt.jar"/>
    <fileset dir="gwtlibs" includes="jsr305-1.3.9.jar"/>
    <pathelement location="${gwt.sdk}/gwt-user.jar"/>
    <fileset dir="${gwt.sdk}" includes="gwt-dev*.jar"/>
</path>

<target name="gwtc">
    <java failonerror="true" fork="true" classname="com.google.gwt.dev.Compiler">
        <classpath>
            <pathelement location="app"/>
            <path refid="project.class.path"/>
        </classpath>
        <jvmarg value="-Xmx256M"/>
        <arg value="-localWorkers"/>
        <arg value="2"/>
        <arg value="-war"/>
        <arg value="gwt-public"/>
        <arg value="Main"/>
    </java>
</target>
Run Code Online (Sandbox Code Playgroud)

运行上面的命令,我收到以下错误:

  • 'jar:file:///project/gwtlibs/guava-r07-gwt.jar!/com/google/common/collect/Constraints.java'中的错误
  • 第254行:方法subList(int,int)未定义类型List

如果没有类路径上的jsr jar,我会收到以下错误:

  • 无法解析导入javax.annotation
  • Nullable无法解析为某种类型

谢谢

丰富

gwt guava

10
推荐指数
2
解决办法
6588
查看次数

Hudson奴隶可以运行插件吗?

我们为Hudson提供了一个自定义插件,可以将构建的输出上传到远程计算机上.我们刚开始研究使用Hudson slave来提高构建的吞吐量,但是使用自定义插件的项目无法使用FileNotFoundExceptions进行部署.

从我们可以看到,即使构建发生在从属服务器上,插件也会在主服务器上运行.未找到的文件确实存在于从站上,但不存在于主站上.

问题:

  1. 插件可以在奴隶上运行吗?如果是这样,怎么样?有没有办法将插件识别为"可序列化"?如果Hudson奴隶无法运行插件,那么SVN结账会如何发生?
  2. 这里的一些开发人员认为解决这个问题的方法是让Hudson master的工作区成为一个网络驱动器,让奴隶使用相同的工作空间 - 这对我来说是不是很糟糕?

hudson hudson-plugins

10
推荐指数
1
解决办法
4358
查看次数

使用Java将PoisonPill发送给Actor

我开始通过迁移现有的Java SE应用程序来学习Akka.我正在使用Akka 2.0.3.

有一次,我需要通过消息队列发送PoisonPill来阻止演员.我的演员被实例化:

ActorRef myActor = actorSystem.actorOf(new Props(MyActor.class), "myActor");
Run Code Online (Sandbox Code Playgroud)

我尝试发送PoisonPill:

myActor.tell(PoisonPill.getInstance());
Run Code Online (Sandbox Code Playgroud)

但是我得到以下编译器错误:

'tell(java.lang.Object)' in 'akka.actor.ActorRef' cannot be applied to '(akka.actor.PoisonPill$)'
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?我在Idea中运行Java 1.6.0_26(我在Eclipse中一辈子都在学习).


编辑:

我也尝试过这种方法,它在文档中,但我得到了相同的编译器错误,并且Idea警告我不推荐使用Actors类.

import static akka.actor.Actors.*;
extractionActor.tell(poisonPill());
Run Code Online (Sandbox Code Playgroud)

java scala actor akka

9
推荐指数
2
解决办法
4897
查看次数

用于在堆转储中查询集合的工具

是否可以查询在堆转储中转储的集合?我显然可以使用Eclipse MAT之类的东西浏览该集合,但是真的很想能够在集合对象上实际调用getter.在ConcurrentHashMap尝试找到我需要的映射时,这显然比通过段更清晰.

我想我正在寻找的是某种方法来"重新水化"命名集合的转储状态,以便可以使用标准API对其进行操作.

有没有人知道任何这样的实用程序,或者,如果没有,有人可以提供一些示例代码或指示如何实现这一点?

java eclipse

8
推荐指数
1
解决办法
2437
查看次数

MongoDB仲裁服务器是否应包含在客户端连接配置中?

如果在Mongo中仅使用两个节点设置副本集,则需要添加仲裁器以确保对新主节点的投票总是占多数.仲裁者本身永远不会成为主人,只是在其他方面进行选举时提供投票.

将客户端(在我的Java中)连接到MongoDB集群时,我们应该在连接配置中指定集群的所有节点:

List addrs = new ArrayList();
addrs.add( new ServerAddress( "localhost" , 27017 ) );
addrs.add( new ServerAddress( "localhost" , 27018 ) );

Mongo mongo = new Mongo(addrs);
Run Code Online (Sandbox Code Playgroud)

仲裁器是否应包含在连接配置中?我猜不会像他们一样:

没有数据的副本,永远不会成为主要节点(甚至是可读的次要节点)

(摘自这里)

...但我只想仔细检查!

cluster-computing mongodb

8
推荐指数
1
解决办法
2474
查看次数

使用枚举实现实用程序类和单例

Peter Lawrey撰写了大多数人在他的博客上遗忘的两个Enums of Enums.

首先,我没有忘记 - 我甚至没有意识到:)

这些方法简洁明了 - 与更传统的实现相同方法的方法相比,除了简洁之外还有什么好处,比如使用final带有private实用程序类构造函数的类?

此外,是否有任何问题(除了令人困惑的程序员不期待它)?

java enums

8
推荐指数
2
解决办法
4915
查看次数

Hibernate Annotations - Case Insensitive UniqueConstraint

我有一个带有以下注释的实体:

@Entity
@Table(uniqueConstraints={@UniqueConstraint(columnNames={"name"})})
public class Component extends Model {
    ...
}
Run Code Online (Sandbox Code Playgroud)

是否可以使UniqueConstraint不区分大小写?我们正在使用PostgreSQL.

postgresql hibernate

7
推荐指数
2
解决办法
4428
查看次数

使用archetype:generate过滤Maven命令行中的原型

当尝试从原型(使用mvn archetype:generate)生成Maven项目时,该命令返回许多原型.

有没有办法过滤给出一个单词的原型(包含在groupId或artifactId中)?

我知道你实际上可以创建一个具有特定原型的项目,带有类似的参数-DgroupID=org.domain -DartifactId=sample,但它不是我想要的.

maven-plugin maven-3 maven-archetype

6
推荐指数
1
解决办法
7157
查看次数

Java垃圾收集器的行为是否会随着时间的推移而发生变化或受到JIT的影响?

我们在Intranet上运行了一个生产Web应用程序:

  • 每天在0300重新启动,以执行其数据库的备份
  • 在整个工作日(0800至1700)有相同的负荷
  • 正在Java HotSpot(TM)64位服务器VM版本20.45-b01上运行
  • 正在运行Linux 2.6.18-128.el5的16核和32 GB RAM的物理机器上运行
  • 不与任何其他重要过程共享机器
  • 配置有:

    -Xms2g
    -XX:PermSize=256m
    -Xmx4g
    -XX:MaxPermSize=256m
    -Xss192k
    -XX:+UseParNewGC
    -XX:+UseConcMarkSweepGC
    -XX:+CMSParallelRemarkEnabled
    -XX:CMSInitiatingOccupancyFraction=50
    -XX:+DisableExplicitGC
    
    Run Code Online (Sandbox Code Playgroud)

每天堆使用情况:

  • 从创业到0800逐渐上升到90%
  • 在0930之前保持在90%
  • 从0930到1415,保持在70%
  • 在1415跌至50%
  • 1445年跌至37%

此时堆在大约40分钟内上升到55%,并且无限制地回收到37%,直到下一次重新启动.

我们在JVM上安装了AppDynamics,可以看到主要垃圾收集大致每分钟发生一次,对内存没有太大影响(当然除了上面描述的下降),直到内存达到37%,而主要收集变得更少频繁.

Web应用程序的行为显然有数百个因素,但研究的一个途径是当JVM停止时Hotspot JIT信息明显丢失.

是否有关于JVM关闭的GC优化/等等?JVM是否实际上消耗了比它需要更多的内存,因为某些Hotspot优化还没有发生?

如果没有重新启动JVM并且我们找到了另一种执行数据库备份的方法,那么我们是否有可能从这个应用程序获得更好的内存性能?

(重申一下,我知道有十万件事可能影响应用程序的行为,尤其是一个几乎没有人知道的应用程序!我真的只想知道是否有某些与内存性能有关的事情.一个在停止时丢失的JVM)

java jit garbage-collection jvm

6
推荐指数
1
解决办法
169
查看次数