如果你要买一辆车而且你的首要目标是性能或者更具体的说是原始动力,那么在4缸发动机和8缸发动机之间选择的话,答案很显然,因为越大越好。通常而言,当我们看计算机配置列表或者产品宣传的时候,64位的性能也比32位有优势,同样四核比双核更棒。本文引用地址:http://www.eepw.com.cn/article/201706/348396.htm

然而许多在大同世界里很简单的道理包括越多/大越好,移到计算机领域里就不是那么回事了。当处理多重CPU时,你会觉得那些多核所多出来的处理单元很有用,但如果你的工作仅仅是单线程的,那你要做的却是让其他核一边歇着。

32位与64位的比较则更加细微。x86-64 架构不仅在x86架构的基础上增大了寄存器,而且还增加了寄存器的数量。从基本上说这会带来更好的性能(因为更多的寄存器可以让编译器创建更好的机器代码)。然而很不幸,至今把Java从32位移到64位带来的只是性能的下降。

谈到Java的性能,runtime的两个方面很关键:JIT和GC。JIT的作用使尽可能快地执行代码;GC的作用是(在管理存储的同时)从代码的执行中抽取尽可能少的时间。因而Java的性能是让JIT(在更多存储器的帮助下)产生更多理想代码,并减少GC用以管理存储的时间(指针越大这越困难)。

Java 9最初是设计为32位系统的而且这影响了我们在代码基(code base)做的一些早期决定。早几年前我曾花费不少时间试图在运行64位的PowerPC系统上运行我们的Smalltalk VM,得到的结论是:最直接的解决方式是让所有的数据结构(对象)变得两倍大来处理64位指针。随着Java 9的发展(大约2001),我们拿到手的最早的一个64位系统是一个Dec Alpha,所以我们采用了这种最直接的“变大”解决方法,允许一个通常的代码基既支持32位也支持64位。

64位CPU拥有更宽的数据总线,但是同样是这个64位CPU可以运行32位的代码,而且拥有同样宽的数据总线。回头看看我们64位的解决方案——将数据结构变得两倍大,效果却不如相同硬件上的32位,也就是说64位不及32位。这个问题不是Java 9也不是Java所独有的,因为所有的64位都需要数据扩展。只是说Java语言将这一问题凸显得更加明显,因为Java编程通常与创建、操控对象(也称数据结构)有关。

性能问题的解决方法是聪明地处理数据结构,这也正是我们在Java6 JDK中使用压缩列表特性(compressed references feature)所做的。我们可以玩小聪明而且不会被抓到,因为使用者(Java程序员)并不清楚Java对象更深处的表现。

折中的处理方法是通过在对象内存储更少的信息,限制可以被JVM使用的存储。这是一个相当不错的处理方法,因为计算机存储的规模远不及64位的极限地址范围。我们仅使用32位来存储指针,并充分利用8字节对象对齐(aligned objects)来得到一些空位(指针 3)。因此使用压缩列表(compressed references)——Xcompressedrefs,IBM Java6 JDK可寻址高达32Gb的堆。

并不只我们使用这种技巧,Oracle/BEA有-XXcompressedRefs,Sun有-XX:+UseCompressedOops。当然,不同厂商的方法在限制和支持等级上略有不同。也许你会有异议,但当用户运行到32位操作系统的堆栈极限时,他们就想要64位系统(同时还要不损失性能)。

