论坛首页 Java企业应用论坛

Java启动后内存达到2G

浏览 18519 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-08-08  
magicgrass 写道
justmoon 写道
主要是因为以前系统一直用的是32位的jdk,启动起来后内存大概才1G左右;现在就只将jdk换成了64位的,其他未动,不知道为什么启动后就2G了。JVM配置也未改过。

你配置jvm参数的时候没有声明jvm类型 是-server还是-client,这样就由jvm自动选择。

jvm类型是server 还是client由server-class machine 决定。
server-class machine 的判断标准
1. 2个或者两个以上的cpu
2  2g以上的物理内存
This definition of a server-class machine applies to all platforms, with the exception of 32-bit platforms running a
version of the Windows operating system.
由于jvm的server和client类型在初始化的时候有很大不同,如垃圾回收器是否是并行的之类的等等,所以初始时所用的内存大小也不同。

查看jvm类型的最直接方式 java -version 命令
Java HotSpot(TM) 64-Bit Server VM (build 17.0-b16, mixed mode)  server
Java HotSpot(TM) Client VM (build 19.1-b02, mixed mode, sharing)  client

参考
Memory Management in the JavaHotSpot™ Virtual Machine 第五章Ergonomics -- Automatic Selections and Behavior Tuning



文章我看了,但是我没有找到答案。我不管是使用32位的还是64位的jdk,操作系统(suse10,64位)是没变的,按文章的说法,jdk会自动选择是server级别的jvm。

0 请登录后投票
   发表时间:2011-08-09  
32位的jre跑起来,最多只能申请到1.7G左右的内存。官方文档里面应该有相关的说明。
这也就是服务器一定要64位操作系统的原因啊。否则你硬件再牛叉,你系统只32位的,也用不上啊。
0 请登录后投票
   发表时间:2011-08-09  
justmoon 写道
-Xms1024m ,我试过-Xms2048m,效果差不多,系统启动起来后,-Xms1024m的配置大约在1.8G上下, Xms2048m在2.1G左右。
“64位默认-server 32位默认-client” ,是什么意思呢?


你可以具体看下这几个值的意思
-Xms表示的是 设置堆最小内存,-Xmx设置的是堆最大.
至于“64位默认-server 32位默认-client” 是错误的.具体参考楼上说的 ,我觉得已经很清楚了
0 请登录后投票
   发表时间:2011-08-09  
64位比32位JVM性能差10%-20%
0 请登录后投票
   发表时间:2011-08-09  
java_user 写道
64位比32位JVM性能差10%-20%
能不能所的详细点?
0 请登录后投票
   发表时间:2011-08-09  
java_user 写道
64位比32位JVM性能差10%-20%

    同意.虽然我具体不清楚具体差多少性能.
    相同的程序在64位jdk中小号的内存比32位的大,这是因为指针膨胀以及数据类型对齐补白造成的..
0 请登录后投票
   发表时间:2011-08-10  
感觉java就是用内存来换性能的,对于高并发量的系统,一直不觉得java有好的解决方案
0 请登录后投票
   发表时间:2011-08-10  
    如果是高并发量的系统,基本都是通过集群来解决的.其实对于java的执行性能问题,现在基本上也不是什么问题了.现在的JIT编译器生成的本地代码,执行效率并不比C++的代码差.至少是一个数量级的.
   至于楼上说的内存换性能,这个不是很理解为什么会有这种说法.你是指java对于自动内存管理或者数组越界检测之类的内存开支么?我的理解是,你既然要用智能手机,那么肯定要比黑白操作系统的手机占内存的.
0 请登录后投票
   发表时间:2011-08-10  
chenjingbo 写道
    如果是高并发量的系统,基本都是通过集群来解决的.其实对于java的执行性能问题,现在基本上也不是什么问题了.现在的JIT编译器生成的本地代码,执行效率并不比C++的代码差.至少是一个数量级的.
   至于楼上说的内存换性能,这个不是很理解为什么会有这种说法.你是指java对于自动内存管理或者数组越界检测之类的内存开支么?我的理解是,你既然要用智能手机,那么肯定要比黑白操作系统的手机占内存的.
确实没有什么内存换性能的说法。Java性能差已经是过去的事情了。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics