R057.Java面向内存编程
不等不靠,有囧有料。攻城狮,是一种精神,亦是一种品质。
从面向增删改查
到面向性能
编程,其关键一步是面向内存编程。
就像每次敲下.
时,我们会脑补NullPointerException
一样,
每个方法和类,我们都要脑补其生命周期,内存占用以及大概何时回收。
实际项目通常是师傅带徒弟,着急忙慌搞业务功能,其他基本靠框架。
在当性能出现瓶颈时,有的人会选择分布式,而我建议先关注以下,
- 写一手好代码,可读性好,内存友好(编码攻城狮)
- 调一手好参数,高吞吐,低延迟(参数攻城狮)
@史荣久 / 2017-12-24 / CC-BY-SA-3.0
观看视频
内容摘要
- 框架是专家写的且优化过。创建对象通常很廉价。
- 对象有多大(byte),多了也不那么廉价。
- 项目中比较集中的坏味道代码。
- JVM内存模型和GC特点。
- JVM启动时和GC密切相关的参数。
- 指标:MinoGC 1小时,30ms内完成。FullGC不要发生,1秒内完成。
- 自带命令工具Jstat/jmap/jstack/jinfo
- 集成mat/jprofile, 自带jvisualvm/jconsol
参考资料
- 面向GC的JAVA编程 - 酷壳
- Java内存模型 - 掘金
- Java 内存区域和GC机制 - 博客园
- jvm-memory-model
- Java对象内存占用分析
- 一个Java对象到底占用多大内存?
- JVM 命令行参数解析 - 黑客派
- 性能调优攻略 - 酷壳
- 性能测试应该怎么做? - 酷壳
- JVM系列 - redcreen的专栏
- JVM系列三:JVM参数设置、分析 - 博客园
- JVM监控与调优 - 博客园
- CMS和G1图解 - Java官方
- 性能测试应该怎么做? - 酷壳
- 《深入理解Java虚拟机》推荐阅读,简单了解,用时深追
- 酷壳/coolshell,值得多读
欢迎围观
if (you.accept(MoilionCircle.SPIRIT)) {
if(you.haveADL()){
MoilionCircle we = you.search(MoilionCircle.SLOGAN);
we.welcome(you);
}
if(you.share(this)){
We.thank(you);
We.mayFind7Moilion();
}
}
后记
垃圾回收,就像《大逃杀》或者”吃鸡游戏”。
程序员在上帝视角,不断new着各样的对象。
今天虽是平安夜,可我还是把题图弄的挺沉重。
因为临近不惑,还有众多疑惑待解,不容耽搁。
2017年12月10日,中兴42岁程序员坠楼身亡。
2017年09月07日,WePhone创始人跳楼自杀。
写代码救不了人类,或许AI可以。
题图:《垃圾围城》是北京周边的垃圾污染状况,《塑料王国》是全世界的塑料垃圾在中国处理的情况。