Tag: jvm

理解java的本机线程和jvm

我知道jvm本身就是一个将java可执行文件的字节码转换为本机机器代码的应用程序,但是当使用本机线程时,我有一些我似乎无法回答的问题。 每个线程都创建自己的jvm实例来处理它们的特定执行吗? 如果没有那么jvm必须有一些方法来安排它接下来将处理哪个线程,如果这样,这不会使java的multithreading性质无用,因为一次只能运行一个线程?

如果JVM在执行GC时继续移动对象,它如何解析引用?

我正在阅读JVM调优,我发现JVM在执行GC时会不断移动对象。 但Java对象之间有相互引用,人们认为它们是作为指针实现的,但每次移动对象后JVM都不可能遍历整个堆,并更新所有引用; 肯定会永远。 那么它如何解析引用,如果引用没有改变,但对象的物理位置呢? 我已经阅读了很多关于JVM的内容,但在任何地方都没有解释,甚至暗示过。 [编辑]我的观点是,引用是单向的。 从指针指向指向是“瞬时”,但反过来需要完整的堆扫描。 虽然有可能,但似乎不太可能。 如果10K对象在次要集合中存活,那么执行完整堆扫描需要多长时间才能更新对这些对象的引用10K次? 必须使用某种优化的算法或结构。

JVM / JAVA中的预取指令

是否有Java语言或JVM中的任何软件预取指令,例如GCC中提供的__builtin_prefetch

什么时候Hotspot可以在堆栈上分配对象?

从Java 6的某个地方开始,Hotspot JVM可以进行转义分析,并在堆栈上而不是在垃圾收集堆上分配非转义对象。 这导致生成的代码加速并减少垃圾收集器的压力。 Hotspot何时能够堆叠分配对象的规则是什么? 换句话说,我什么时候可以依靠它来进行堆栈分配? 编辑 :这个问题是重复的,但是(IMO)下面的答案比原始问题提供的答案更好。

java.net.BindException:已在使用的地址:JVM_Bind

我有两个tomcats在我的服务器上运行 一个是Tomcat 7,另一个是tomcat 8,第一个配置文件server.xml是: … 在第二个tomcat有: … 但当我运行第一个tomcat时,控制台说 java.net.BindException: Address already in use: JVM_Bind at java.net.DualStackPlainSocketImpl.bind0(Native Method) at java.net.DualStackPlainSocketImpl.socketBind(Unknown Source) at java.net.AbstractPlainSocketImpl.bind(Unknown Source) at java.net.PlainSocketImpl.bind(Unknown Source) at java.net.ServerSocket.bind(Unknown Source) at java.net.ServerSocket.(Unknown Source) at org.apache.catalina.core.StandardServer.await(StandardServer.java:420) at org.apache.catalina.startup.Catalina.await(Catalina.java:713) at org.apache.catalina.startup.Catalina.start(Catalina.java:659) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:351) at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:485) 但第二次运行良好,我使用命令netstate […]

调整JVM(GC)以实现高响应的服务器应用程序

我在Linux 64bit上运行一个具有8个核心CPU和6 GB内存的应用程序服务器。 服务器必须具有高响应性。 经过一番检查后,我发现在服务器上运行的应用程序创建了相当多的短期对象,并且只有大约200~400 MB的长寿命对象(只要没有内存泄漏) 阅读http://java.sun.com/javase/technologies/hotspot/gc/gc_tuning_6.html后,我使用这些JVM选项 -server -Xms2g -Xmx2g -XX:MaxPermSize=256m -XX:NewRatio=1 -XX:+UseConcMarkSweepGC 结果:次要GC需要0.01~0.02秒,主要GC需要1~3秒,小GC不断发生。 如何进一步改进或调整JVM? 堆大小? 但GC需要更多时间吗? 更大的NewSize和MaxNewSize(适合年轻一代)? 其他collections家? 并行GC? 让主要GC更频繁地进行是一个好主意吗? 如何?

了解Java内存管理

Java程序员知道JVM运行垃圾收集器,而System.gc()只是建议JVM运行垃圾收集器。 如果我们使用System.gc(),它不一定会立即运行GC。 如果我误解了Java的垃圾收集器,请纠正我。 除了依赖Java的垃圾收集器之外,是否有其他方式进行内存管理? 如果您打算通过某种有助于管理内存的编程实践来回答这个问题,请这样做。

我如何知道为Sun JVM启用了哪些默认设置?

我想在我的JVM上尝试CompressedOops。 不,我想知道它是否可以默认启用。 我在debian / squeeze上运行这个jvm: $ java -version java version “1.6.0_22” Java(TM) SE Runtime Environment (build 1.6.0_22-b04) Java HotSpot(TM) 64-Bit Server VM (build 17.1-b03, mixed mode) 有人说它默认启用,有人说它不是: 来自: http : //forums.yourkit.com/viewtopic.php?f = 3&t = 3185 是的,你是对的,我也检查了它,并且在646位Java6u21中默认没有激活Compressed Oops,我不明白为什么它在我提供的链接中这么说。 我尝试用jconsole / JMX检查它,但没有运气找到名为CompressedOops或类似的属性。 有没有人知道我在哪里获得具有默认值的特定构建的所有jvm选项的列表? 关于Janning

Java VM – 释放的内存是否返回操作系统?

在Java运行时,如果我的应用程序释放内存,运行时是否会将内存释放回操作系统? 或者回到我的流程?

-XstartOnFirstThread VM Argument是什么意思?

我找不到VM参数-XstartOnFirstThread文档。 似乎我在Mac上通过LWJGL运行JOGL是必要的。 这是什么意思? 似乎某些进程需要线程0.这是正确的吗? 请注意:我的主类中有一个run()方法。 它似乎没有覆盖任何东西,我没有实现runnable。 我在这里运行的示例源代码: http : //www.lwjgl.org/guide