架构师训练营 - 第九周 - 总结
JVM组成架构
每个环境的执行引擎会不一样;如何编写一个执行引擎呢?!
程序计数寄存器是给线程使用的;
Java字节码文件
magic code
字节码执行流程
怎么判断字节码是否编译过呢?!
类加载的双亲委托模型
加载信息存储在什么地方的呢?!
自定义类加载器
作用
隔离加载类:同一个JVM中不同组件加载同一个类的不同版本;
如何编写呢?!
扩展加载源
字节码加密:
堆 & 栈
堆中分配,栈中引用;
何为栈帧呢?结构如何?!
方法区 & 程序计数器
线程工作内存 & volatile
volatile只保证可见性,不保证线程安全性;
Java 运行环境
JVM 的垃圾回收
垃圾回收的几种办法
清理
压缩
复制
JVM分代垃圾回收
将对象分为新生代与老年代;
新生代什么时候会编程老年代呢?!
在进行垃圾回收的时候会做标记的,将部分新生代对象添加到老年代中;
JVM垃圾回收器算法
并行回收器:大数据处理中的批处理;
并发回收器CMS:HTTP请求;
G1垃圾回收内存管理机制
Java启动参数
jps
jstat
查看垃圾回收情况
jstat -gcutil [进程号] [时间间隔] [次数]
jmap
输出内存中对象的工具
jstack
jvm内的线程堆栈信息
jconsole
Java代码优化
合理并谨慎使用多线程
使用多线程的原则呢?!
竞态条件与临界区
线程安全
对象逃逸?!
思考题
Java Web应用的多线程从哪儿来的?!
Servlet是线程安全的嘛?!
ThreadLocal
Java内存泄漏
合理使用线程池和对象池
使用合适的Java容器类
Q&A
Spring MVC中controller是线程安全的?
controller是单例的;(待确认?!)
service里面如果只有DAO,那么它也是单例的,无状态的;(无状态是指什么呢?!)
反推的话,controller是无状态的;
全部是无状态的,则是面向过程的;
Java程序如何调用脚本呢?!
如何查看JVM的堆区和方法区呢?!
请简述JVM垃圾回收原理
如何标记垃圾对象?对象可达性标记
如何回收?清理、压缩、复制
如何进行分代垃圾回收呢?
三种垃圾回收算法:CMS、G1;
版权声明: 本文为 InfoQ 作者【sljoai】的原创文章。
原文链接:【http://xie.infoq.cn/article/917a92b9dedffe034266d809e】。文章转载请联系作者。
评论