节约用电小贴士_节约用水:洗个小澡
节约用电小贴士
容器越来越小。 我们的编程需要转移以进行补偿。
我们曾经能够编写要在具有大量内存和大量CPU的大型计算机上运行的代码。 然后出现了云计算,计算机虽然大小适中,但并不庞大。
然后出现了容器化,我们开始在四分之一的CPU和很少的系统RAM上运行我们的软件。
![](/assets/blank.gif)
企业软件开发人员必须掌握与嵌入式或游戏软件开发人员相同的挑战。
我们必须完善资源利用的艺术
正如我之前关于CI 所写的那样,计算任务的效率具有绿色影响。 就服务器场而言,绿色代表着地球变热并燃烧着能源,而就美元(或其他任何方面)而言,绿色代表着不被浪费,因为您必须在更多节点上运行环境。
最重要的是,您可能希望您的应用以最高速度运行。
计算机程序使用CPU周期来计算事物并消耗系统内存。 任务结束后,必须回收系统内存,这会导致更多的CPU使用率。 同样,当任务占用大量系统内存时,也会涉及工作量和风险。 分配方面的努力,以及在系统内存不足/内存不足时出现速度变慢或停止的风险。
了解你的敌人
临时堆对象不是敌人。 不必要的是。
考虑以下算法:
private static final String PAIR_PATTERN = "(?<=\\G.{2})" ; public static String hexToString(String hex) { if (StringUtils.isBlank(hex) || hex.length() % 2 != 0 ) { throw new RuntimeException( "Invalid input" ); } List<Byte> list = Arrays.stream(hex.split(PAIR_PATTERN)) .map(convertStringToByte()) .collect(Collectors.toList()); return new String(ArrayUtils.toPrimitive( list.toArray( new Byte[list.size()])), StandardCharsets.ISO_8859_1); } private static Function<String, Byte> convertStringToByte() { return s -> Integer.valueOf(Integer.parseInt(s, 16 )) .byteValue(); }
这是一个十六进制到字符串的转换器。 也许从图书馆借书会更有效。 也许这是一个好主意,因为它使用了我们想要的编码等等。
关于上述问题,这有多节俭!?
不是特别的…
上面是慢速或内存浪费技术的购物清单。 API和Java类型系统允许我们使用它们的方式吸引了我们。 不过,值得使用这个无辜的例子来学习一些经验教训。 这是其中注释了所有不成比例的资源使用情况的代码:
// splitting a string with a regex and when you just want // pairs is probably overkill, compared with repeated // use of substring private static final String PAIR_PATTERN = "(?<=\\G.{2})" ; public static String hexToString(String hex) { if (StringUtils.isBlank(hex) || hex.length() % 2 != 0 ) { throw new RuntimeException( "Invalid input" ); } // we're using streaming and a variable-sized list // when we know the target size - variable sized // structures come with overheads List<Byte> list = Arrays.stream(hex.split(PAIR_PATTERN)) // we're mapping using a function that // creates a function not a huge overhead, // but a bit of a surprise .map(convertStringToByte()) .collect(Collectors.toList()); // this line is the shocker // the new Byte[list.size()] is a misuse of the API // which only needs ANY byte array, as it will create // its own to return - so there's a whole wasted array // the array itself being of the wrong type - Byte // rather than byte, so it's immediately replaced by // another array with the unboxed values return new String(ArrayUtils.toPrimitive( list.toArray( new Byte[list.size()])), StandardCharsets.ISO_8859_1); } private static Function<String, Byte> convertStringToByte() { // the boxing of the integer only to // convert it to a Byte is an // extra object and operation return s -> Integer.valueOf(Integer.parseInt(s, 16 )) .byteValue(); }
替代
认真…使用图书馆。 虽然:
public static String hexToString(String hex) { if (StringUtils.isBlank(hex) || hex.length() % 2 != 0 ) { throw new RuntimeException( "Invalid input" ); } byte [] hexToBytes = new byte [hex / 2 ]; int writeIndex = 0 ; for ( int i = 0 ; i < hex.length(); i += 2 ) { hexToBytes[writeIndex++] = stringToByte(hex.subString(i, i + 2 )); } return new String(hexToBytes, StandardCharsets.ISO_8859_1); } private static byte stringToByte(String hex) { return ( byte )(Integer.parseInt(hex, 16 )); }
也可以。 假设通过某种智能运行时内联以某种方式自动处理了调用stringToByte
的开销。
这种方法优于其他方法的地方是它分配了固定大小的缓冲区并重新使用它。 我们以前在C ++中使用的方式!
结论
我们需要使用尽可能少的资源。 我们可能仍然可以依靠计算机的速度如此之快,以至于不作一般性的优化就便宜了,总的来说,宁愿使用可读的代码也要花费数小时的艰苦优化。
但是,如果您对浪费的资源使用有了深刻的了解并感到满意,那么您会发现清晰的算法可以减少工作量,并且对整体性能/成本有更好的影响。
向开发商致敬
对于那些已经编写了上述代码并怀着最大意愿的人,尤其是该特定代码的原始作者,不要将其视为对有效代码的批评。 取而代之的是,有机会了解无害技术的成本以及更多节俭替代品的可用性。
那些计算机没有变大!
翻译自: https://www.javacodegeeks.com/2020/01/save-water-have-smaller-baths.html
节约用电小贴士
节约用电小贴士_节约用水:洗个小澡相关推荐
- javascript小游戏_个人网站集成js小游戏《圈小猫》教程及源码
今天在某网站浏览帖子的时候,发现帖子被删除了,然后弹出了404页面,页面上集成了一个小游戏,小游戏长什么样子呢?看下面这个图! 第一步 查看小游戏源码,发现这个小游戏完全是由JavaScript编写的 ...
- python做一个小游戏_利用python做个小游戏
从本期开始,我们将利用几天的时间用python来做个小游戏,当然,在做小游戏之前,我们必须学会一个做小游戏的第三方库--pygame.可能有人会说,python不擅长或者说不适合用来做游戏,的确是这样 ...
- object picker 微信小程序_七夕地图导航微信小程序
七夕期间,开发一款七夕微信小程序,地图导航是七夕小程序一种功能,今天单独开发一款纯七夕地图导航小程序,供大家娱乐,希望大家喜欢. 准备着手实现一个小程序,功能包括--获取用户当前位置的经纬度,在地图上 ...
- 安全模式删除入网小助手_别了,上网小助手
本文与个人的技术兴趣无关,但是,如果你正好也有和我一样的烦恼,也对流氓软件表示出离地愤怒,不妨花两分钟阅读一下. 背景介绍 我自己家里的笔记本电脑(操作系统: Win 7), 因为公司的事情被迫装上了 ...
- c#小游戏_.NET手撸2048小游戏
前言 2048是一款益智小游戏,得益于其规则简单,又和 2的倍数有关,因此广为人知,特别是广受程序员的喜爱. 本文将再次使用我自制的"准游戏引擎" FlysEngine,从空白窗口 ...
- python制作小工具_利用Python制作翻译小工具
话不多说,直接上代码. Component文件: # coding:utf-8 from tkinter import * from tkinter import ttk from tkinter i ...
- iphone清理缓存小技巧_那些不为人知的iPhone隐藏小技巧
最近本小编在跟同事交流iPhone隐藏技巧过程中发现自己居然有好多功能都不知道,一度怀疑自己用的假苹果!!于是我就奋发图强.把网上一些比较有用的iPhone隐藏技巧搜索.整理了这篇,可能还是不全.希望 ...
- gz键盘增强小工具_这些不起眼的Mac小工具,能让你的Macbook效率倍增!
Mac系统上的神器有很多,今天macdown小编为大家整理了一些超好用的Mac小工具.所谓的小工具,它们没有太多的功能或者仅仅提供一个功能,但是能直击痛点,同时又不会打扰到你,你甚至感觉不到它的存在! ...
- java 显示天气的小程序_超级简单的微信小程序获取今日天气预报代码 小程序获取七日天气...
代码是天气api的小程序demo, 粘贴上js和wxml就可以运行看效果了, 有问题的加我qq 445899710, 可提供源代码, 效果如图 如果是测试, 请勾选配置 不校验合法域名.web-vie ...
最新文章
- 1.8 循环神经网络的梯度消失-深度学习第五课《序列模型》-Stanford吴恩达教授
- java可变长字符串_具有可变长度的scala字符串插值
- ssh无密码公钥登陆
- GitHub多人协作简明教程
- 蓝牙耳机声音一顿一顿的_这次让世界听听我们的声音——声阔SoundcoreLiberty2Pro蓝牙耳机...
- springMVC处理跨域问题
- java excel导出 模板_Java Excel 导出 模板
- 淘汰过时的工具也有错?微软的 Blazor 框架会是下一个 SilverLight?
- 现代软件工程讲义 如何提出靠谱的项目建议
- PIXI.JS兼容微信小游戏
- Python实现笑脸检测+人脸口罩检测
- Atitit 2016 技术趋势与没落技术 目录 1.1. 流水线 即代码通过编码而非配置CI/CD运行工具的方式,来定义部署 流水线	1 1.2. 将APIs当作产品	1 1.3. 无服务器架构
- 【MFC】字体类——CFont
- hive plsql使用示例
- 皮尔逊、斯皮尔曼、肯德尔相关系数
- linux下列目录清单用命令,Linux入门必看的Is命令实用范例!
- echarts 生成中国陕西省份(或其他省份)的地图,大屏使用
- 计算机专业英语期末考试,《计算机专业英语》期末试卷
- 目标检测中的anchor-base与anchor-free
- 常见的关系型数据库和非关系型数据及其区别