当前位置:七道奇文章资讯编程技术Java编程
日期:2011-03-22 16:16:00  来源:本站整理

<b>Java性能优化[1]:基本典范 vs 引用典范</b>[Java编程]

赞助商链接



  本文“<b>Java性能优化[1]:基本典范 vs 引用典范</b>[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

在Java性能优化系列中,内存管理是一个要优先考虑的关键因素.而说到内存分配,就必定会触及到 基本范例和引用范例.所以我们本日就先来介绍一下这两种范例在性能方面各自有什么奥妙(关于这两 种范例在别的方面的奥妙,我会别的写一个帖子).

★名词定义

先明确一下什么是基本范例,什么是引用范例.简单地说,所谓基本范例就是Java语言中以下的8种 内置范例:boolean、char、byte、short、int、long、float、double.而引用范例就是那些可以通过 new来成立对象的范例(基本上都是派生自Object).

★两种范例的存储方法

这两种范例的差别,首先表目前存储方法上.在Java中,引用范例是存储在堆(Heap)上的;而基本 范例是存储在栈(Stack)上.大概有同学会小声问:堆和栈有啥辨别捏?要说堆和栈的差别,那可就大 了去了.假如你对这两个概念还是不太懂得大概常常混合,倡议先找本操作系统的书拜读一下.

★堆和栈的性能差别

堆和栈在性能方面是有很大差别滴.堆相对进程来说是全局的,可以被全部线程拜候;而栈是线程局 部的,只能本线程拜候.打个比方,栈就好比个人小金库,堆就好比国库.你从个人小金库拿钱去花, 不需求办什么手续,拿了就花,但是钱数有限;而国库里面的钱固然很多,但是每次申请费钱要打报告 、盖图章、办N多手续,耗时又吃力.

一样原理,由于堆是全部线程共有的,从堆里面申请内存要举行相关的加锁操作,因此申请堆内存的 复杂度和时间开销比栈要大很多;从栈里面申请内存,固然又简单又快,但是栈的大小有限,分配不了 太多内存.

★为什么这样计划?

大概有同学又问了,干吗把两种范例脱离存储,干吗不放到一同捏?这个问题问得好!下面我们就来 猜测一下,当初Java为啥计划成这样.

昔时Java它爹(James Gosling)计划语言的时刻,关于这个问题有点进退两难.假如把各种东东都 安排到栈中,明显不实际,一来栈是线程私有的(不便于同享),二来栈的大小是有限的,三来栈的结 构也间接限制了它的用处.那为啥不把各种东东都安排到堆里面捏?都放堆里面,倒是能绕过上述问题 ,但是方才也提到了,申请堆内存要办很多手续,太烦琐.假如仅仅在函数中写一个简单的“int n = 0”,也要到堆里面去分配内存,那性能就大大滴差了(要知道Java是1995年生出来的,那年 头我家的PC配4兆内存就属豪华配置了).

左思右想之后,Java它爹只好做了一个折中:把范例分为基本范例和引用范例;引用范例(Object派 生)的对象存放到堆里面;把基本范例(非Object派生)的值存放到栈里面.所以,你从Java语法上也 可以看出二者的差别:引用范例可以用new成立对象(关于某些单键,表面上没用new,但是在 getInstance()内部也还是用的new);而基本范例则不需求用new来成立.

★这样计划的弊端

趁便跑题一下,斗胆评价Java它爹这种计划的弊端(但愿Java Fans不要跟我急).我个人认为:这 个折中的抉择,带来了很多深远的影响,顺手举出几个例子:

1、由于基本范例不是派生自Object,因此不能算是纯种的对象.这招致了Java的“纯面向对象 ”招牌打了折扣.

2、由于基本范例不是派生自Object,出于某些场所(比方容器类)的考虑,不得不为每个基本范例 加上对应的包装类(比方Integer、Byte等),使得语言变得有点冗余.

★结论

从上述的介绍,我们应当懂得,利用new成立对象的开销是不小的.在程序中能避免就应当尽大概避免 .别的,利用new成立对象,不光是成立时开销大,将来垃圾回收时,销毁对象也是有开销的(关于GC的 开销,咱们会在背面的帖子细谈).下一个帖子,我们找一个例子来实战一下.

本文原始地址:

http://program-think.blogspot.com/2009/03/java-performance-tuning-1-two-types.html


  以上是“<b>Java性能优化[1]:基本典范 vs 引用典范</b>[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • <b>hosts是什么 hosts文件在什么位置 若何改正hosts</b>
  • <b>在 Windows 8 中手动安装语言包</b>
  • <b>五个常见 PHP数据库问题</b>
  • Windows中Alt键的12个高效快速的利用本领介绍
  • <b>MySQL ORDER BY 的实现解析</b>
  • <b>详解MySQL存储历程参数有三种范例(in、out、inout)</b>
  • <b>Win8系统恢复出来经典的开始菜单的办法</b>
  • <b>Win8系统花屏怎么办 Win8系统花屏的办理办法</b>
  • <b>Windows 7系统下无线网卡安装</b>
  • <b>为什么 Linux不需求碎片整理</b>
  • <b>Windows 8中删除账户的几种办法(图)</b>
  • <b>教你如安在win7下配置路由器</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .