我正在尝试编译maven项目,但我系统地收到以下错误消息:
[ERROR]Failed to execute goal on project ...:
Could not resolve dependencies for project ...:war:1.0.0:
The following artifacts could not be resolved: javax.jms:jms:jar:1.1,
com.sun.jdmk:jmxtools:jar:1.2.1, com.sun.jmx:jmxri:jar:1.2.1:
Failure to find javax.jms:jms:jar:1.1 in http://mirrors.ibiblio.org/maven2/
was cached in the local repository, resolution will not be reattempted until
the update interval of maven2-repository.ibiblio.mirror has elapsed or
updates are forced -> [Help 1]
Run Code Online (Sandbox Code Playgroud)
我知道关于Sun罐子的这个maven帖子,但它没有解决问题.
有没有人有办法解决吗?我可以在我的pom.xml中指定一个存储库吗?
谢谢!
com.sun.jersey和之间有什么区别org.glassfish.jersey?
目前我有我的REST服务工作com.sun.jersey,我想编写测试,但我找不到一个很好的教程(似乎没有任何工作).但是,我可以找到关于org.glassfish.jersey测试的好文档.
在过去的一年里,我在应用程序的Java堆使用方面做了很大的改进 - 减少了66%.为此,我一直在通过SNMP监控各种指标,例如Java堆大小,cpu,Java非堆等.
最近,我一直在监视JVM有多少实内存(RSS,驻留集)并且有点惊讶.JVM消耗的实际内存似乎完全独立于我的应用程序堆大小,非堆,eden空间,线程数等.
堆栈大小由Java SNMP Java堆使用图表测量http://lanai.dietpizza.ch/images/jvm-heap-used.png
以KB为单位的实内存.(例如:1 MB KB = 1 GB) Java堆使用图http://lanai.dietpizza.ch/images/jvm-rss.png
(堆图中的三个凹陷对应于应用程序更新/重新启动.)
这对我来说是一个问题,因为JVM正在消耗的所有额外内存都是"窃取"内存,可供操作系统用于文件缓存.实际上,一旦RSS值达到~2.5-3GB,我开始看到响应时间变慢,应用程序的CPU利用率更高,主要是IO等待.正如某些点对交换分区的分页启动.这都是非常不受欢迎的.
所以,我的问题:
血腥的细节:
相关的JVM参数:
-Xms128m
-Xmx640m
-XX:+UseConcMarkSweepGC
-XX:+AlwaysActAsServerClassMachine
-XX:+CMSIncrementalMode
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
-XX:+PrintGCApplicationStoppedTime
-XX:+CMSLoopWarn
-XX:+HeapDumpOnOutOfMemoryError
Run Code Online (Sandbox Code Playgroud)
我如何衡量RSS:
ps x -o command,rss | grep java | grep latest | cut -b 17-
Run Code Online (Sandbox Code Playgroud)
这将进入一个文本文件,并定期读入我的监控系统的RRD数据库.请注意,ps输出Kilo Bytes.
虽然最终是ATorras的答案证明最终是正确的,但是kdgregory …
有越来越多的编程语言(Scala,Clojure,...)出现,它们是为Java VM制作的,因此与Java Byte-Code兼容.
我开始问自己:为什么选择Java VM?
是什么让它变得如此强大或受欢迎,以至于为它创造了新的编程语言,它们似乎也越来越受欢迎?
他们为什么不为新语言编写新的VM?
我开始研究找到sun.misc.Signal该类的替代方案,因为它可能在即将到来的JDK中不受支持(我们目前正在研究1.6).当我构建项目时,我得到:
警告:sun.misc.SignalHandler是Sun专有API,可能会在将来的版本中删除
我遇到了多种解决方案,但它们不适合我的项目,例如在这个问题中.
这在我的情况下是不可接受的,因为:
因此,理想的解决方案是找到像这个类的新Oracle版本或者以相同方式工作的东西.这样的解决方案是否存在?
如果使用Sun的专有Java类,编译器将显示警告.我认为使用这些类通常是一个坏主意.我在某处读到了这个.但是,除了警告之外,还有任何根本原因,你不应该使用它们吗?
最近我开始使用Eclipse的java编译器,因为它比标准的javac快得多.我被告知它更快,因为它执行增量编译.但我仍然有点不确定,因为我找不到任何关于eclispse和sun的编辑器"增量功能"的权威文档.是不是Sun的编译器总是编译每个源文件而Eclipse的编译器只编译已更改的文件和那些受此类更改影响的文件?
编辑:我没有使用Eclipse autobuild功能,而是我正在设置
-Dbuild.compiler=org.eclipse.jdt.core.JDTCompilerAdapter
Run Code Online (Sandbox Code Playgroud)
为我的蚂蚁构建.
我正在阅读Java平台性能(遗憾的是,因为我最初提出这个问题,链接似乎从互联网上消失了),A.3.3节让我很担心.
我一直在假设退出范围的变量不再被视为GC根,但本文似乎与此相矛盾.
最近的JVM,特别是Sun的1.6.0_07版本,仍然有这个限制吗?如果是这样,那么我有很多代码要分析......
我问这个问题是因为这篇论文是从1999年开始的 - 有时情况发生了变化,特别是在GC世界.
由于论文不再可用,我想解释一下这个问题.本文暗示,在方法退出之前,在方法内定义的变量将被视为GC根,而不是直到代码块结束.因此,必须将变量设置为null,以允许引用的Object被垃圾回收.
这意味着在main()方法中的条件块中定义的局部变量(或包含无限循环的类似方法)将导致一次性内存泄漏,除非在它退出范围之前将变量置为空.
所选答案的代码很好地说明了这个问题.在文档中引用的JVM版本中,当foo对象在try块结束时退出作用域时,不能对其进行垃圾回收.相反,JVM将保持打开引用直到main()方法结束,即使任何东西都不可能使用该引用.
这似乎是一个想法的起源,即使变量即将退出范围,将变量引用置零将有助于垃圾收集器输出.
可能重复:
我正在使用哪种JRE
我试图弄清楚我的HPC环境中的Java安装是运行Sun JVM,还是Oracle或OpenJDK.由于我没有管理员权限,而且我没有安装Java,有没有一种快速的方法可以确定我安装了哪个JVM?
standage@login4:~$ which java
/usr/bin/java
standage@login4:~$ java -version
java version "1.6.0_03"
Java(TM) SE Runtime Environment (build 1.6.0_03-b05)
Java HotSpot(TM) Server VM (build 1.6.0_03-b05, mixed mode)
standage@login4:~$ uname
Linux
Run Code Online (Sandbox Code Playgroud)