看<<实战java虚拟机>>书,运行一个demo,然后报了以下的错误提示。
Java HotSpot™ 64-Bit Server VM warning: NewSize (1536k) is greater than the MaxNewSize (1024k). A new max generation size of 1536k will be used.

测试代码为:

package cn.shutdown.demo.jvm;/*** -Xmx20m -Xms20m -Xmn1m -XX:SurvivorRatio=2 -XX:+PrintGCDetails* @author dmn* @date 2021/6/15*/
public class NewSizeDemo {public static void main(String[] args) {byte[] b = null;for (int i = 0; i < 10; i++) {b = new byte[1 * 1024 * 1024];}}
}

运行结果为:

Java HotSpot(TM) 64-Bit Server VM warning: NewSize (1536k) is greater than the MaxNewSize (1024k). A new max generation size of 1536k will be used.
[GC (Allocation Failure) [PSYoungGen: 512K->496K(1024K)] 512K->512K(19968K), 0.0015693 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]
HeapPSYoungGen      total 1024K, used 738K [0x00000007bfe80000, 0x00000007c0000000, 0x00000007c0000000)eden space 512K, 47% used [0x00000007bfe80000,0x00000007bfebc8d0,0x00000007bff00000)from space 512K, 96% used [0x00000007bff00000,0x00000007bff7c010,0x00000007bff80000)to   space 512K, 0% used [0x00000007bff80000,0x00000007bff80000,0x00000007c0000000)ParOldGen       total 18944K, used 10256K [0x00000007bec00000, 0x00000007bfe80000, 0x00000007bfe80000)object space 18944K, 54% used [0x00000007bec00000,0x00000007bf6040a0,0x00000007bfe80000)Metaspace       used 2700K, capacity 4486K, committed 4864K, reserved 1056768Kclass space    used 289K, capacity 386K, committed 512K, reserved 1048576K

对这个警告提示很好奇,于是搜了搜,在StackOverflow里找到一个非常靠谱的答案。
JDK7 JVM different from JDK8

说明如下

The observed behaviour is related to some changes between Java 7 and Java 8.

这个情况与jdk7和jdk8中的变更有关

-Xmn1024k

this option sets the initial and the maximum size of the heap for the young generation. It’s a shorthand for -XX:NewSize=1024k -XX:MaxNewSize=1024k.

这个jvm参数项设置 青年代堆内存的初始和最大的空间。是 -XX:NewSize=1024k -XX:MaxNewSize=1024k的简化写法

// same command in Java 7/8
java -XX:+PrintFlagsFinal -Xmn2048k -version | grep NewSize
...
uintx MaxNewSize                               := 2097152
uintx NewSize                                  := 2097152
...

This behaviour seems to be not in line with the documentation.

这种行为似乎与文档不符。

Java 7

-Xmnsize or -XX:NewSize Sets the size of the young generation (nursery).

Java 8

The -XX:NewSize option is equivalent to -Xmn.

Because -XX:NewSize=2048k would set in Java7/8 only the initial size and the maximum size is chosen by the JVM.

因为 -XX:NewSize=2048k 会在 Java7/8 中设置只有初始大小,最大大小由 JVM 选择。

Hence if you specify -Xmn1024k it actually means you want to set

因此,如果你指定-Xmn1024k 意味着你想要设置如下

-XX:NewSize=1024k -XX:MaxNewSize=1024k

In Java 7 (tested with 1.7.0_40-b43) the minimal size (for initial and maximum) is 196608. If you set the value to low. The start of the JVM fails with

在Java7中,(初始化和最大值)的范围的最小值为 196608,如果设置的值比这个值小,JVM虚拟机启动就会报下面的错误而失败。

Error occurred during initialization of VM
Too small new size specified

In Java 8 (tested with 1.8.0_74-b02) minimal size (for initial and maximum) is 1572864 (1536K).

在Java8中,(初始化和最大值)的范围的最小值为1572864 (1536K).

Now why you get this NewSize (1536k) is greater than the MaxNewSize (1024k) with Java 8.

所以java8中的,1536k是大于你设置的 -Xmn1m (-Xmn1024k) 的。

If you choose NewSize lower than the minimal size (1536K) it’s adjusted silently to that minimal size.

如果你选择的NewSize 初始化的值小于取值范围的最低值,那会自动被设置为最低值(1536k)

java -XX:+PrintFlagsFinal -XX:NewSize=1k -version | grep NewSize
...
uintx NewSize                                  := 1572864
...

If you choose MaxNewSize lower than NewSizeMaxNewSize will be set silently to NewSize

如果 MaxNewSize的值小于 NewSizeMaxNewSize 的值会被自动设置为NewSize的值。

java -XX:+PrintFlagsFinal -XX:NewSize=2048k -XX:MaxNewSize=1025k -version | \grep NewSize
...
uintx MaxNewSize                               := 2097152
uintx NewSize                                  := 2097152
...

If you choose NewSize and MaxNewSize lower than minimal size and MaxNewSize bigger than NewSize, both are set to the minimal size.

NewSizeMaxNewSize 的值如果都低于最小值(1536k),则都会被设置为最小值(1536k)。

java -XX:+PrintFlagsFinal -XX:NewSize=1024k -XX:MaxNewSize=1025k -version | \grep NewSize
...
uintx MaxNewSize                               := 1572864
uintx NewSize                                  := 1572864
...
java -XX:+PrintFlagsFinal -XX:NewSize=1 -XX:MaxNewSize=1025k -version | \grep NewSize
...
uintx MaxNewSize                               := 1572864
uintx NewSize                                  := 1572864
...

