云时代架构阅读笔记二——Java性能优化(二)
承接上文Java性能优化(一)https://www.cnblogs.com/guo-xu/p/11019267.html
4)尽量确定StringBuffer的容量
在说和这个标题相关之前,先说一下Java中StringBuffer的地位及适用场景。
StringBuffer和StringBuilder和String这三种的存在是有点相似的,所以我们平常使用的时候不会在意这三种的区别,而是单纯的使用String,哪怕我修改100次这个变量。。。StringBuffer与StringBuilder相对于String有一个共同点,就是能够被多次修改但并不创建新的变量。这就使得在需要频繁修改对象的时候使用这两个比使用String更节省内存。
StringBuffer和StringBuilder的最大的不同之处在于StringBuilder的方法不是线程安全的(不能同步访问)。
StringBuilder相对于StringBuffer有速度优势,所以大部分时间内使用StringBuilder,但是在应用程序要求线程安全的情况下,则必须使用StringBuffer类。
言归正传,前面说到,StringBuffer在变量被频繁修改的场合下适合使用,但是如果在定义StringBuffer类对象的时候不指定它的长度,则它会分配一个默认的长度(16),这也就导致了当定义的变量更改为长度大于16的时候还是会创建新的变量,虽然系统会自动实现变量数据的迁移以及旧变量的销毁,但是,执行的过程还是比较消耗内存的,所以在使用的时候还是要根据情况手动事先给这个变量分配一个合适的长度。
5)在java+Oracle的应用系统开发中,java中内嵌的SQL语言应尽量使用大写形式,以减少Oracle解析器的解析负担
这一点恐怕很多人并没有在意,因为我们都知道,在所有的SQL中,是不分大小写的,所以在写SQL语句的时候都会按照平常的小写来书写语句,之前使用Navicat管理mysql的时候经常会用到Navicat的一键生成SQL语句的功能,然后会发现,它生成的SQL语句全部都是大写,之前也考虑过这个问题,也专门去网上搜索过一些相关的知识,不过网上都没有真正有价值的说法,唯一我觉得还稍微可以的就是说要把SQL语句中的关键字大写,其他的保持小写,这样是为了更好的分辨出关键字和其他语句,使SQL的层次更加清晰。
不过Oracle和其他的SQL不同,用过Oracle的都知道,即使我在创建的时候创建的是varchar2类型的name列,等到表格里面查看时还是会自动变成NAME,也就是说,Oracle处理字符串的时候一律按照大写处理,这也就映射了我们的这个标题,在使用java操作Oracle的时候,尽量使用大写,这样在进入到数据库操作的步骤时,就可以省去Oracle将SQL转换为大写然后执行的步骤,也算是稍微提升了一点性能。
以上几点是我根据云时代架构中的文章总结的关于Java性能优化方面的几点小知识,虽然以现在的设备条件我们不这样做的话并不会产生很大的影响,但是作为一个对Java比较感兴趣的人同时工作时候也希望走这条路的我来说,还是会在这方面多花费一点时间研究研究,毕竟也是想当Java工程师的人嘛【滑稽脸】
云时代架构阅读笔记二——Java性能优化(二)的更多相关文章
- 云时代架构阅读笔记一——Java性能优化(一)
Java语言学习了这么长时间之后,自己对于Java编程的一些细节还是稍微有点总结,正好根据云时代架构中<Java高级开发必会的50个性能优化的细节(珍藏版)>来叙述一些我和里面的点比较相符 ...
- 云时代架构阅读笔记六——Java内存模型详解(二)
承接上文:云时代架构阅读笔记五——Java内存模型详解(一) 原子性.可见性.有序性 Java内存模型围绕着并发过程中如何处理原子性.可见性和有序性这三个特征来建立的,来逐个看一下: 1.原子性(At ...
- 云时代架构阅读笔记七——Java多线程中如何使用synchronized关键字
关于线程的同步,可以使用synchronized关键字,或者是使用JDK 5中提供的java.util.concurrent.lock包中的Lock对象.本文探讨synchronized关键字. sy ...
- 云时代架构阅读笔记五——Java内存模型详解(一)
什么是Java内存模型 Java虚拟机规范中试图定义一种Java内存模型(Java Memory Model,JMM)来屏蔽掉各种硬件和操作系统的访问差异,以实现让Java程序在各种平台下都能达到一致 ...
- 云时代架构阅读笔记十一——数据库SQL优化
网上关于SQL优化的教程很多,但是比较杂乱.近日有空整理了一下,写出来跟大家分享一下,其中有错误和不足的地方,还请大家纠正补充. 1.对查询进行优化,要尽量避免全表扫描,首先应考虑在 where 及 ...
- 云时代架构阅读笔记十五——之前碰到的Java面试题
1.一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 可以有多个类,但只能有一个public的类,并且public的类名必须与文件名相一致. 2.Java有 ...
- 云时代架构阅读笔记十六——Hystrix理解
背景 分布式系统环境下,服务间类似依赖非常常见,一个业务调用通常依赖多个基础服务.如下图,对于同步调用,当库存服务不可用时,商品服务请求线程被阻塞,当有大批量请求调用库存服务时,最终可能导致整个商品服 ...
- 云时代架构阅读笔记十四——我对Hash算法的理解
Hash,一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值.这种转换是一种压缩映射,也就是 ...
- 云时代架构阅读笔记九——web应用存在的问题及解决办法
web应用通常存在的10大安全问题 1.SQL注入 拼接的SQL字符串改变了设计者原来的意图,执行了如泄露.改变数据等操作,甚至控制数据库服务器, SQL Injection与Command Inje ...
随机推荐
- 通过Java读取xml文件内容
读取XML中的内容就需要对XML进行解析,目前对XML进行解析的方法分为四种: 下面解析的方法是DOM4J,需要下载jar包dom4j:https://dom4j.github.io/ package ...
- 「IOI2014」Wall 砖墙
题目描述 给定一个初始元素为 \(0\) 的数列,以及 \(K\) 次操作: 将区间 \([L, R]\) 中的元素对 \(h\) 取 \(max\) 将区间 \([L, R]\) 中的元素对 \(h ...
- Flask 教程 第二十三章:应用程序编程接口(API)
本文翻译自The Flask Mega-Tutorial Part XXIII: Application Programming Interfaces (APIs) 我为此应用程序构建的所有功能都只适 ...
- LinkedList学习:API调用、栈、队列实现
参考的博客 Java 集合系列05之 LinkedList详细介绍(源码解析)和使用示例 如果你想详细的区了解容器知识以及本文讲的LinkedList,我推荐你去看这篇博客和这个做个的容器系列 Lin ...
- Codeforces 598E:Chocolate Bar
E. Chocolate Bar time limit per test 2 seconds memory limit per test 256 megabytes input standard in ...
- Java中的输入"scanf",Scanner用法
1.输入程序 1)Scnner的初始用法: 1 import java.util.Scanner; 2 public class Textone { 3 public static void main ...
- 【Unity】鼠标点选物体
Camera cam; void Start () { cam =this.GetComponent<Camera>(); } void Update () { )) { T ...
- POJ 3233:Matrix Power Series 矩阵快速幂 乘积
Matrix Power Series Time Limit: 3000MS Memory Limit: 131072K Total Submissions: 18450 Accepted: ...
- PyCharm配置TensorFlow开发环境
Anaconda自带的Jupyter Notebook很方便,但是执行速度较慢,缺少调试环境.PyCharm与Jupyter Notebook相比,执行速度更快,而且提供了类似Matlab的调试工具, ...
- Day5 - H - Supermarket POJ - 1456
A supermarket has a set Prod of products on sale. It earns a profit px for each product x∈Prod sold ...