返回顶部
首页 > 资讯 > 精选 >怎么解析Java性能优化中的基本类型与引用类型
  • 154
分享到

怎么解析Java性能优化中的基本类型与引用类型

2023-06-02 17:06:48 154人浏览 泡泡鱼
摘要

这期内容当中小编将会给大家带来有关怎么解析Java性能优化中的基本类型与引用类型,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。★名词定义  先明确一下什么是“基本类型”,什么是“引用类型”。  简单地说,

这期内容当中小编将会给大家带来有关怎么解析Java性能优化中的基本类型与引用类型,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

★名词定义

  先明确一下什么是“基本类型”,什么是“引用类型”。
  简单地说,所谓基本类型就是 Java 语言中如下的8种内置类型:

boolean
char
byte
short
int
long
float
double

  而引用类型就是那些可以通过 new 来创建对象的类型(基本上都是派生自 Object)。

★两种类型的存储方式

  这两种类型的差异,首先体现在存储方式上。

◇引用类型的创建

  当你在函数中创建一个引用类型的对象时,比如下面这句:

StringBuffer str = new StringBuffer();

  该 StringBuffer 【对象】的内容是存储在堆(Heap)上的,需要申请堆内存。而变量 str 只不过是针对该 StringBuffer 对象的一个引用(或者叫地址)。变量 str 的【值】(也就是 StringBuffer 对象的地址)是存储在【栈】上的。

◇基本类型的创建

  当你在【函数中}创建一个基本类型的变量时,比如下面这句:

int n = 123;

  这个变量 n 的【值】也是存储在栈(Stack)上的,但是这个语句不需要再从堆中申请内存了。

  为了更加形象,便于大伙儿理解,简单画了一个示意图如下:

怎么解析Java性能优化中的基本类型与引用类型

★堆和栈的性能差异

  可能有同学会小声问:堆和栈有啥区别捏?
  要说堆和栈的差别,那可就大了去了。如果你对这两个概念还是不太明白或者经常混淆,建议先找本操作系统的书拜读一下。
  由于是介绍性能,所以来讨论一下堆和栈在性能方面的差别(这个差异是很大滴)。堆相对进程来说是全局的,能够被所有线程访问;而栈是线程局部的,只能本线程访问。打个比方,栈就好比个人小金库,堆就好比国库。你从个人小金库拿钱去花,不需要办什么手续,拿了就花,但是钱数有限;而国库里面的钱虽然很多,但是每次申请花钱要打报告、盖图章、办 N 多手续,耗时又费力。
  同样道理,由于堆是所有线程共有的,从堆里面申请内存要进行相关的加操作,因此申请堆内存的复杂度和时间开销比栈要大很多;从栈里面申请内存,虽然又简单又快,但是栈的大小有限,分配不了太多内存。

★当初为啥这样设计?

  可能有同学又问了,干嘛把两种类型分开存储,干嘛不放到一起捏?这个问题问得好!下面我们就来揣测一下,当初 Java 为啥设计成这样。
  当年 Java 它爹(James Gosling)设计语言的时候,对于这个问题有点进退两难。如果把各种东东都放置到栈中,显然不现实,一来栈是线程私有的(不便于共享),二来栈的大小是有限的,三来栈的结构也间接限制了它的用途。那为啥不把各种东东都放置到堆里面捏?都放堆里面,倒是能绕过上述问题,但是刚才也提到了,申请堆内存要办很多手续,太繁琐。如果仅仅在函数中写一个简单的“int n = 0;”,也要到堆里面去分配内存,那性能就大大滴差了(要知道 Java 是1995年生出来的,那年头俺买了台 PC 配【4兆内存】就属豪华配置了)。
  左思右想之后,Java 它爹只好做了一个折中:把类型分为“基本类型”和“引用类型”,两者使用不同的创建方式。这种差异从 Java 语法上也可以看出来:引用类型总是用 new 创建对象(提醒一下:某些单键对象/单例对象,表面上没用 new,但是在 getInstance() 内部也还是用 new 创建的);而基本类型则【不需要】用 new 来创建。

★这样设计的弊端

  顺便跑题一下,斗胆评价 Java 它爹这种设计的弊端(希望 Java Fans 不要跟我急)。我个人认为:这个折中的决策,带来了许多深远的影响,随手举出几个例子:
1、由于基本类型不是派生自 Object,因此不能算是纯种的对象。这导致了 Java 的“【纯】面向对象”招牌打了折扣(当年 Sun 老是吹嘘 Java 是“纯”OO 的语言,其实 Java 的 OO 是不够纯粹滴)。
2、由于基本类型不是派生自 Object,出于某些场合(比如容器类)的考虑,不得不为每个基本类型加上对应的包装类(比如 Integer、Byte 等),使得语言变得有点冗余。

从上述的介绍,我们应该明白,使用 new 创建对象的开销是【不小】的。在程序中能避免就应该尽量避免。另外,使用 new 创建对象,不光是创建时开销大,将来垃圾回收时,销毁对象也是有开销的

上述就是小编为大家分享的怎么解析Java性能优化中的基本类型与引用类型了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注编程网精选频道。

--结束END--

本文标题: 怎么解析Java性能优化中的基本类型与引用类型

