常见的误解:这会创建多少个对象?

总览

一个常见的问题是一段代码创建多少个对象或多少个字符串。 答案通常不是您的想法,也不是您真正需要知道的。 了解何时创建对象是很有用的,但是有很多其他因素通常要考虑的重要得多,这可能意味着应用程序总数不是您所想的。

字符串不是一个单一的对象

字符串包装char []。 这意味着当您看到新的String时,可能还会涉及到新的char []。 如果您对String做+,则可以使用StringBuilder(来自Java 5.0),它也可以包装char []。 这意味着通常在Java中创建的char []比String对象更多。 有时char []是JVM中最常见的对象类型。

字符串文字仍然是字符串

一个常见的误解是String文字不计算在内。 在至少运行一次代码之后,它们不会添加到总数中,但是大多数情况下,问题是关于一次运行的代码。 即字符串文字仍然计数。

另一个常见的误解是字符串文字被加载时。 在Java 6及更早版本中,它们是在加载Class时加载的,但是现在(Java 7+)在首次使用时已加载。 这意味着首次出现String文字的一段代码将创建新的String对象。

JVM使用字符串,其中很多。

JVM使用Java代码,并且使用字符串。 用于加载您的类的ClassLoader使用字符串。 您要加载的类的名称是一个String,所有系统属性和创建的所有环境变量都是如此,以便您可以运行您的程序,它们都是String,包括值和键名。

让我们考虑一个Hello World程序,并查看创建了多少个String,以便此程序可以运行。 是0、1还是2个字符串,看看是否可以猜测实际创建了多少个字符串。

public class HowManyStrings {public static void main(String[] args) throws IOException {System.out.println("Hello world");System.in.read();}
}

该程序在System.in.read()上停止; 让我把堆放了。 假设没有GC,实用程序jmap可以给出当前堆上对象数量的直方图计数,这将是创建的数量。

HowManyStrings

如您所见,字符串的数目为2490。如果我还有更多的环境变量或Java的其他更新,则数字将有所不同。

简而言之,如果您在代码中争论2到5个String,则可以看到,当代码运行一次时,您可能会丢失大多数String。

但是,如果我多次调用代码怎么办?

如果您正在谈论数百万次,这很可能很重要,但这就是问题。 JVM将优化多次调用的代码,并且它可以做两件事。

消除死代码

JIT检测到的代码不会做任何有用的事情,可以将其删除。 JIT非常擅长此操作,很可能您正在查看的示例也没有做任何有用的事情。 但是,在现实世界的代码中,希望它可以做一些有用的事情,这是下一个优化有用的地方。

转义分析

JIT可以查看一个方法(或内联调用的所有方法后该方法的外观),并查看对象是否转义了该方法。 如果它不能逃脱该方法,则可以将其放在堆栈上,或者有效地将其字段解包到堆栈上。 这意味着不会在堆上创建任何对象,并且实际上甚至不必创建对象标头,它是所有字段,可能不需要创建任何字段。 简而言之,仅仅因为您在代码中看到了新的String并不意味着JIT必须实际创建一个对象,只要它对结果没有影响(除非您在计算创建的对象的数量)

结论

即使是很小的应用程序创建的字符串数量也可能远远超过您想像的用途,但是调用了足够的次数,您可能会发现方法根本不再创建任何对象。

2015-10-07

彼得·劳瑞

翻译自: https://www.javacodegeeks.com/2015/10/common-misconception-how-many-objects-does-this-create.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/356608.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

cvs配电保护断路器_电工电器(三)-配电电器-断路器类-剩余电流保护断路器

本文文字836,阅读时间6分钟左右。此系列文章 从配电电器的大类等进行慢慢阐述,有不足的地方 欢迎大家相互探讨交流。配电电器,顾名思义就是进行电力分配的设备。电,从发电机出来之后,由总线输出,不可能直接…

html模块殃射,【Web前端问题】webpack打包后,module模块中的函数无法在html标签的事件中调用?...

折腾了好久,求大佬指点~~最近才开始接触webpack以及ES6的module,可能理解的有问题吧。。。希望大佬来指点一下我这个菜鸟。我的想法是在一个module中定义函数,在HTML的中用onclick事件调用这个函数。module模块代码:— base.js —…

Linux网络参数设置

1、ifconfig 查询、设定网络卡与ip 设置桥接网络 # vi /etc/sysconfig/network-script/ifcfg-br0DEVICEbr0 #设备名称BOOTPROTOstatic #设置静态地址IP6INITnoMTU1500 #设置MTU连接数 (可以设定不同的MTU数值)NM_CONTROLLEDnoONBOOTyesIPADDR…

delhpi7 tcombobox清楚重复项_专利数据统计中需要搞清楚的首要问题(2)

上一篇专利数据统计中需要搞清楚的首要问题(1)介绍了通过合并申请号避免重复统计,理清了专利篇数和专利件数的问题,那么还有一类统计就是对发明项数的统计,这里就涉及到对同一项发明的重复统计问题。上一篇介绍的相同申请号但不同公开号的专利…

【Electron】Electron开发入门(八):自定义electron框架外壳(shell)的菜单(Menu)...

