草庐IT

java - 并发运行 100,000 个进程

我正在模拟一个银行系统,其中要运行100,000笔交易。每种类型的事务都实现了可运行的,并且我有各种类型的事务可以发生。transactions是一个Runnable数组。理想情况下,以下代码可以解决我的问题:for(Transactiontransaction:transactions){newThread(transaction).start();}但是,显然java.lang.OutOfMemoryError:unabletocreatenewnativethread在尝试启动100,000个线程时必然会发生。接下来我尝试实现一个ExecutorService来创建一个线程池来管

java - JVM 在 RHEL 5.2 的压力下崩溃

在4到24小时4小时到8天后,我在(当前最新的)tomcat6.0.24上运行Web应用程序时,(当前最新的)jdk1.6.0.18意外崩溃压力测试(30个线程以600万次/天的浏览量访问应用程序)。这是在RHEL5.2(Tikanga)上。崩溃报告位于http://pastebin.com/f639a6cf1崩溃的一致部分是:正在抛出一个SIGSEGV在libjvm.so上eden空间总是满的(100%)JVM使用以下选项运行:CATALINA_OPTS="-server-Xms512m-Xmx1024m-Djava.awt.headless=true"我还使用http://memt

java - 如何在 Java 中重现 EXCEPTION_STACK_OVERFLOW 错误

如何在Java中重现EXCEPTION_STACK_OVERFLOW错误。PS:我说的不是Java中优雅地关闭JVM的StackOverflowError错误。我说的是error.log中导致JVM崩溃的EXCEPTION_STACK_OVERFLOW。 最佳答案 到目前为止,我发现的大多数EXCEPTION_STACK_OVERFLOW错误都发生在JVM之外的native代码中。JVM内部的崩溃值得提交错误报告并将得到修复。还是您需要(未知的)漏洞利用?因此,最简单和最可靠的方法是编写一个本地库,其中包含一些导致JVM崩溃的代码,

java - JVM 热插拔

什么是JVM热插拔?许多定义表明此功能允许代码在调试期间动态更新。并且热插拔等一些限制仅限于更新方法体,并且尝试向类中添加方法和字段不会成功。谁能用代码解释一下。 最佳答案 这意味着您可以在调试session期间对代码进行某些更改,并使这些更改立即生效,而无需重新启动应用程序。在某些情况下,这是一个非常方便的功能。但是,您通常会限制哪些类型的代码更改可以热交换到正在运行的应用程序中。限制的确切性质取决于您的工具链。 关于java-JVM热插拔,我们在StackOverflow上找到一个类

java - "GC overhead limit exceeded"是失败的次要原因吗?

根据这个问题的动机:Errorjava.lang.OutOfMemoryError:GCoverheadlimitexceeded最近我和某人就这个错误进行了辩论。在我的理解中,这个错误本身不能被视为JVM失败的“首要”原因。我的意思是,广泛的垃圾收集本身并不是失败的原因。大量的垃圾收集总是由非常少的可用内存量引起的,这会导致频繁的GC调用(核心原因可能是内存泄漏)。如果我正确理解了对手的立场,他认为系统中产生了很多符合GC条件的小对象,导致它们被频繁回收,导致了这个错误。所以问题不是内存泄漏或低内存限制,而是GC调用频率本身。这里是我们有不同观点的地方。在我看来,您的流程产生多少符合

java - -XX :+StressLCM, -XX:+JVM 的 StressGCM 选项

在玩一些jcstress代码时,我注意到两个对我来说很新的参数:StressLCM和StressGCM。我要做的第一件事就是在源代码本身中搜索这些,虽然我已经找到了一些东西,但仍然不清楚它们实际上做了什么。我真的很希望能在源代码中看到一些注释,这会带来一些启示,但没有运气。我还找到了bugdescription添加了这些,但解释对我来说没有意义:RandomizeinstructionschedulinginLCM/GCM.如果可能的话,有人可以用通俗易懂的英语解释一下他们的工作吗? 最佳答案 LCM/GCM代表局部代码运动/全局代

java - 当内存占用超过一定阈值时强制进行全面垃圾回收

我有一个服务器应用程序,在极少数情况下,它可以分配大块内存。这不是内存泄漏,因为垃圾收集器可以通过执行完整的垃圾收集来收回这些block。普通垃圾回收释放的内存量太小:在这种情况下是不够的。垃圾收集器在它认为合适的时候执行这些完整的GC,即当应用程序的内存占用接近由-Xmx指定的分配最大值时。如果不是因为这些有问题的内存分配突然出现,并且由于jvm无法足够快地执行GC以释放所需的内存。如果我事先手动调用System.gc(),我可以避免这种情况。无论如何,我宁愿不必自己监视我的jvm的内存分配(或将内存管理插入我的应用程序的逻辑);如果有一种方法可以运行具有内存阈值的虚拟机,那将会很好

java - 如何以编程方式生成 .class 文件?

我想为Java的玩具语言编写一个编译器。我想生成可运行的.class文件。我想知道可用于执行此操作的最佳库或工具是什么?我知道我可以学习所有指令的二进制格式并构建我自己的常量池等,但这似乎是应该已经完成​​的工作:没有必要重新发明轮子,对吧?在线搜索我发现了两种不同的Java汇编语言,Jasmin和Jamaica,然而只有Jasmin看起来有些保养。是否有用于将字节码写入流的Java库?这是什么ApacheBCEL是吗?他们的工具是否是字节码生成的“标准”,就像Antlr用于解析一样?PS-玩具语言是Brainf***,我想要一些我可以有一个简单的“语法”的东西,这样我就可以专注于生成

java - 什么调用类初始化方法 <clinit> 以及何时调用?

我知道new、dup、invokespecial和astore字节码模式将调用初始化方法在类实例化期间。什么调用了特殊的方法,什么时候发生?我的猜测是在之前方法被调用。这是否记录在JVM规范或Java语言规范中? 最佳答案 JVM规范§2.9.SpecialMethods:Aclassorinterfacehasatmostoneclassorinterfaceinitializationmethodandisinitialized(§5.5)byinvokingthatmethod.Theinitializationmethodo

java - java.exe 程序是实际的 VM 吗?

这个问题在这里已经有了答案:TotallyConfusedwithjava.exe(3个答案)关闭8年前。JDK自带java.exe(forwindows)程序。您可以使用它从命令行启动程序。维基百科说它是“类加载器”和“类文件的解释器”。这是真正成熟的JVM吗?它是“更小、更轻量级”的JVM吗?还是别的?