小编MRa*_*ser的帖子

对集合进行线程安全迭代

我们都知道在使用时Collections.synchronizedXXX(例如synchronizedSet())我们获得了底层集合的同步"视图".

但是,这些包装器生成方法的文档指出,在使用迭代器迭代集合,我们必须在集合上显式同步.

您选择哪个选项来解决此问题?

我只能看到以下方法:

  1. 按照文档说明:对集合进行同步
  2. 在致电之前克隆集合 iterator()
  3. 使用迭代器是线程安全的集合(我只知道CopyOnWriteArrayList/ Set)

并且作为一个额外的问题:当使用同步视图时 - 使用foreach/Iterable线程安全吗?

java collections multithreading iterator thread-safety

19
推荐指数
2
解决办法
3万
查看次数

gcc:对_mcount的未定义引用(gprof instrumentation)

在使用-pg注入gprof配置文件检测代码的选项编译我的c ++源时,编译失败并显示undefined reference to _mcount错误.

没有这个选项,一切都可以编译(并运行).我的情况有什么问题?(Solaris 10 SPARC平台)

compiler-construction gcc profiling solaris gprof

16
推荐指数
1
解决办法
1万
查看次数

如何编写多线程单元测试?

我想知道是否有一些单元测试框架能够轻松编写多线程测试?

我想象的是:n次同时调用一个特殊的测试方法m次.在完成所有测试线程之后,将调用一个断言方法,其中应该验证一些约束.

我目前的方法是在junit测试方法中创建Thread对象,手动循环每个run()方法中的实际测试用例,等待所有线程然后验证断言.但是使用这个,我为每个测试都有一个大的样板代码块.

你有什么经历?

java junit multithreading unit-testing

15
推荐指数
1
解决办法
4786
查看次数

是否有适用于Java的控制台分析器?

是否有类似gprof的Java分析器可以从Linux终端运行?我找到的所有工具都是GUI程序,我需要从终端运行它.

java linux terminal console profiling

15
推荐指数
3
解决办法
9420
查看次数

在C++和Java之间传播Oracle事务

我们有一个现有的C++应用程序,我们将逐步用新的基于Java的系统取而代之.在我们完全重新实现Java中的所有内容之前,我们希望C++和Java必须相互通信(RMI,SOAP,消息传递等 - 我们还没有决定).

现在我的经理认为我们需要Java和C++方参与同一个Oracle DB事务.这与具有单个进程协调2个事务资源(例如DB和消息队列)的通常分布式事务问题有关,但不同.

我认为从性能和稳定性的角度来看,跨流程传播事务是一个糟糕的想法,但我仍然会被要求提供解决方案.

我熟悉XA事务,并且我已经完成了JBoss事务管理器的一些工作,但我的谷歌搜索在两个进程之间传播XA事务没有任何好处.

我们在Java端使用Spring,他们的文档明确声明它们不提供任何有关事务传播的帮助.

我们不打算使用传统的Java EE服务器(例如:IBM Websphere),它可能支持传播(不是我可以找到任何明确的文档).

非常感谢任何有关解决方案的帮助或指示.

c++ java oracle transactions jta

14
推荐指数
1
解决办法
1353
查看次数

新的BigInteger(String)性能/复杂性

我想知道使用构造函数构造BigInteger对象的性能/ 复杂性.new BigInteger(String)

请考虑以下方法:

  public static void testBigIntegerConstruction()
  {
    for (int exp = 1; exp < 10; exp++)
    {
      StringBuffer bigNumber = new StringBuffer((int) Math.pow(10.0, exp));
      for (int i = 0; i < Math.pow(10.0, exp - 1); i++)
      {
        bigNumber.append("1234567890");
      }

      String val = bigNumber.toString();
      long time = System.currentTimeMillis();
      BigInteger bigOne = new BigInteger(val);
      System.out.println("time for constructing a 10^" + exp
          + " digits BigInteger : " + ((System.currentTimeMillis() - time))
          + " ms");
    }
  } …
Run Code Online (Sandbox Code Playgroud)

java performance complexity-theory biginteger

11
推荐指数
1
解决办法
1815
查看次数

EGit:不能推,不能拉

我正在使用EGit,我提交了一个更改到我的本地git存储库.

我想把这个改变推到遥控器上.这样做时,弹出一个对话框屏幕,显示"被拒绝的主 - 非 - 快进".这个相关问题的答案表明我必须先拉.

执行pull时,会抛出一个EGit异常:

org.eclipse.jgit.api.errors.TransportException: Nothing to fetch.
    at org.eclipse.jgit.api.FetchCommand.call(FetchCommand.java:139)
    at org.eclipse.jgit.api.PullCommand.call(PullCommand.java:253)
    at org.eclipse.egit.core.op.PullOperation$1.run(PullOperation.java:97)
    at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2344)
    at org.eclipse.egit.core.op.PullOperation.execute(PullOperation.java:128)
    at org.eclipse.egit.ui.internal.pull.PullOperationUI.execute(PullOperationUI.java:139)
    at org.eclipse.egit.ui.internal.pull.PullOperationUI$1.runInWorkspace(PullOperationUI.java:114)
    at org.eclipse.core.internal.resources.InternalWorkspaceJob.run(InternalWorkspaceJob.java:38)
    at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
