java程序员修炼之前笔记(前半部分)
第一部分 用java7做开发
第一章 初始java7
java7中的新特性
- switch支持String
- 支持100_000_000数值表示法
- 新的异常处理
- | 连接多个异常
- final Exception 抛出实际异常
- try-with-resources(TWR)语法
- 钻石语法
- 简化变参方法调用
第二章 新I/O
这个部分需要‘写写看’才能更深刻的理解
- Paths工具类使用
- Files工具类实现文件在CRUD等操作
- 通过Files.newDirectoryStream(path, "*.html")查找指定path下所有以.html结尾的文件
- 通过继承SimpleFileVisitor实现更复杂的功能,如:目录及子目录下所有.html文件的查找等(这个功能很强大,可以实现很多之前必须用‘递归’才能搞定的问题!)
- 使用FileSystems.getDefault().newWatchService()监听文件的CRUD等操作
- FileChannel的使用
- 异步IO
第二部分
第三章 依赖注入
这章主要讲‘依赖注入’的编程思想
IOC(Inversion of Control)包含DI(Dependency Injection)
DI优势
- 松耦合
- 高内聚
- 易测试
- 高重用
- 代码简洁
第四章 现代并发
java.util.concurrent设计原则:
- 安全性(并发类型安全性)
- 活跃度
- 性能
- 重用性
并发系统开销:
- 锁与监测
- 环境切换次数
- 线程的个数
- 调度
- 内在的局部性
- 算法设计
关键字
- volatile
原子类
- java.util.concurrent.atomic
线程锁
java.util.concurrent.locks
ReentrantLock的使用 ReentrantReadWriteLock 读多写少时使用,性能更好
并发集合
- ConcurrentHashMap
- CopyOnWriteArrayList
Queue
BlickingQueue
WorkUnit,使用工作单元,如:
Queue<TaskWorkUnit<Mytask>>public class TaskWorkUnit<T> {
private final T task; public T getTask() {
return task;
} public TaskWorkUnit(T task) {
this.task = task;
}
}
- TransferQueue 的使用
任务建模
- Callable
- Future
- FutureTask
分支/合并框架
- ForkJoinPool
- ForkJoinTask
- RecursiveAction 无结果返回
- RecursiveTask 返回结果
java内在模型(JMM)
- 之前发生(Happens-Before)与 同步约束(Synchronous-With)
- Has-A 与 Is-A
- 传递性:a>b,b>c,则a>c
第五章 类文件与字节码
类加载
- 加载
- 读取.class文件
- 连接
- 验证
- 准备
- 解析
- 初始化
类加载器
- 根(引导)类加载器
- 扩展类加载器
- 应用(系统)类加载器
- 定制类加载器
方法句柄
- MethodHandle
javap命令
操作码 - 加载与存储操作码 - 数据运算操作码 - 执行控制操作码 - 调用操作码 - 平台操作操作码
第6章 理解性能调优
性能术语
等待时间(Latency)
吞吐量(Throughput)
利用率(Utilization)
效率(Efficiency)
容量(Capacity)
扩展性(Scalability)
退化(Degradation)
调优困难的平台特性主要是
线程调度
垃圾收集(GC)
即时(JIT)编译
硬件时钟
- RTC
- 8254
- TSC 应用最广泛
- HPET 最新
- nanoTime()与currentTimeMillis()
缓存未命中
内存区域
- 伊甸园(Eden Space)
- 幸存者乐园(Survivor Space)
- 终身颐养园(Old Generation)
PermGen
栈保存原始型局部变量和引用,堆中保存对象
年轻代收集 与 完全收集
安全点
GC 相关
-Xms<几MB>m --堆初始化值(默认2MB)
-Xmx<几MB>m --堆最大值(默认64MB)
-Xmn<几MB>m --堆中年轻代大小
-XX:-DisableExplicitGC --系统内调用System.gc()不产生任何作用
读懂GC 日志
-XX:+PrintGCDetails
-XX:+PrintGCDateStamps --gc操作时间戳
-XX:+PrintGCApplicationConcurrentTime --应用线程运行情况下用在GC上的时间
GC 方法
并发标记清除(CMS:Concurrent Mark-sweep)
-XX:+UseConcMarkSweepGC --打开cms收集器
-XX:+CMSIncrementalMode --增量模式(一般都需要)
-XX:+CMSIncrementalPacing --配合增量模式使用,自动调整每次执行垃圾回收的幅度(一般都需要)
-XX:+UseParNewGC --并发收集年轻代
-XX:+ParallelGCThreads=<N> --GC使用的线程数
G1垃圾收集器
-XX:+UseG1GC --打开G1收集
-XX:MaxGCPauseMillis =50 --G1一次收集中暂停时间在50ms内
-XX:GCPauseIntervalMillis=200ms --2次收集的时间间隔在200ms以上
输出编译日志
-XX:+PrintCompilation --输出编译日志
注:
s --方法是同步的
! --方法有异常处理
% --当前栈替换(OSR)
HotSpot 编译
- 客户端编译器:编译决定更保守,编译效率慢
- 服务端编译器:编译决定更大胆,效率高
- 实时java
java程序员修炼之前笔记(前半部分)的更多相关文章
- Java程序员修炼之道 之 Logging(1/3) - Logback 配置(转)
转自紫风乱写:http://www.blogjava.net/justfly/archive/2014/08/10/416768.html,建议大家去原处学习 写在前面的话: 作为<Java程序 ...
- java程序员修炼之道
今天在论坛里看到了一位工作10年的java大牛总结的java程序员修炼之道,看完后给出的评价是:字字玑珠,深入人心,猛回头,自己一无是处··· 大牛告诉我们应该好好学习与修炼以下知识与技能 Java语 ...
- Java程序员修炼之路
作者简介:王成委,CSDN知识库特邀编辑,Java高级工程师,熟悉Java编程语言和Oracle数据库.专注于高并发架构设计和大数据存储方向的研究. 我们为什么选择Java 大多数人选择Java可能只 ...
- 《Java程序员修炼之道》
原子类:java.util.concurrent.atomic 线程锁:java.util.concurrent.locks 对付死锁:boolean acquired = lock.tryLock( ...
- java程序员修炼之道——大牛告诉我们应该好好学习与修炼以下知识与技能
—————————— ASP.Net+Android+IOS开发..Net培训.期待与您交流! —————————— 一:Java语言学习(对线程(thread),串行化,反射,网络编程,JNI技术, ...
- 9本java程序员必读的书(附下载地址)
本文列出的9本书在Java程序员界都是被认为很棒的书.当一个程序员开始初学Java时,他的第一个问题应该是如何选择一本书来作为指导学习Java.这个问题也就表明,相对于其他的教程和博客,Java书籍还 ...
- Java程序员必读的9本书
本文列出的9本书在Java程序员界都是被认为很棒的书.当一个程序员开始初学Java时,他的第一个问题应该是如何选择一本书来作为指导学习Java.这个问题也就表明,相对于其他的教程和博客,Java书籍还 ...
- PHP笔记——java程序员看懂PHP程序
PHP笔记——java程序员看懂PHP程序 php是一种服务器端脚本语言,类型松散的语言. <?php ?> xml风格 <script language=”ph ...
- 前后端分离时代,Java 程序员的变与不变!
事情的起因是这样的,有个星球的小伙伴向邀请松哥在知乎上回答一个问题,原题是: 前后端分离的时代,Java后台程序员的技术建议? 松哥认真看了下这个问题,感觉对于初次接触前后端分离的小伙伴来说,可能都会 ...
随机推荐
- 【UVA】673 Parentheses Balance(栈处理表达式)
题目 题目 分析 写了个平淡无奇的栈处理表达式,在WA了5发后发现,我没处理空串,,,,(或者说鲁棒性差? 代码 #include <bits/stdc++.h> usin ...
- Oracle段高水位(HWM, high water mark)问题
Oracle对表做全表扫描的时候 ,会扫描完HWM以下的数据块.如果某个表delete(delete操作不会降低高水位)了大量数据,那么这时对表做全表扫描就会做很多无用功,扫描了一大堆数据块,最后发现 ...
- mysql数据安全一之数据恢复案例
mysql数据安全一之数据恢复案例 --chenjianwen 应用场景:适宜开启binlog 日志功能,定时备份并使用--master-data参数备份,在某个时间点丢失数据,用于数据恢复 开篇总结 ...
- React组件间信息传递方式
组件之间传递信息方式,总体可分为以下5种: 1.(父组件)向(子组件)传递信息 2.(父组件)向更深层的(子组件) 进行传递信息 >>利用(context) 3.(子组件)向(父组件)传 ...
- 关于Trunk、Hybrid、Access、Tag、Untag、Pvid的关系
一.相关定义 1.Trunk口 Trunk口上可以同时传送多个VLAN的包,一般用于交换机之间的链接. 2.Hybrid口 Hybrid口上可以同时传送多个VLAN的包,一般用于交换机之间的链接或交 ...
- 跟我一起学kafka(一)
从昨天下午接到新任务,要采集一个法院网站得所有公告,大概是需要采集这个网站得所有公告列表里得所有txt内容,txt文件里边是一件件赤裸裸得案件,记录这案由,原告被告等相关属性(不知道该叫什么就称之为属 ...
- PHP redis client封装
config1.inc.php if (!isset($_REQUEST['pageName']) || $_REQUEST['pageName'] != 'txl-app-test') { $CON ...
- 函数~匿名方法~lambda的逐渐过渡思想
前提:基于委托实现 (1)使用函数名称 delegate void Printer(string s);//(1)申明委托 static void Main(string[] args) { //(3 ...
- 解决“在上下文中找不到 owin.Environment 项”
网站发布到虚拟空间后,提示以下错误:在上下文中找不到 owin.Environment 项",百度了好长时间都没有解决.最后在web.config中添加以下配置. <system.we ...
- UNITY 模型与动画优化选项
1,RIG: Optimze Game Objects,[默认是没勾选的] 效果:将骨骼层级从模型中移除,放到动画控制器中,这样性能提高明显.实测中发现原来瞬间加载5个场景角色有点延迟,采用此选项后流 ...