1.自定义electron框架外壳(shell)的菜单(Menu) electron的main.js里代码: const Menu require(electron).Menu; var template [{label: 关闭,click: function () { win.close();console.log("关闭")},// s…

交通大数据应用细分_盈海科技 | 交通大数据可视化“掘金”数据价值

面对日益拥堵的交通状况智能交通布局虽在不断完善但交通管理依旧收效甚微问题究竟出在了哪里?数据独立存储难以融合应用数据内在规律难寻数据可视化程度低……问题繁多 困难重重怎么办???交通大数据可视化解决方案上岗啦&#xff…

书评– Kubernetes Up&Running,作者:Kelsey Hightower

欢呼! 正如我在以前的帖子中所写的那样,当您开始研究和使用所有这些新颖的,有光泽的容器/编排技术时,很有可能最终导致您的翻译“迷失”。 很多信息,很多技术,很多开发 ,很多承诺,很…

relative布局html,CSS的四种布局方式static/relative/fixed/absolute

staticstatic布局是HTML元素默认的布局方式,并且static布局的元素不会受到top/left/bottom/right属性的影响。布局元素的位置即其在标准文档流中的位置。relative相对布局是相对其在标准文档流中的位置而言的。设置其top/left/bottom/right属性会使该元素脱离标准文…

MFC CListCtrl

列名、行内容的添加、删除。 据列名、行内容长度设置列宽。 排序。 提升权限 BOOL CDemoListCtrlApp::EnableDebugPrivilege() { HANDLE token; if(!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES,&token)) { return FALSE; } TOKEN_PRIVILEGES tkp…

快手用旺旺瓶子做机器人_100品牌入榜,在快手的品牌运营怎么做?|11月快手品牌新势力榜揭晓...

11月榜单见证了许多新入驻快手的品牌迅速成长。母婴品牌「安慕斯」实现垂类专业场景剧情化,引起用户发注,激发用户参与,单月涨粉突破60万;服饰箱包运动垂类下的珠宝品牌「DR钻戒」以“一生唯一真爱”的理念抢占消费者心智&#xf…

认识计算机ppt课件游戏,《认识计算机》PPT课件

《认识计算机》PPT课件 认知主义认为 学习是个体对环 境的作用,而并不仅是环境刺激引起的行为改变;环境只能提供潜在刺激,至于这些潜在刺激是否受到注意或被加工,这主要取决于学习者内部的认知结构。 认 识 计 算 机 认知主义认为…

UITextView: 响应键盘的 return 事件(收回键盘)

UITextView: 响应键盘的 return 事件(收回键盘) 此篇文章将要介绍UITextView: 响应键盘的 return 事件(收回键盘)的相关介绍,具体实例请看下文 UITextView: 响应键盘的 return 事件 UITextFieldDelegate代理里面响应re…

hashdos_调查HashDoS问题

hashdos近一个月前,我就如何在不与供应商互动的情况下临时解决 28C3上出现的HashDoS问题或其他代码缺陷发表了一些想法。 现在是时候更深入地研究复杂性攻击并查看源了。 我完全假设java.util.HashMap和java.util.Hashtable是受此攻击影响的最常用的Java数据结构&am…

ssb门限_画出滤波法ssb信号调制器模型,并说明低通和高通滤波器分别得到哪个边带信号...

匿名用户1级2016-05-25 回答如果输出已调信号的频谱和输入调制信号的频谱之间满足线性搬移关系,则称为线性调制,通常也称为幅度调制。线性调制的主要特征是调制前后的信号频谱从形状上看没有发生根本变化,仅仅是频谱的幅度和位置发生了变化。…

!doctype html报错h5,【Web前端问题】javascript import 报错

初学者, 想知道错误出在哪里,找到的资料都介绍的以下是我精简后的代码内容,错误提示在 main.js import那一行错误提示为:SyntaxError: Unexpected token ‘{‘. import call expects exactly one argumentindex.htmlLearnJavscriptbody{backg…

BZOJ1433 ZJOI2009 假期的宿舍 二分图匹配

1433: [ZJOI2009]假期的宿舍 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2375 Solved: 1005[Submit][Status][Discuss]Description Input Output Sample Input 1 3 1 1 0 0 1 0 0 1 1 1 0 0 1 0 0Sample Output ˆ ˆHINT 对于30% 的数据满足1 ≤ n ≤ 12。对于100% 的…

idea 运行单个main方法_IntelliJ IDEA 运行你的第一个Java应用程序 idea运行main方法

打包文件 MANIFEST.MF 功能详解最近研究了如何在java工程打包,期间遇到的一些问题进行总结,如打包成test.jar 文件 Manifest-Version: 1.0 Main-Class: windows.VideoWindow ...第七课第四节,T语言流程语句(版本5.0)break语句 通常用在循环.遍…

Apache Spark中实现的MapReduce设计模式

该博客是该系列文章的第一篇,讨论了MapReduce设计模式一书中的一些设计模式,并展示了如何在Apache Spark(R)中实现这些模式。 在编写MapReduce或Spark程序时,考虑执行作业的数据流很有用。 即使Pig,Hive&a…

Token注解防止表单的重复提交

注解的一些基础: 参见http://blog.csdn.net/duo2005duo/article/details/50505884和 http://blog.csdn.net/duo2005duo/article/details/50511476这两篇文章 1,自定义一个注解Token 用来标记需要防止重复提交的方法 1 package com.bjca.framework.util;2…

计算机主机风扇安装方法,电脑机箱怎么安装风扇减震胶钉保护主板cup?

炎炎夏日,是时候给你的爱机清清灰,特别是对于机箱散热不好的朋友就需要给电脑机箱装上几个风力强劲的风扇,这样可以大大减少CPU、主板等的老化时间,延长爱机的寿命。现在机箱风扇大都使用橡胶拉钉(或者叫减震钉、固定钉)安装&…