Caused by: org.eclipse.jgit.errors.TransportException: Nothing to fetch.
    at org.eclipse.jgit.transport.Transport.fetch(Transport.java:1087)
    at org.eclipse.jgit.api.FetchCommand.call(FetchCommand.java:130)
    ... 8 more
Run Code Online (Sandbox Code Playgroud)

好像我被卡住了.谁能帮助我?


UPDATE

.git/config我的存储库中的文件包含(远程URL hid):

[core]
  repositoryformatversion = 0
  filemode = true
  bare = false
  logallrefupdates = true
  ignorecase = true
[branch "master"]
  remote = origin
  merge = refs/heads/master
[remote "origin"]
    url = <URL_HIDDEN>
Run Code Online (Sandbox Code Playgroud)

我正在使用 Eclipse …

eclipse git egit

11
推荐指数
1
解决办法
1万
查看次数

如何修补eclipse插件?

我想在eclipse插件(WTP的官方插件)中修复一个错误.我在本地更改了源代码,调试了它 - 一切都很好.

现在我想将此更改传播到我的eclipse安装,但我遇到了问题.似乎有不止一种方法可以达到这个目的,例如:

这个站点推荐了片段,但是Eclipse FAQ忽略了这一点.

但我被困住了,似乎没有办法对我有用.

更新:

我按照建议尝试创建并安装功能补丁.安装完成后,将安装功能补丁,但不会安装包含补丁的插件.插件的先前/现有版本仍然存在且处于活动状态.

我想知道为什么会这样吗?这件事与签名官方插件有关吗?是否有日志可以查看未安装修补插件的原因?

最终更新:

问题是我修补了一个父功能(已经在eclipse安装细节中显示),而不是直接包含该插件的直接功能.在为修补指定正确/"最低级别"功能后,一切都按预期工作.

java eclipse eclipse-plugin

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

JMX:如何防止servlet容器中的Classloader内存泄漏?

我想知道是否或如何处理直接或间接从我的应用程序注册的MBean,该应用程序部署在servlet容器上.

在大多数情况下,有两个选项可用于检索MBeanServer可用于注册的选项

  • 创建自己的MBeanServer使用MBeanServerFactory.createMBeanServer()

  • 使用 ManagementFactory.getPlatformMBeanServer()

使用第一个选项时,可以轻松取消注册所有MBean:只需调用即可MBeanServer.releaseMBeanServer(myMBeanServer).

但是,在许多第三方应用程序中经常使用的第二个选项呢?(顺便说一句,这也是Sun/Oracle的推荐方式).

因为使用了平台MBeanServer,所以当servlet上下文被销毁时它不会被注销 - 但更糟糕的是它仍然保留了对web应用程序类加载器的引用.
因此,Web应用程序的所有静态引用都不会被释放,从而导致泄漏.

如果您想测试一下:只需部署一个简单的Web应用程序,该应用程序分配一个100MB阵列,该阵列是静态引用,并使用oracle jdbc驱动程序(它将使用平台mbean服务器注册诊断MBean),部署在tomcat上.停止应用程序并重新启动它 - 重复此操作,然后你就可以了OutOfMemoryError.

问题:

  • 我是否必须处理这些问题,或者是servlet容器和/或第三方库的问题?

  • 有没有办法获取MBeanServer特定类加载哪些类的所有MBean ClassLoader

  • 我该怎么做才能防止这种情况发生?我是否必须跟踪平台的所有已注册MBean并在MBeanServer此期间取消注册contextDestroyed()

java memory-leaks jmx servlets classloader

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

如何识别JNI全局引用内存泄漏的原因?

我正在使用Tomcat,在停止我的Web应用程序后,仍然会引用我的Web应用程序的类加载器实例.结果是不会释放大量的内存(主要与静态数据相关).迟早会导致这种情况发生OutOfMemoryError.

我拿了一个heap dump,我意识到它由JNI全局引用保存,它可以防止类加载器被垃圾收集.

我的应用程序不使用JNI.我也没有使用Apache Tomcat Native Library.我正在使用Sun/Oracle JDK.
我想跟踪这个全球参考的原因/来源.(我的猜测是JVM内部引用了类加载器 - 但为什么/在哪里?).

题:

  • 有哪些方法/工具集可以实现这一目标?

UPDATE

似乎bestsss是正确的,jnm调试模式引入了JNI全局引用.这帮助了我,但它没有回答这个问题所以我仍然很想回答可能对将来有帮助的问题.

java java-native-interface tomcat garbage-collection memory-leaks

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