64位系统好不好用java_64位系统环境时Java的性能相关推荐

  1. linux 2g内存 64系统怎么样,电脑2g内存能装64位系统吗|2g内存装64位系统好不好

    大家都知道,电脑有32位和64位之分,而如果在电脑配置硬件可以的话,64位系统处理速度远超32位系统,所以很多人就想给电脑装64位系统,但是对于硬件配置相对比较低,比如电脑只有2g内存,那么电脑2g内 ...

  2. 64位系统下,一个32位的程序究竟可以申请到多少内存,4GB还是更多

    前言: cpu的位是指一次性可处理的数据量是多少,1字节=8位,32位处理器可以一次性处理4个字节的数据量,依次类推.32位操作系统针对的32位的CPU设计.64位操作系统针对的64位的CPU设计.操 ...

  3. 64位系统下,一个32位的程序究竟可以申请到多少内存,4GB还是更多?

    前言: cpu的位是指一次性可处理的数据量是多少,1字节=8位,32位处理器可以一次性处理4个字节的数据量,依次类推.32位操作系统针对的32位的CPU设计.64位操作系统针对的64位的CPU设计.操 ...

  4. (转)关于X64位系统IIS7下支持32位asp.net程序

    最近在windows2008 x64位系统下的IIS7下部署asp.net程序. vs2005或vs2008默认的情况下是Any cpu 的也就是支持x86和x64两种系统的.可我的程序在引用了一个三 ...

  5. 32位linux升级64位系统下载地址,使用i386-32位Linux不能升级到amd64位,只能全新安装Linux-amd64版...

    目前很多Linux发行版都不再提供i386-32位 ISO,用户只能使用老的版本,比如Deepin新版本只提供amd64位 ISO(参考:deepin 15.3 32位ISO下载地址,深度系统最后支持 ...

  6. 64位操作系统(WIN10)+32位LabVIEW(2020)+64位MySQL,Windows10系统下用32位ODBC连接MySQL

    1.首先得安装"Connector/ODBC",就是MySQL的ODBC驱动,这个是与应用程序相关的,而不是与操作系统相关的,也就是说,不管你的系统是X64还是X86,只要你的应用 ...

  7. Win7 64位系统上配置使用32位的Eclipse

    在64位win7 jdk64的系统上跑32位的eclipse ,只需重新安装32位的jdk 修改下eclipse的配置文件即可: 修改eclipse/eclipse.ini文件,在-vmargs参数之 ...

  8. 怎么查看服务器是多少位系统,查看服务器是多少位的

    查看服务器是多少位的 内容精选 换一换 使用mount命令将文件系统挂载至Linux云服务器时,提示wrong fs type, bad option.Linux云服务器系统未安装NFS客户端,用户在 ...

  9. 【转】将 Linux 应用程序移植到 64 位系统上

    原文网址:http://www.ibm.com/developerworks/cn/linux/l-port64.html 随着 64 位体系结构的普及,针对 64 位系统准备好您的 Linux® 软 ...

最新文章

  1. nginx的小总结(二)
  2. 如何画正太分布曲线_图解统计学 01 | 神奇的正态分布
  3. 五分钟叫你看懂美国金融危机的成因和巨大危害[转]
  4. Spring Cloud Alibaba - 05 Nacos 领域模型_NameSpac/Group/Cluster
  5. ajax跨域请求.json文件,使用JSONP对JSON文件进行跨域Ajax请求
  6. C语言实现聚类K-means cluster算法(附完整源码)
  7. 【HDU - 1527】【POJ - 1067】取石子游戏 (威佐夫博弈)
  8. 项目中cxf和weblogic整合时报错的问题
  9. vscode删除文件夹,VSCode:删除文件中的所有注释
  10. 加密Python脚本
  11. java 集合排序方法_java集合排序方法sort的使用
  12. CentOS 缺少mysqli扩展 请检查PHP配置
  13. mysql 4,mysql 4.1,mysql 数据库中文问题
  14. Excel、CSV文件数据导入MySQL数据库
  15. Hamcrest 断言
  16. 如何自动生成测试用例方案
  17. IOS设置时间不兼容解决方案
  18. 大数据面试3分钟自我介绍_大数据面试要注意哪些方面?大数据面试准备三大攻略...
  19. 走进VOT--《High Performance Visual Tracking with Siamese Region Proposal Network》阅读翻译
  20. 什么是TCP/IP协议?

热门文章

  1. 9.JSP运行原理与JSP页面的基本结构
  2. FPGA Verilog实现一个脉冲波形变换
  3. JS之数组元素排序方法sort
  4. mysql主键long_MySQL主键设计
  5. scratch跳一跳游戏脚本_cocos creator制作微信小游戏「跳一跳」
  6. android无感刷新下拉分页,GitHub - TakWolf/Android-RefreshAndLoadMore-Demo: 一种简单的并且优雅的方式实现下拉刷新和加载更多的分页效果。...
  7. js udp通信_nodejs源码分析第十九章 -- udp模块
  8. 一个设计项调另一个设计项(支持多选传值)
  9. 前后端数据加密传输 RSA非对称加密
  10. [转载][QT][SQL]sql学习记录3_sqlite之update delete like