1.今日博客学习内容
JVM最多能够创建多少个java对象
JVM 能够创建的 Java 对象的数量并不是固定的,取决于可用内存的大小和 JVM 的实现。一般来说,JVM 能够支持的最大 Java 对象数量限制是 Integer.MAX_VALUE(2^31-1),这是由于 Java 虚拟机规范规定了 Java 数组的最大长度限制为 Integer.MAX_VALUE,而一个数组元素可以是任何 Java 对象。
然而,在实际场景中,JVM 能够创建的 Java 对象数量要远远小于这个限制,主要是因为 JVM 需要在堆内存中为每个对象分配内存空间,而堆内存空间是有限的,同时还要考虑到对象存储和回收的成本等因素。因此,应该根据实际场景来估算 JVM 能够创建的 Java 对象数量,从而避免出现内存不足或者垃圾回收效率低下等问题。
另外,值得注意的是,JVM 通过内存分代策略来管理对象内存,即将内存分为新生代和老年代两个部分,分别对不同年龄段的对象采用不同的垃圾回收机制。新生代通常会分为 Eden 区和两个 Survivor 区,对象的创建和大部分垃圾回收都发生在新生代。老年代则用于存储经过多次垃圾回收后依然存活的对象。因此,JVM 创建的 Java 对象数量不仅取决于内存空间大小,还受到分代策略的影响。
扩展堆的大小
设置堆的最小空间大小。 建议和-Xmx设置一样
-Xms4096M
设置堆的最大空间大小。
-Xmx4096M
堆内新生代的大小。剩下的就是老年代的了: -Xmx减去-Xmn
-Xmn1024M
扩展栈的大小
设置每个线程可使用的内存大小,即栈的大小。在相同物理内存下,减小这个值能生成更多的线程,当然操作系统对一个进程内的线程数还是有限制的,不能无限生成。线程栈的大小是个双刃剑,如果设置过小,可能会出现栈溢出,特别是在该线程内有递归、大的循环时出现溢出的可能性更大,如果该值设置过大,就有影响到创建栈的数量,如果是多线程的应用,就会出现内存溢出的错误。 JVM默认是1024KB
-Xss256k