我正在探索Scala语言.我经常听到的一个主张是Scala具有比Java 更强大的类型系统.通过这个我认为人们的意思是:
scalac拒绝某些错误的程序,它们javac会愉快地编译,只会导致运行时错误.我这么认为是对的吗?
但是,除了相互排斥之外,还有更多的同步.同步确保线程在同步块之前或期间的内存写入以可预测的方式显示给在同一监视器上同步的其他线程.在我们退出synchronized块之后,我们释放了监视器,它具有将缓存刷新到主内存的效果,因此该线程所做的写操作对其他线程是可见的.在我们进入同步块之前,我们获取监视器,它具有使本地处理器高速缓存无效的效果,以便从主存储器重新加载变量.然后,我们将能够看到前一版本中显示的所有写入.
我还记得在现代Sun VM上阅读,无竞争同步很便宜.这个说法我有点困惑.考虑以下代码:
class Foo {
int x = 1;
int y = 1;
..
synchronized (aLock) {
x = x + 1;
}
}
Run Code Online (Sandbox Code Playgroud)
对x的更新需要同步,但是锁的获取是否也从缓存中清除了y的值?我无法想象会出现这种情况,因为如果确实如此,锁定条带化等技术可能无济于事.或者,JVM可以可靠地分析代码以确保使用相同的锁在另一个同步块中不修改y,因此在进入同步块时不会在缓存中转储y的值吗?
我想在Windows上分发用Java编写的命令行应用程序.
我的应用程序作为zip文件分发,它有一个lib目录条目,其中包含调用我的主类所需的.jar文件.目前,对于Unix环境,我有一个shell脚本,它通过附加lib目录中的所有文件来调用带有CLASSPATH的java命令.
我怎么写具有类似功能的.BAT文件?什么是Windows世界中的find Unix命令的等价物?
从Sun JRE 性能调优白皮书中,-XX:+AggressiveOptsflag被描述为:
打开在即将发布的版本中默认打开的点性能优化.按此标志分组的更改是对JVM运行时编译代码的微小更改,而不是不同的性能功能(例如BiasedLocking和ParallelOldGC).这是尝试JVM工程团队即将发布的最新性能调整的好旗帜.注意:此选项是实验性的!此选项启用的特定优化可以在发行版之间进行更改,甚至可以构建到构建版本.在部署新版本的Java之前,您应该重新评估此选项的效果.
我的性能测试表明,使用-XX:+AggressiveOpts实际上有助于我的应用程序,但由于这被标记为实验我想要小心它(我过去曾被它烧过).所以,我想知道-XX:+AggressiveOpts1.6u20 上启用了哪些标志.通常我通过查看文件中的方法Arguments::set_aggressive_opts_flags()来做到这一点hotspot/src/share/vm/runtime/arguments.cpp,但我无法在http://download.java.net/jdk6/source/找到1.6u20的源代码.
-XX:+AggressiveOpts
启用?我有一个脚本可以构建我的应用程序,将其上传到远程计算机,在那里运行性能测试并捕获我关心的一些指标.该脚本为我在工作区中进行的本地修改创建一个补丁文件,并将其与性能编号一起显示.这有助于我比较各种调整选项的效果.如果我想在以后重新创建我的工作区,我可以使用SVN修订版号和补丁.
svn diff不报告我添加到工作区的新文件,除非我先明确使用svn add它们.有没有办法创建一个包含新文件的补丁文件?
PS:这里有一个类似的问题,但没有得到充分回答,IMO.
曾经有过一种方法可以做到这一点,但我不能再在Eclipse 3.4.1安装中找到它了.有谁知道如何做到这一点?
我想通过使用上下文类加载器将它们作为资源加载来读取一堆文本文件.
URL url = Thread.currentThread()
.getContextClassLoader()
.getResource("folder/foo.txt");
Run Code Online (Sandbox Code Playgroud)
有没有办法获得名称与给定模式匹配的资源列表?例如:
URL[] matchingUrls = someLibrary.getMatchingResources("folder/*.txt");
Run Code Online (Sandbox Code Playgroud)
像Spring这样的库可以扫描类路径以查找具有给定注释的类,所以我想知道是否有类似的东西加载一堆资源.
我有一个在Sun 1.6 32位VM/Solaris 10(x86)/ Nahelem 8核(每个核心2个线程)上运行的Java应用程序.
应用程序中的特定用例是响应某些外部消息.在我的性能测试环境中,当我准备并在接收外部输入的同一线程中发送响应时,我获得大约50美元的优势,而不是当我将消息传递给单独的线程来发送响应时.我使用的是ThreadPoolExecutor用SynchronousQueue做切换.
在你的经历中是什么 接受将任务调度到线程池并将其拾取执行之间的预期延迟?过去有什么想法可以改善这一点?
我有一个gradle构建脚本类似于:
apply plugin: 'war'
task genSources << {
// here I generate some java files
}
// making sure that source files are generated
// before compilation
compileJava.dependsOn(genSources)
Run Code Online (Sandbox Code Playgroud)
如何在genSources编译src/main/java过程中生成文件和文件compileJava?
我想在Mac OS X上分发一个wxHaskell应用程序.如何创建可以独立使用的Mac OS X应用程序而无需用户安装任何额外的库?
我注意到了为Mac OS X 制作捆绑包的cabal-macosx项目.app.当我构建示例wxHello应用程序时,应用程序包在我的机器上正常工作(添加extra-lib-dirs: /usr/lib到.cabal文件后).但是当我在另一台机器上试用它时,我得到了错误:Dyld Error Message: Library not loaded: /Users/binil/.cabal/lib/wxc-0.90.0.3/ghc-7.0.4/libwxc.dylib.
java ×5
jvm ×2
performance ×2
batch-file ×1
build ×1
classpath ×1
command-line ×1
concurrency ×1
diff ×1
eclipse ×1
ghc ×1
gradle ×1
groovy ×1
haskell ×1
ide ×1
macos ×1
patch ×1
scala ×1
solaris ×1
spring ×1
svn ×1
threadpool ×1
types ×1
windows ×1
wxhaskell ×1