Tag: jvm

Java中的引用变量里面有什么?

我们知道对象引用变量包含表示访问对象的方式的位。 它不包含对象本身,但它包含指针或地址之类的东西。 我正在阅读Head-First Java(第2版)的书,并在书中写出(见第3章,第54页) 在Java中,我们并不真正知道引用变量中的内容。 我们知道无论它是什么,它都代表着一个也只有一个对象。 并且JVM知道如何使用引用来获取对象。 – 我想问一下: 对象引用变量是否包含指针,地址或什么? JVM如何解释这一点?

JVM ARGS’-Xms1024m -Xmx2048m’在Java 8中仍然有用吗?

我有一个使用JVM ARGS的Java 7应用程序: -Xms1024m -Xmx2048m ,它运行得很好。 升级到Java 8后,它以exception方式运行在错误状态: Exception in thread “main” java.lang.OutOfMemoryError: GC overhead limit exceeded at org.hibernate.engine.StatefulPersistenceContext.addEntry(StatefulPersistenceContext.java:466) at org.hibernate.engine.TwoPhaseLoad.postHydrate(TwoPhaseLoad.java:80) at org.hibernate.loader.Loader.loadFromResultSet(Loader.java:1439) at org.hibernate.loader.Loader.instanceNotYetLoaded(Loader.java:1332) at org.hibernate.loader.Loader.getRow(Loader.java:1230) at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:603) at org.hibernate.loader.Loader.doQuery(Loader.java:724) at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:259) at org.hibernate.loader.Loader.doList(Loader.java:2228) at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2125) at org.hibernate.loader.Loader.list(Loader.java:2120) at org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:118) at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1596) at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:306) 我想知道JVM ARGS -Xms1024m -Xmx2048m是否还在工作? 由于Java 8已经删除了Perm Generation: http : //www.infoq.com/articles/Java-PERMGEN-Removed […]

将变量推送到堆栈中的Stack和Variables差异?

所以我知道存在2个内存区域: Stack和Heap 。 我也知道,如果你创建一个局部变量,它将存在于堆栈中,而不是堆中。 随着我们将数据推入其中,堆栈将会增长,如: 现在我将尝试通过我对你的困惑: 例如,这个简单的Java代码: public class TestClass { public static void main(String[] args) { Object foo = null; Object bar = null; } } 被翻译成这个字节码: public static void main(java.lang.String[]); Code: Stack=1, Locals=3, Args_size=1 0: aconst_null 1: astore_1 2: aconst_null 3: astore_2 4: return LineNumberTable: line 5: 0 line 6: 2 line 7: […]

Java:为什么它使用固定数量的内存? 或者它如何管理记忆?

似乎JVM使用了一些固定数量的内存。 至少我经常看到参数-Xmx (对于最大尺寸)和-Xms (对于初始尺寸),这表明了这一点。 我觉得Java应用程序不能很好地处理内存。 我注意到的一些事情: 甚至一些非常小的示例演示应用程序也会加载大量内存。 也许这是因为加载了Java库。 但为什么需要为每个Java实例加载库? (这似乎是因为多个小应用程序线性地占用更多内存。请参阅此处了解我描述此问题的一些细节。)或者为什么这样做? 像Eclipse这样的大型Java应用程序经常会因一些OutOfMemoryexception而崩溃。 这总是很奇怪,因为我的系统上仍然有足够的内存。 通常,它们会在运行时消耗越来越多的内存。 我不确定他们是否有一些内存泄漏,或者这是因为内存池中的碎片 – 我觉得后者就是这种情况。 例如,Java库似乎需要比类似强大的库(如Qt)更多的内存。 为什么是这样? (比较,启动一些Qt应用程序并查看它们的内存使用情况并启动一些Java应用程序。) 为什么它不使用像malloc和free这样的底层系统技术? 或者如果他们不喜欢libc实现,他们可以使用jemalloc (就像在FreeBSD和Firefox中一样 ),这看起来非常好。 我很确定这会比JVM内存池表现更好。 而且不仅表现更好,还需要更少的内存,尤其是 适用于小型应用。 另外:有人已经尝试过吗? 我会对基于LLVM的Java JIT编译器感兴趣,它只使用malloc / free进行内存处理。 或者这也可能与JVM实现到实现有所不同? 我主要使用Sun JVM。 (另请注意:我不是直接在这里谈论GC。GC只负责计算可以删除的对象和初始化内存释放,但实际的释放是一个不同的子系统.Afaik,它是一些自己的内存池实施,而不仅仅是free电话。) 编辑:一个非常相关的问题: 为什么(Sun)JVM对内存使用有固定的上限? 或者换句话说:为什么JVM处理内存分配的方式与本机应用程序不同?

