1.测试
在这里先通篇讲一下,一般情况下,自己写的后台项目,是肯定要用工具进行测试的,之前有讲过Jmeter可以查看qps等信息
还有别的工具,可以测死锁,内存占用情况,线程情况等:
Jconsole:JDK自带的坚持软件,UI有点丑,这里就可以检测出死锁情况
Visual VM:也是Java自带的检测软件,UI比Jconsole好看很多,这里垃圾回收情况,然后这里也有个dump线程报告
一般情况下,客户端卡是因为IO阻塞,后台这里可以搞什么限流熔断等
2.字节码技术介绍
之前android的打码文件.这里也是都是.java文件,但是编译以后的java代码都是.class文件,需要用java反编译工具,进行反编译,这样就可以看到.java代码了.
例子:之前在spring看到过有类似@config这种
在这里有一个小例子,在使用lombok框架以后
在类的上方,写到了@Getter & @Setter ,这个就是自动会给全局变量,生成get和set方法,这里使用到的就是字节码技术
同样,cglib也是使用的字节码技术,还有AOP(暂时只知道这个叫做面向切面编程)
3.具体的字节码技术
javassist和ASM都属于字节码技术
cglib就是基于ASM,javassist性能比ASM略差,但是使用比ASM简单
而javassist的性能是高于反射
javaassist的缺点:不支持一些extends,以及continue,break的表达式
4.demo
这里在讲到字节码技术的时候,用到了很多陌生的api,用api来创建.class文件,然后讲到了热部署原理,其本质上就是动态来修改.class文件,其实就是一种IO操作
之前spring书里面的讲什么"依赖注入"阿...把简单的东西讲复杂不算本事,反倒这种行为很弟弟
5.类加载器
jvm在运行代码的时候,是把.class文件加载到jvm内存中,而且这种加载行为,只会加载一次,如果你在第一次加载了以后,中途修改了.class文件,那么依然不会起到作用,所以,在实际项目中,就算修改了.class文件,也是需要重启,除非用热部署
6.题外话,几个小知识
之后肯定是要学maven的...之后再学
静态代码块是在构造方法之前创建的,静态代码块的调用与全局变量的调用顺序,是按照从上到下
Object obj = new Object(),在这里,new出来的对象,自然是放在堆内存,但是其引用obj是放在栈中的
7.热部署 & 自定义类加载器
热部署,就是我挂在服务器的代码,可以随时进行修改,而不用重启,但是这样很好性能
一般情况下,都是不会使用热部署的
在这里,热部署,就是自己写一个类加载器,然后把之前的.class文件覆盖掉,并且重新load到jvm中,原理很简单,api看起来有点长,不过这不算啥...
8.分布式配置中心
一般情况下,代码尽量不要变...而是要修改配置....
总结:
考虑到自己工作,之前后台经常出现很多bug,在后台项目写完了以后,测试,无论是性能,死锁,CPU占用率,措施,防攻击,这些测试都是要做的,这些都是很基本的东西........Jmeter测吞吐量,Visual vm测内存情况,打印日志,看程序是否稳定,无差错...没有测试就直接上的,真的不行,纯属弟弟行为...