本文链接: https://lsjlt.com/news/230861.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 怎么解析Java性能优化中的基本类型与引用类型
    这期内容当中小编将会给大家带来有关怎么解析Java性能优化中的基本类型与引用类型,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。★名词定义  先明确一下什么是“基本类型”,什么是“引用类型”。  简单地说,...
    99+
    2023-06-02
  • 关于java中基本数据类型与引用数据类型的介绍
    一、基本数据类型byte:Java中最小的数据类型,在内存中占8位(bit),即1个字节,取值范围-128~127,默认值0short:短整型,在内存中占16位,即2个字节,取值范围-32768~32717,默认值0int:整型,用于存储整...
    99+
    2015-04-05
    java入门 java 基本数据类型 引用数据类型
  • Javascript中基本类型和引用类型是什么
    这篇文章给大家分享的是有关Javascript中基本类型和引用类型是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 1.基础类型A. 基础类型有5种,Number,...
    99+
    2024-04-02
  • JavaScript中引用类型之基本包装类型的示例分析
    这篇文章主要介绍JavaScript中引用类型之基本包装类型的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!具体如下:为了操作基本类型值,ECDMAScript提供了3个特殊...
    99+
    2024-04-02
  • 用实例解析Mysql索引类型与基本用法
    这篇文章主要用实例解析Mysql索引类型与基本用法,内容简而易懂,希望大家可以学习一下,学习完之后肯定会有收获的,下面让小编带大家一起来看看吧。本文实例讲述了Mysql索引类型与基本用法。分享给大家供大家参...
    99+
    2024-04-02
  • Java中引用类型和值类型的示例分析
    这篇文章给大家分享的是有关Java中引用类型和值类型的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。值类型传值,引用类型传引用Demo:public class ReferDemo {   &n...
    99+
    2023-06-03
  • Mysql索引类型与基本用法实例分析
    本文实例讲述了Mysql索引类型与基本用法。分享给大家供大家参考,具体如下: 索引 MySQL目前主要有以下几种索引类型: 普通索引 唯一索引 主键索引 组合索引 全文索引 - 普通索引 是最...
    99+
    2022-05-17
    Mysql 索引
  • JavaScript 基本数据类型和引用类型的区别是怎么样的
    这篇文章将为大家详细讲解有关JavaScript 基本数据类型和引用类型的区别是怎么样的,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。js基本数据类型:js...
    99+
    2024-04-02
  • C#中的预定义类型与引用类型是什么
    今天小编给大家分享一下C#中的预定义类型与引用类型是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、预定义的值类型一个...
    99+
    2023-06-30
  • C#中的值类型与引用类型有什么区别
    在C#中,值类型和引用类型是两种不同的数据类型,它们有以下区别: 存储位置:值类型的变量直接存储在堆栈中,而引用类型的变量存储在...
    99+
    2024-04-03
    C#
  • 解析MySQL数据类型:探索不同基本数据类型的特性和应用
    MySQL数据类型详解:探索各种基本数据类型的特点与用途 引言:在数据库应用程序中,数据的存储和处理是非常重要的。MySQL作为一个流行的开源关系型数据库管理系统,提供了多种数据类型来满足不同数据的存储需求。本文将深入探讨MyS...
    99+
    2024-01-29
    MySQL 数据类型 特点
  • Java基础之基本数据类型怎么用
    这篇文章主要为大家展示了“Java基础之基本数据类型怎么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Java基础之基本数据类型怎么用”这篇文章吧。一、整型主要扩展一下不同进制的整型二进制、八...
    99+
    2023-06-20
  • Java基本数据类型与常量池怎么使用
    本篇内容主要讲解“Java基本数据类型与常量池怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java基本数据类型与常量池怎么使用”吧!基本数据类型的大小int 32位 ...
    99+
    2023-06-02
  • Java中的八种基本数据类型详解
    目录一、八种基本数据类型常识基本常识表详解二、直接量与类型转换2.1、直接量2.2、类型转换1.自动转换:低类型的向高类型的转换 2.强制转换:高类型的向底类型转换,但可能...
    99+
    2024-04-02
  • Java基本数据类型族谱与易错点梳理解析
    目录1.八大基本数据类型族谱2.八大类型细节解析1.byte2.short3.int4.long5.char6.float7.double8.boolean3.小剧场解答问答小剧场&...
    99+
    2024-04-02
  • java中基本数据类型与Object的关系是什么
    这篇文章给大家分享的是有关java中基本数据类型与Object的关系是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。基本数据类型与Object的关系我知道大家是不是都听说过Object是所有类型的基类,但是这...
    99+
    2023-06-29
  • Java基础之详解基本数据类型的使用
    一、整型 主要扩展一下不同进制的整型 二进制、八进制、十进制、十六进制 * 二进制 : 0B(数字零+B) 0b(数字零+b) * 八进制 :0(数字零开头) * 十进制 :正常写...
    99+
    2024-04-02
  • java中基本数据类型与Object的关系说明
    目录基本数据类型与Object的关系这里举一个例子Object、基本数据类型的包装类Object类基本数据类型基本数据类型与Object的关系 我知道大家是不是都听说过Object是...
    99+
    2024-04-02
  • Java中怎么实现基本数据类型转换
    这期内容当中小编将会给大家带来有关Java中怎么实现基本数据类型转换,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。自动类型转换自动类型转换是指:数字表示范围小的数据类型可以自动转换成范围大的数据类型。如:...
    99+
    2023-06-17
  • 一文带你了解Java中基本数据类型的包装类
    这篇文章将为大家详细讲解有关一文带你了解Java中基本数据类型的包装类,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Java是面向对象的编程语言,包装类的出现更好的体现这一思想。 其次,包装...
    99+
    2023-05-31
    java 基本数据类型 包装类
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作