草庐IT

java - 需要有关 Apple OS X 的替代 JVM 的指导

ApplehasdeprecatedtheirJVMfuture版本的OSX可能不支持它。我主要不是Java开发人员,但我偶尔会编写Java应用程序,我使用的主要应用程序使用Tomcat和Opal为命令行提供SOAP接口(interface)用C编写的可执行文件。我一直看到关于简单地使用另一个JVM的建议,但这似乎显得滑稽可笑。在这一点上,我认为在OSX上运行的OracleJVM纯粹是一种假设。这似乎是一个合理的解决方案,但鉴于苹果、甲骨文和谷歌似乎处于三方较量中,我担心它可能会延迟相当长的一段时间。我一直指向OpenJDK,但这似乎需要从源代码构建JVM。这对我个人来说很好,但对我的

java - 如何理解 Java 中的 "Happens-before consistency is not sufficient"

这个问题在这里已经有了答案:Howtounderstandhappens-beforeconsistent(5个答案)关闭4年前。在chapter17ofJavalanguagespecification,有一节解释了为什么“发生在一致性不够”之前。这是示例:Atfirst,x=y=0Thread1|Thread2r1=x;|r2=y;if(r1!=0)y=1;|if(r2!=0)x=1;这是一个可能的执行轨迹:r1=x;//seeswriteofx=1y=1;r2=y;//seeswriteofy=1x=1;怎么会这样?我感到困惑的是,当第一个Action看到x=1时,这是否意味着条

JVM:常用的四种垃圾回收机制

1.CMS(ConcurrentMarkSweep):并行标记清除老年代垃圾回收机制cms是一个基于标记-清除算法的综合多种算法的老年代垃圾回收器适用场景:重视服务器响应速度,要求系统停顿时间最短。这里要说明下,这是一个老年代算法,年轻代怎么处理?不回收了嘛?这里其实年轻代是采用的其它算法,具体看策略,Java参数可以选择策略。这里下文也会涉及到主要的pipeline如下1、初始标记(CMSinitialmark)“StopTheWorld”,仅仅只是标记一下GCRoots能直接关联到的对象,也就是根集合可直接到达的对象,但不会直接到叶子节点,还有遍历新生代对象,标记可达的老年代对象;速度很快

linux查看进程号、端口号

进程ID是由操作系统内核进行分配和管理的,而端口号是由通讯协议内核分配并进行管理的。Linux查看进程号、端口号Linux查看端口占用情况linux命令:ps、grep、kill1、已知程序名称查看进程号ps-ef|grep程序名称##或者ps-aux|grep程序名称pgrep-l程序名称??pgrep是通过程序的名字来查询进程ID的工具,一般是用来判断程序是否正在运行,返回信息非常简洁。用法:#ps参数选项程序名常用参数-l列出程序名和进程ID;-o进程起始的ID;-n进程终止的ID;2、端口号查看进程号(查看端口占用情况)??必须为root用户lsof-i:端口号##或者netstat-

java - 一个有用的指标,用于确定 JVM 何时将陷入内存/GC 故障

我有一个scala数据处理应用程序,95%的时间都可以处理内存中抛给它的数据。剩余的5%如果不加以检查,通常不会遇到OutOfMemoryError,但只会进入主要GC循环,使CPU激增,阻止后台线程执行,即使它完成了,也需要10倍-50倍只要它有足够的内存。我已经实现了可以将数据刷新到磁盘并将磁盘流视为内存中迭代器的系统。它通常比内存慢一个数量级,但足以满足这5%的情况。我目前正在触发一个最大集合上下文的启发式方法,该集合上下文跟踪数据处理中涉及的各种集合的大小。这可行,但实际上只是一个临时的经验阈值。我宁愿对JVM接近上述不良状态使用react并在那时刷新到磁盘。我试过观察内存,但

java - -XX :+UseNUMA affects JVM performance for systems with only one node?如何

有很多文章介绍了JVMNUMA感知分配器的好处。但是我找不到有关可能导致什么性能影响的信息-XX:+UseNUMA单节点拓扑的标志,如#numactl--hardwareavailable:1nodes(0)node0cpus:0123node0size:32060MBnode0free:7770MBnodedistances:node00:10这似乎是一种极端情况,启用标志并没有真正的利润。如果是这样,启用它是否会导致任何缺点? 最佳答案 -XX:+UseNUMA在这些情况下没有坏处。HotSpotJVM在单个节点上运行时自动关闭

java - JVM如何使用超过4GB的内存

我有一个安装Linux服务器(最好是Ubuntu64位服务器)的请求,和Java(64位)在以下机器上:IntelCore2QuadQ8200-2.33GHz8GBDDR2内存软RAID1镜像(镜像)中的2个320GBSATAHDD问题是如何配置系统和Java,因为我需要JVM使用超过4gb的内存。它不能分布在很多虚拟机上。有超过4GB大的数据它必须在内存中,因为HDD速度慢且性能至关重要。这是一个配置和性能问题,如果有人有经验,我对评论感兴趣?非常感谢你在这件事上帮助我...... 最佳答案 一个64位的JVM应该完全没有巨型堆的

Java JVM中的GC机制详解

1.GC概述垃圾回收(GarbageCollection,简称GC)机制是JVM中最重要的部分之一。在Java程序运行的过程中,运行时数据区域(包括堆和栈等内存区域)一直都需要使用和回收内存空间。由于Java中的内存分配方式是动态的,所以在程序运行期间,其内存空间的占用量会不断变化。如果Java程序没有进行垃圾回收,那么程序运行过程中使用的内存空间将不断累加,最后内存会被完全占用,导致程序崩溃。因此,为了保证程序正常运行,避免内存被耗尽和泄漏问题,JVM中设计了垃圾回收机制,用来定期清理无用的对象,并回收内存空间。在JVM中,GC操作是一个自动化过程,由JVM自动执行。JVM把一些没有被引用的

java - 为什么 JSR/RET 不推荐使用 Java 字节码?

有谁知道为什么JSR/RET字节码对在Java6中被弃用?我在网上找到的唯一有意义的解释是,它们使运行时的代码分析变得更难执行且更慢。有谁知道另一个原因吗? 最佳答案 JSR和RET使字节码验证比其他方式困难得多,因为一些正常字节码约束的放宽(例如在进入JSR时具有一致的堆栈形状)。好处非常小(在某些情况下方法可能略小),并且validator在处理奇怪的JSR/RET模式(以及潜在的安全漏洞,以及完整验证的相关运行时成本)方面的持续困难使其成为一个无用的功能继续拥有。由于数据而启用的堆栈映射和轻量级validator在类加载期间取

java - 为什么 JVM 不简单地终止而不是抛出 OOME?

如果捕获OutOfMemoryError是非常不鼓励的,因为捕获错误后您可能不知道JVM的状况,为什么JVM不简单地终止并以某种方式通知用户而不是抛出错误? 最佳答案 因为没有单一的标准方法可以向用户报告错误情况。抛出错误允许在顶层捕获对象,并在终止之前报告条件,但它可能是适当的(控制台消息、写入日志文件、显示对话框等)。文档指出,合理的应用程序不应捕获错误,这是事实:处理它们的最佳方式是在框架代码中,因为它们的处理方式几乎没有(尽管不是零)变化。具体来说,它们实际上无法从中恢复,这就是为什么大多数应用程序作者都试图捕获它们。更新: