Tag:

为什么PermGen的默认大小如此之小?

限制Java JVM上Permgen空间大小的目的是什么? 为什么不总是将它设置为最大堆大小? 为什么Java默认这么少的64MB? 他们是否试图强迫人们通过这样做来注意代码中的permgen问题? 如果我的应用程序使用85MB的permgen,那么将它设置为96MB可能是安全的,但为什么如果它只是主堆的真正部分呢? 允许JVM在堆允许的情况下使用尽可能多的PermGen会不会有效?

Java – 堆与直接内存访问

我最近遇到了sun.misc.Unsafe类,允许用户以类似于C的方式分配,解除分配和一般访问内存。我读了几个解决这个问题的博客,例如 哪个更快 – 堆或直接内存 – 测试结果声称堆 堆外内存与DirectByteBuffer vs Heap – 堆外似乎是最快的 时间序列数据的内存映射文件 – MappedByteBuffer比堆对象更快 第1条似乎与其他条款相矛盾,我无法理解其中的原因。 DirectMemoryBuffer在引擎盖下使用了sun.misc.Unsafe (因此是MappedByteBuffer ),因此它们也应该受到第1条所述的JNI调用的影响。另外,在第2条中,堆外内存访问类似于第1条中的内容,并给出完全相反的结果。 有人可能会评论如何处理堆外记忆,即何时使用它,是否有显着的好处,最重要的是,为什么类似的主题根据上述文章给出了截然不同的结果? 谢谢。

如何在1秒钟内发送4000多个请求?

我有一个HTTP GET request 。 我需要在1秒内将请求发送到应用程序服务器超过4000次。 我正在使用JMeter发送这些请求。 每次使用嗅探器工具( Wireshark )进行每次测试时,我都会采用空灵痕迹。 我试图从一台机器,多台机器(并行)甚至分布式模式实现这一目标。 实际上,JMeter的结果不是我关注的问题。 此测试的关注点是在嗅探器工具上看到4000请求在一秒内命中服务器。 在使用以下JMeter测试计划时,我在1 sec的空灵痕迹中发现了近2500请求。 Number of Threads= 4000 Ramp-Up Periods = 0 (Though it is depricated) Loop count= 1 当我使用线程数为2500 ,我在空灵跟踪中的一秒内得到了近2200 request命中服务器。 服务器对该请求的响应不是我关注的问题。 我只是想确保JMeter发送的4000请求在一秒钟内到达应用服务器。 更新: 案例1:(4000个主题) Number of Threads= 4000 Ramp-Up Periods = 0 Loop count= 1 案例1的输出: JMeter(查看表中的结果) :启动4000个请求2.225秒。 虚拟跟踪 :4000个请求命中服务器4.12秒。 案例2:(3000个主题) JMeter(查看表中的结果) :1.83秒启动3000个请求。 […]

字符串池存在于年轻一代和老一代?

从Java 7开始实施的字符串不再存储在permgen区域。 相反,它们存储在正常的堆空间中,这意味着它们必须经历一半的GC和完整的GC。 现在,在半个GC之后,那些生存下来的实习生必须从年轻一代转移到老一代。 这是否意味着年轻一代和老一代都有这种字符串民意调查? 接下来让我们说实习中的一个字符串。 我们定义了一个具有相同内容的字符串文字,然后在这种情况下,它必须指向池中相同的字符串内容。 所以JVM必须在年轻和老一代中搜索String并返回对approriate字符串实例的引用。 我的想法是否正确?

我在哪里可以永久设置Windows PC上的Java堆大小?

我最近下载了最新的Java 1.6 JDK。 我正在使用SDK附带的VisualVM在我的本地电脑上测试/监控我的webapp(使用Tomcat服务器)。 我正在运行Windows XP。 用于设置最小值的参数位于何处。 最多 java堆大小? VisualVM表示最大值。 堆大约是256mb。 我在server.xml文件中查找了Tomcat,但没有找到任何设置。 谢谢

JNI的Java内存管理

我有两个问题: 如果我对方法进行JNI调用并且JNI方法泄漏内存,该怎么办? 一旦这个方法完成,JVM垃圾收集器就能够恢复该内存。 我听说JVM不管理JNI使用的堆空间? 但是JNI使用的内存是Java进程使用的内存的一部分? 是否绝对有必要使用JNI来实现IPC? 什么是其他流行的Java技术,还是有一个开源库来实现Java中的共享内存?

如何以编程方式获取jmap直方图?

我想从受监控的应用程序内部以编程方式获得jmap -histo的输出。 我看到通过HotSpot诊断bean可以触发二进制堆转储,但我看不到如何获取直方图数据。 可能吗 ?

使用jmx和java 5以编程方式获取堆信息

我知道使用jconsole附加到java进程以获取内存信息。 具体来说,我是以编程方式获取有关各种内存池的信息,因此我可以将其绑定到监视应用程序。 谢谢!

为什么线程共享堆空间?

每个线程都有自己的堆栈,但它们共享一个公共堆。 每个人都清楚堆栈是针对本地/方法变量和堆的,例如/类变量。 在线程之间共享堆有什么好处。 有几个线程同时运行,因此共享内存可能会导致并发修改,互斥等开销问题。 堆中的线程共享哪些内容。 为什么会这样? 为什么不让每个线程拥有自己的堆呢? 任何人都可以提供一个真实世界的例子,线程如何利用共享内存?

是否可以动态更改最大Java堆大小?

我知道您可以使用-Xmx在启动时设置最大堆大小,但是可以在运行时动态更改它吗? 是否有任何工具或(未记录的)API可以让我这样做?