草庐IT

【JVM类加载】类的加载,连接与初始化

类加载在java代码中,类型的加载,连接与初始化过程都是在程序运行期间完成的(类class文件信息在编译期间已经确定好)。提供了更大的灵活性,增加了更多的可能性。类加载器java虚拟机与程序的生命周期:在如下几种情况下,java虚拟机将结束生命周期:执行System.exit()方法程序正常执行结束程序在执行过程中遇到了异常或错误向上抛出异常抛到main入口程序终止由于操作系统出现错误而导致java虚拟机进程终止类的加载流程三部分加载:查找并加载类的二进制数据连接:验证:确保被加载的类的正确性(字节码是否符合JVM的规范)准备:为类的静态变量分配内存,并将其初始化值设置为默认值如publics

java - 为什么 JVM 不在 Windows x86 上发出预取指令

如标题所述,为什么OpenJDKJVM不在Windowsx86上发出预取指令?请参阅OpenJDKMercurial@http://hg.openjdk.java.net/jdk8u/jdk8u/hotspot/file/c49dcaf78a65/src/os_cpu/windows_x86/vm/prefetch_windows_x86.inline.hppinlinevoidPrefetch::read(void*loc,intxinterval){}inlinevoidPrefetch::write(void*loc,intxinterval){}没有评论,除​​了源代码之外我没

java - 为高响应服务器应用程序调整 JVM (GC)

我在Linux64位上运行一个应用服务器,它有8个核心CPU和6GB内存。服务器必须高度响应。经过一些检查,我发现服务器上运行的应用程序创建了相当大量的短生命对象,只有大约200~400MB的长生命对象(只要没有内存泄漏)看完http://java.sun.com/javase/technologies/hotspot/gc/gc_tuning_6.html我使用这些JVM选项-server-Xms2g-Xmx2g-XX:MaxPermSize=256m-XX:NewRatio=1-XX:+UseConcMarkSweepGC结果:minorGC耗时0.01~0.02秒,majorGC

java - 在同一个 JVM 上设置多个信任库

我有一个在weblogic服务器上运行的Java应用程序。该应用程序有两个不同的模块,它们使用SSL连接到外部Web服务-比如说模块A和模块B。模块A-基于Axis构建-使用信任库AMoudleB-基于Spring-ws构建-使用信任库B。模块A已存在。正在引入模块B。我需要能够根据正在调用的模块在JVM中动态设置信任库。由于某些限制,我没有选择权-创建自定义key管理器。-使用一个信任库我尝试使用System.setPropertyim模块B代码库来设置信任库。但是,它仅在首先调用模块B时才有效。例如-说我重新启动了JVM然后我调用模块A-它在JVM中设置了它自己的信任库然后我调用模

java - 从命令行在 Maven 中设置 cucumber-jvm 选项

我正在尝试为Cucumber设置“名称”选项,以便能够运行特定功能或场景。我已经输入了这个,mvntest-DCucumber.Options--name="MyFeatureName"但它只是运行了所有功能并且没有给出错误。有什么想法吗? 最佳答案 这是一个snippet来自Cucumber-JVM存储库,了解如何通过传递cucumber选项来运行java-helloworld示例:mvntest-Dcucumber.options="--formatjson-pretty--glueclasspath:cucumber/exam

java - 是什么导致 JVM 进行主要的垃圾收集?

我有一个Java应用程序,它在不同的环境中显示不同的GC行为。在一个环境中,堆使用图是一个缓慢的锯齿形,每10小时左右就会有一次主要GC,只有当堆超过90%满时才会发生。在另一个环境中,JVM每小时按时执行主要GC(此时堆通常在10%到30%之间)。我的问题是,导致JVM决定执行主要GC的因素是什么?很明显,它会在堆快满时进行收集,但还有其他原因在起作用,我猜这与我的应用程序中的每小时计划任务有关(尽管此时内存使用量没有峰值)。我认为GC行为在很大程度上取决于JVM;我正在使用:JavaHotSpot(TM)64位服务器VM1.7.0_21OracleCorporation没有特定的G

java - 反射性能 : quality byte code in JVM

编辑2:具有完全面向对象实现的程序是否具有高性能?大多数framework都是用它的全部功能编写的。但是,反射也被大量用于实现它,例如AOP和依赖注入(inject)。反射的使用在一定程度上影响了性能。那么,使用反射是一种好的做法吗?除了编程语言构造的反射之外,还有其他选择吗?应在多大程度上使用反射? 最佳答案 反射,就其本身和本质而言,是缓慢的。参见thisquestion更多细节。这是由几个原因造成的。JonSkeetexplainsitnicely:Checkthatthere'saparameterlessconstruct

java - 在同一 JVM 中检测到多个 SparkContext

根据我的lastquestion我必须为我独特的JVM定义MultipleSparkContext。我用下一种方式(使用Java)做到了:SparkConfconf=newSparkConf();conf.setAppName("SparkMultipleContestTest");conf.set("spark.driver.allowMultipleContexts","true");conf.setMaster("local");之后我创建下一个源代码:SparkContextsc=newSparkContext(conf);SQLContextsqlContext=neworg

JVM安全退出(如何优雅的关闭java服务)

上线!重启!你还在为丢失任务而烦恼么?看这里看这里,从此不再丢任务,JVM可以安全退出的在交易流程中,为了提升服务的性能,我们做了一些异步化的优化,比如更新用户最近使用的收货地址、提单完成后通过MQ去发送各种通知类消息、清理用户的购物车等等这些操作,异步化加快了应用的响应速度同时也带来一个隐患,如何保障异步操作的执行?这个场景主要发生在应用重启时,对于通过线程或线程池进行的异步化,JVM重启时,后台执行的异步操作可能尚未完成。这时,需要通过JVM安全关闭来保证异步操作进行完成后,JVM再执行关闭。更广泛的说,在Linux上很多应用通常会通过kill-9pid的方式强制将进程杀掉,这种方式简单高

java - JVM如何处理不同版本的重复JAR

当存在不同版本的重复JAR时,行为非常不一致。有谁知道JVM是如何处理重复项的? 最佳答案 类加载器按顺序搜索类路径,并使用它找到的第一个匹配类。 关于java-JVM如何处理不同版本的重复JAR,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/1669305/