草庐IT

JVM的垃圾收集算法

三种垃圾回收算法标记清除标记整理标记复制标记清除概念最早出现也是最基础的垃圾收集算法是“标记-清除”(Mark-Sweep)算法,如它的名字一样,算法分为“标记”和“清除”两个阶段:首先标记出所有需要回收的对象,在标记完成后,统一回收掉所有被标记的对象,也可以反过来,标记存活的对象,统一回收所有未被标记的对象。缺点①执行效率不稳定如果Java堆中包含大量对象,而且其中大部分是需要被回收的,这时必须进行大量标记和清除的动作,导致标记和清除两个过程的执行效率都随对象数量增长而降低②内存空间的碎片化问题标记、清除之后会产生大量不连续的内存碎片,空间碎片太多可能会导致当以后在程序运行过程中需要分配较大

java - 分析 Sun 热点的 GC 日志,JVM 6

我正在尝试分析我们应用程序的GC行为(在Tomcat中运行,在Sun'sHotspots、JVM1.6下)。到目前为止,我已经指示JVM使用...将GC日志发送到单独的文件-Xloggc:gc.log-XX:+PrintGCApplicationStoppedTime-XX:+PrintGCApplicationConcurrentTime-XX:+PrintGC-XX:+PrintGCTimeStamps-XX:+PrintGCDetails...并使用jstat使用...输出日志jstat-gc-t290455s>jstat.gc我看到了有趣的信息,但还没有找到可以帮助我分析/可视

java - JVM 的隐式内存屏障在链接构造函数时如何表现?

引用我的earlierquestiononincompletelyconstructedobjects,我有第二个问题。正如JonSkeet指出的那样,在构造函数的末尾有一个隐式内存屏障,它确保final字段对所有线程都是可见的。但是,如果构造函数调用另一个构造函数怎么办?他们每个人的末尾都有这样的内存障碍,还是仅在首先被调用的那个的末尾有这样的内存障碍?也就是说,当“错误”的解决方案是:publicclassThisEscape{publicThisEscape(EventSourcesource){source.registerListener(newEventListener()

java - 没有任何构造函数的 JVM 字节码类是否有效?

据我所知,在Java中,隐式构造函数总是为没有构造函数的类生成[1],[2].但是在字节码中我找不到关于JVMS的限制。.所以:根据JVMS定义一个没有构造函数的类,仅使用其静态方法是否有效,如以下jasminhelloworld所示?除了无法创建它的实例之外,它还有其他后果吗?我将无法使用invokespecial来初始化实例,根据https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html#jvms-4.10.2.4这使得new无用(不能使用未初始化的对象)。Jasmine代码:.classpublicMain.sup

java - Java Applets 的 future 是什么样的?

过去,由于Microsoft/SunJVMsplit,Java小程序不可靠。Flash取而代之,而Javaapplet因浏览器崩溃和性能问题而闻名。现在JVM作为Clojure和Scala等动态语言的平台正在复苏,浏览器内小程序的JVM当前和future前景如何?浏览器供应商是否继续解决稳定性和性能问题?Java的市场渗透率如何?鉴于JVM的复兴,小程序是否也会看到任何形式的复兴作为Flash的替代品,或者尽管JVM取得了成功,它们是否会完全过时?(是的,HTML5是很多很多事情的前进方向。它将继续在浏览器中最合适的地方取代Flash和Java。这不是这个问题的主题。)

java - 改造 void 方法以返回其参数以促进流畅性 : breaking change?

"APIdesignislikesex:makeonemistakeandsupportitfortherestofyourlife"(JoshBlochontwitter)Java库中有很多设计错误。StackextendsVector(discussion),我们无法在不造成损坏的情况下修复它。我们可以尝试弃用Integer.getInteger(discussion),但它可能会永远存在。不过,某些类型的改造可以在不造成破损的情况下完成。EffectiveJava2ndEdition,Item18:Preferinterfacestoabstractclasses:Existin

java - 如何在 OSX 上配置 rJava 以选择正确的 JVM——.jinit() 失败

我通过调用install.packages("rJava")安装了rJava——没有发现任何问题但是当我打电话时:library(rJava).jinit()我得到:JavaVM:requestedJavaversion((null))notavailable.UsingJavaat""instead.JavaVM:FailedtoloadJVM:/bundle/Libraries/libserver.dylibJavaVMFATAL:Failedtoloadthejvmlibrary.Errorin.jinit():JNI_GetCreatedJavaVMsreturned-1我正在

java.lang.OutOfMemoryError : Compressed class space 错误

我们在java-8-oracle上运行。我们六个月前搬到了java8。在过去的几天里,我们不时收到OOME,但我们无法识别或重现问题。当我们执行对服务器(tomcat)的调用时,我们在堆栈跟踪中收到此错误:java.lang.OutOfMemoryError:Compressedclassspace重启服务器即可解决问题。对其他服务器的相同调用有效,对同一服务器的另一种类型的另一个调用也有效。在查看gc.log时,我们看到:2015-05-27T16:05:42.991+0000:98774.440:[FullGC(Lastditchcollection)98774.440:[CMS:

java - OpenJDK 与 Java HotspotVM

OpenJDKVM和OracleHotspotVM还是两个不同的JVM吗?我似乎找不到任何关于OpenJDKVM的官方文档。甚至在OpenJDK主页上也有一个开发HotSpotVM的HotSpotGroup。TheHotSpotgroupiscomprisedofdevelopersinvolvedinthedesign,implementation,andmaintanenceoftheHotSpotvirtualmachine但是,如果我在我的Windows机器上检查java-version,它会打印出来JavaHotSpot(TM)64-BitServerVM但是在我的Ubunt

java - windows下如何重启JVM

如何在具有JRE的WindowsServer中重新启动整个JVM,而不重新启动操作系统?是否有类似的东西:java-restart或者这是不可能的。这个想法是我在JRE的/lib/ext文件夹中添加了tool.jar并且我需要重新启动JVM。 最佳答案 Java进程在您想要运行时按需运行。它不是守护进程。如果Java进程没有正常结束,您需要手动停止它(杀死它)。 关于java-windows下如何重启JVM,我们在StackOverflow上找到一个类似的问题: