我使用32位Oracle Java 1.6.0在x86_64 CentOS 5.7上运行tomcat 5.5.
tomcat使用的JVM进程有6421 pid.Tomcat工作正常.
运行jstack时失败:
[root@mybox ~]# jstack 6421
6421: well-known file is not secure
Run Code Online (Sandbox Code Playgroud)
要获得任何合理的输出,我需要使用force选项:
[root@mybox ~]# jstack -F 6421
Attaching to process ID 6421, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 17.0-b16
Deadlock Detection:
No deadlocks found.
(...)
Run Code Online (Sandbox Code Playgroud)
该问题是:
jstack强制选项,该命令何时/何时不起作用?提前致谢.
在Scala中,我倾向于使用val赋值在许多较小的表达式上编写大型链式表达式.在我的公司,我们已经为这种类型的代码改进了一种风格.这是一个完全人为的例子(想法是显示一个包含大量链接调用的表达式):
import scala.util.Random
val table = (1 to 10) map { (Random.nextInt(100), _) } toMap
def foo: List[Int] =
(1 to 100)
.view
.map { _ + 3 }
.filter { _ > 10 }
.flatMap { table.get }
.take(3)
.toList
Run Code Online (Sandbox Code Playgroud)
Daniel Spiewak的Scala风格指南(pdf),我一般都喜欢,它表明链式方法调用中的前导点符号可能不好(参见doc:Method Invocation/Higher-Order Functions),尽管它不包括多行表达式直接这样.
是否有另一种更为接受/惯用的方式来编写上述函数foo?
更新:2011年6月28日
下面有很多很棒的答案和讨论.似乎没有100%"你必须这样做"答案,所以我将接受最受欢迎的答案,这是目前的理解方法.就个人而言,我认为我现在要坚持使用前导符号,并接受随之而来的风险.
在回答另一个问题时,我遇到了一些我没想到的Clojure的变量arity函数args:
user=> (defn wtf [& more] (println (type more)) :ok)
#'user/wtf
;; 1)
user=> (wtf 1 2 3 4)
clojure.lang.ArraySeq
:ok
;; 2)
user=> (let [x (wtf 1 2 3 4)] x)
clojure.lang.ArraySeq
:ok
;; 3)
user=> (def x (wtf 1 2 3 4))
clojure.lang.PersistentVector$ChunkedSeq
#'user/x
user=> x
:ok
Run Code Online (Sandbox Code Playgroud)
为什么ArraySeq1)和2)中的类型,但PersistentVector$ChunkedSeq在3)?
我正计划使用Scala的Redis实例进行一些工作,并且正在寻找有关使用哪个客户端库的建议.理想情况下,我想要一个专为Scala(而不是Java)设计的库,如果存在一个好的库,但如果现在这是更好的方法,那么使用Java客户端并不是世界末日.
在官方客户端列表显示斯卡拉- Redis的作为唯一的特定斯卡拉选项,但它是非常过时的,它有许多具有各种改进和提高叉...所以现在还不清楚哪些(如果有的话)是使用一个.
目前的短名单:
现在倾向于Jedis,因为它看起来非常活跃且备受好评,但很好奇其他人在使用Scala的Redis时所选择的.
我们目前在<a href>标签内的主页上的每个帖子上显示了我们的Disqus评论计数,我们看到这是由一些javascript更新的,它会检测链接上是否存在#disqus_thread.
我们如何在标签之外显示评论计数?
这可能吗?
我们对评论的直接链接不感兴趣,所以我们想要删除链接,只显示计数.
我担心这是一个非常愚蠢的问题,但这里有:
为什么Java的默认LinkedList实现中的clear方法无法遍历列表并取消挂钩所有节点?为什么不解开标题并将列表的其余部分保持连接 - GC无论如何都会得到它,不是吗?
这是方法:
/**
* Removes all of the elements from this list.
*/
public void clear() {
Entry<E> e = header.next;
while (e != header) {
Entry<E> next = e.next;
e.next = e.previous = null;
e.element = null;
e = next;
}
header.next = header.previous = header;
size = 0;
modCount++;
}
Run Code Online (Sandbox Code Playgroud)
为什么走吧?为什么不跳过header.next = header.previous = header;?
我能想到的最好的是它有助于GC ...?这个链接http://java.sun.com/docs/books/performance/1st_edition/html/JPAppGC.fm.html#997442有点暗示.
TIA ...
如何在Lift中创建错误处理程序?我有一些带有一些片段的html页面,如果其中一个片段引发异常我想抓住它并重定向到一些用户友好的错误页面.
如何以全能的方式做到这一点?我不想单独将错误处理放到每个代码段.我在Wicket 看起来像这样.
我有一些XML(即a scala.xml.Elem)的Scala表示,我想将它与一些标准的Java XML API(特别是SchemaFactory)一起使用.看起来将我转换Elem为a javax.xml.transform.Source是我需要做的,但我不确定.我可以看到各种方法来有效地写出我的Elem并将其读入与Java兼容的东西,但我想知道是否有更优雅(并且希望更有效)的方法?
Scala代码:
import java.io.StringReader
import javax.xml.transform.stream.StreamSource
import javax.xml.validation.{Schema, SchemaFactory}
import javax.xml.XMLConstants
val schemaXml = <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="foo"/>
</xsd:schema>
val schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
// not possible, but what I want:
// val schema = schemaFactory.newSchema(schemaXml)
// what I'm actually doing at present (ugly)
val schema = schemaFactory.newSchema(new StreamSource(new StringReader(schemaXml.toString)))
Run Code Online (Sandbox Code Playgroud) 我最近需要向我拥有的Scala应用程序添加一个关闭挂钩,并且我发现Scala为此提供了一个名为ShutdownHookThread的帮助器。在其源代码中,我注意到它将新线程设置为守护程序线程。
def apply(body: => Unit): ShutdownHookThread = {
val t = new ShutdownHookThread(hookName()) {
override def run() = body
}
t setDaemon true // <--------- right here
runtime addShutdownHook t
t
}
Run Code Online (Sandbox Code Playgroud)
为什么要这样做?在我看来,您可能想要关闭钩子线程中的相反内容(即,确保在关闭jvm之前退出该线程)。还是守护程序/非守护程序与关闭挂钩无关?
看起来像是在Scala 2.8.0中 - 如果你将Map实例映射到一个2元组的序列,那么你最终会得到一个Map.当发生这种情况时,任何具有相同第一个元素的2元组都被视为重复元素,并且您最终只能得到最后一个元素.这与2.7.7中发生的情况不同.通过示例更容易理解.
Scala 2.7.7:
scala> val m = Map("a" -> 1, "b" -> 2, "c" -> 3)
m: scala.collection.immutable.Map[java.lang.String,Int] = Map(a -> 1, b -> 2, c -> 3)
scala> m.map { case (k, v) => ("foo", v) }
res5: Iterable[(java.lang.String, Int)] = ArrayBuffer((foo,1), (foo,2), (foo,3))
Run Code Online (Sandbox Code Playgroud)
Scala 2.8.0:
scala> val m = Map("a" -> 1, "b" -> 2, "c" -> 3)
m: scala.collection.immutable.Map[java.lang.String,Int] = Map((a,1), (b,2), (c,3))
scala> m.map { case (k, v) => ("foo", v) }
res16: …Run Code Online (Sandbox Code Playgroud) 如果我有六个变量代表一般方程式中的两行(ax + by + c = 0).例如:
ax + by + c = 0
jx + ky + l = 0
Run Code Online (Sandbox Code Playgroud)
如何从六个变量中找到交叉点(x和y)[假设有一个]?
PS.任何关于非常简单的计算几何的信息的良好来源的推荐都是值得赞赏的.