But as soon you choose for MaxNewSize a value lower than 1025k equal to 1024k you get the error message you have discovered. Seems you found an edge case where a check is done before the adjustment.

但是,一旦您为“MaxNewSize”选择一个低于“1025k”的值,即等于“1024k”,您就会收到您发现的错误消息。你的这种情况正好是在在需要调整的界限边缘了。

java -XX:NewSize=1 -XX:MaxNewSize=1025k -version
java version "1.8.0_74"java -XX:NewSize=1 -XX:MaxNewSize=1024k -version
Java HotSpot(TM) 64-Bit Server VM warning: NewSize (1536k) is greater than the \
MaxNewSize (1024k). A new max generation size of 1536k will be used.

That’s explains why java -Xmn1025k -version runs fine where as java -Xmn1024k -version gives you the error message.

这就是为什么执行 java -Xmn1025k -version正常跑,但是 java -Xmn1024k -version 报错了。

After some more testing. The error seems to be printed only in case MaxNewSize is equal to 1024k. The next examples are working with the default size for NewSize and MaxNewSize.

经过测试,这个错误只会在 MaxNewSize的值为 1024k的时候进行输出。

java -XX:NewSize=1 -XX:MaxNewSize=1023k -version
java -XX:NewSize=1 -XX:MaxNewSize=1 -version

Java HotSpot(TM) 64-Bit Server VM warning: NewSize (1536k) is greater than the MaxNewSize (1024k)相关推荐

  1. 关于Java HotSpot(TM) 64-Bit Server VM warning: Insufficient space for shared memory file: 11043的解决办...

    Java HotSpot(TM) 64-Bit Server VM warning: Insufficient space for shared memory file: /tmp/hsperfdat ...

  2. 启动Kafka失败Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000c0000000, 107

    报错信息: Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000c0000000,  107374 ...

  3. 解决:Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000c5330000, 986513408,

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 1.只是想启动elasticsearch,报错如题: Java HotSpot(TM) 64-Bit ...

  4. Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=256m; support was removed in

    使用jdk8的时候,出现了Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=256m; support wa ...

  5. Java HotSpot(TM) 64-Bit Server VM warning:Options -Xverify:none and -noverify were deprecated in ..

    刚刚用IDEA学习springBoot. 运行程序时,出现了这种情况 Java HotSpot(TM) 64-Bit Server VM warning: Options -Xverify:none ...

  6. Java HotSpot(TM) 64-Bit Server VM warning: ignoring option PermSize=512m; support was removed in 8.0

    对tomcat jvm启动参数进行调整,控制堆内存大小 在tomcat目录/bin/catalina.sh文件中加入如下内容 JAVA_OPTS='-Xms512m -Xmx1024m -XX:Per ...

  7. Java HotSpot(TM) 64-Bit Server VM warning:Options -Xverify:none and -noverify were deprecated

    SpringBoot项目中出现Java HotSpot(TM) 64-Bit Server VM warning: Options -Xverify:none and -noverify were d ...

  8. idea Java HotSpot(TM) 64-Bit Server VM warning: ignoring option PermSize=512

    idea Java HotSpot™ 64-Bit Server VM warning: ignoring option PermSize=512 换成 -Xmx2048m -XX:Metaspace ...

  9. kafka启动报错Java HotSpotTM 64-bit Server VM warning:INFO: os::commit_memory

    版权声明:版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/qq_39501726/article/details/81938695 kafka启动报错 ...

  10. 【Java】OpenJDK 64-Bit Server VM warning: Sharing is only supported for boot loader classes…… 的解决方法

    遇到报错:OpenJDK 64-Bit Server VM warning: Sharing is only supported for boot loader classes because boo ...

最新文章

  1. 微软家浏览器挺有意思,大家体会一下
  2. 数据脱敏项目中遇见的问题
  3. NOIP2008 双栈排序
  4. 实验吧之NSCTF misc250
  5. java ssh 那一层应该捕获异常_java ssh异常(大神来看看啊)
  6. 草稿 爬虫-访问登陆可见的页面-请求时带上cookie数据
  7. 搭建大数据运行环境之二
  8. 起泡排序算法及其算法的验证
  9. 清华大学2016年软件学院攻读工程硕士专业学位研究生培养方案
  10. 10人勾结苹果外包公司员工窃个人信息 涉案900万
  11. AcWing 143. 最大异或对
  12. 问大家一个没有什么技术水平的问题!
  13. 算法:间隔重排序链表Reorder List
  14. 计算机网络技术知识点
  15. 基于Matlab/simulink的转速电流双闭环直流调速系统的仿真
  16. edgewin10无法安装_win10内置Edge浏览器遇到“您未安装FLASH控件”如何解决
  17. RNA 6. 差异基因表达之-- 火山图 (volcano)
  18. 用c语言写一个求和的程序,用C语言编写一个“等比数列求和”的程序?
  19. html心情日志页面,增加日志页面
  20. Ping命令(Ping网络打印机)

热门文章

  1. Linux查看当前系统的版本信息
  2. KVM(二)CPU 和内存虚拟化
  3. Web App 前端构建(纯净版)
  4. hdu1215七夕节
  5. 《嵌入式Linux基础教程》补充阅读建议电子数目下载
  6. Anytime项目开发记录3
  7. 困兽之斗!使用JavaScript执行客户端的exe文件(excute the .exe file on client-side machine by JavaScript)...
  8. H3C IS-IS实验
  9. mysql硬盘复制无法启动_磁盘的移动导致MySQL数据启动失败
  10. python3 鼠标定位输入及其点击实例