考虑到Java(该语言)是独立于平台的,为什么JVM不是独立于平台的?

只是好奇知道什么时候java独立于平台,那么JVM是否有任何特定的原因使平台依赖..

Java运行时环境检测到致命错误:pc = 0x00002b2f7e9b2744处的SIGSEGV(0xb),pid = 28778,tid = 1138739520

执行程序时出现以下错误。 这并不总是发生。 该代码包含一些具有大量数据的复杂计算。 有人可以帮助识别错误 # # A fatal error has been detected by the Java Runtime Environment: # # SIGSEGV (0xb) at pc=0x00002b2f7e9b2744, pid=28778, tid=1138739520 # # JRE version: 7.0-b147 # Java VM: Java HotSpot(TM) 64-Bit Server VM (21.0-b17 mixed mode linux-amd64 compressed oops) # Problematic frame: # V [libjvm.so+0x64e744] PhaseIdealLoop::clone_loop(IdealLoopTree*, Node_List&, int, Node*)+0xe34 # […]

JVM版本管理器

Ruby Version Manager是否与Java世界等效? 我正在寻找允许我轻松下载和安装新JVM并在它们之间切换的工具。 例如: jvm install jvm list //will list installed JVMs on my system jvm use jdk1.6 //will switch my env to jdk 1.6 version, etc.

用完堆空间

我有堆空间问题。 我的程序很简单。 有两个actor(发送和接收)“发送”actor每秒传递10000个对象来“接收”,并接收发布这些对象。 接收器接收的对象被保存在容器中,但容器每秒都被清空。 因此容器没有空间耗尽。 现在在420000个对象后,我的eclipse鞋出现了一个错误,说“ ioconsole updater遇到了问题” 。 当我转到细节时,我看到错误内部错误:: Java堆空间 我试过增加堆大小。 我的堆大小是8096米,maxpermsize是4096 我正在使用visualVm监视我的代码,我注意到它没有超过堆大小。 如何解决问题完全空白。 有人可以让我知道其他可能的情况会导致这样的错误。

Java堆转储和关闭 – 什么顺序?

我想检测一个OutOfMemoryError ,进行堆转储,并自动退出Java程序。 假设我的JVM有以下命令行参数: -XX:OnOutOfMemoryError=”kill -9 %p” -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/usr/tmp 哪个先发生? 进程是否会转储内存然后退出,反之亦然?

JVM终止后会发生什么?

我在互联网上四处寻找这个问题的答案,但我必须得出结论,我必须要么在互联网上找东西,要么在错误的地方找东西。 现在我希望有人可以帮助我解决我的问题: 当JVM以System.exit(0)或^C或类似的东西终止时会发生什么? 我到处读到诸如“流程刚被吹走”和“每个线程都停止”之类的事情,但我想知道究竟发生了什么。 我已经知道有一些shutdownHook仍然会被执行,但之前发生了什么,并且在所有这些线程完成之后还有什么吗? 我的问题的真正原因是因为我想正确地实现这样的shutdownHook并对可能仍然执行的内容做出正确的假设。 更新: 一些代码: class SomeObject { private boolean stopped; SomeObject() { stopped = false; Thread hook = new Thread() { @Override public void run() { stopped = true; } }; hook.setPriority(Thread.MAX_PRIORITY); Runtime.getRuntime().addShutdownHook(hook); } boolean map(Iterator it) { while(it.hasNext() && !stopped) { writeToOtherObject(it.next()); it.remove(); } //have calculations finished? return !it.hasNext(); } […]