查看内存情况命令和对JVM的讨论(极客时间)
1、解释器是把代码一行一行解释为二进制指令,编译器是把代码一次性编译为二进制指令,
对JAVA语言来说,在执行阶段区分编译和解释,但对C语言来说,在执行阶段是直接执行二进制指令,不存在编译和解释,不知道理解对吗?
嗯,c语言直接编译为机器码,并不存在虚拟机,不存在Java的部分概念
2、java垃圾回收机制!是回收不再使用的堆内存嘛;那内存泄漏,gc不会主动回收这部分内存嘛。基本正确,但不只是堆。
3、aot是编译期发生的,属于静态编译,aot是直接将字节码转换成机器码;jit是运行时,不是一码事。
4、笔记:前端编译器有javac,作用:将.java源文件编译成.class文件;后端编译器有jit编译器,
可以将字节码生成本地机器码;热点代码是指频繁运行的某个方法或者是方法块,为了优化热点代码的执行效率,使用JIT编译器将这些代码编译成机器码。
5、JIT编译器就是把运行时JVM解释执行产生的codeCache对应的热点代码,动态编译成机器码去执行。
6、观点作为参考:JAVA的jit是运行前将源码编译为字节码文件。但是jit和aot都可以将字节码编译为机器码,只是jit将一些高频代码编译,aot将所有代码编译。
7、最近,每天都在纠结要不要离职,在这家公司一年了,感觉什么提升都没有,除了获得 报酬,别的好像并没有什么收获
:问下自己 跳槽为了什么,是不是跳槽就/才能解决,如果是也不用犹豫,否则也可以发现其他选择
8、a.开发
按照java平台的语法规范,结合平台提供的三方类库和框架开发程序,
b.编译
开发完成后使用平台提供的javac工具将程序编译成.class文件,
c.加载
平台通过classloder加载编译成功的.class文件到JVM中
d.运行
在运行时,JVM使用JIT将.class文件中的二进制字节码解释或编译(根据使用频率来判断使用解释还是编译)成计算机底层能够读懂的机器代码去执行
e.回收
运行期间,通过JVM的垃圾回收,根据参数使用不同的回收方法,将不再使用的内存地址中的数据清空
f、监控,调优
在JVM运行时我们还可以通过平台提供的如:jmap,jconsole等进行监控诊断工具,程序的性能进行监控诊断,进行程序的诊断和调优工作
9、动态编译会缓存起来,适合重复使用的场景。
10、国富论中讲到,社会的分工细化起到了提高生产力的关键作用。我觉得一次编写到处运行也是社会分工的一种模式,
他使大部分业务程序员注重领域模型的逻辑设计,不必关心底层的实现,使软件工程达到了专业的人做专业的事这一个高度。虽然现在掌握一门技术远远不够,
但是对于大部分业务程序员来说,只有把精力花在最重要的地方比如领域模型的设计,才会让业务更加流畅完善。所以我觉得JVM机制蕴含了一定的经济学原理。
11、jit会缓存编译过的在codecache里:JIT能在运行时刻将字节码编译成机器码, 这样热点代码就是编译运行了
12、所有的类运行时解析之后,再次运行时还会重复解析吗?:简单说,如果没有被jit编译,是的。
13、JIT编译的热点代码是指class文件还是class文件的部分内容?:不是以class为单位,是方法级。
14、写个程序直接执行字节码就是解释执行。写个程序运行时把字节码动态翻译成机器码就是jit。
写个程序把java源代码直接翻译为机器码就是aot。造个CPU直接执行字节码,字节码就是机器码。
15、解释执行和编译执行可以类比为 同声传译 和 放录音。
16、这种基于运行分析,进行热点代码编译的设计,是因为绝大多数的程序都表现为“小部分的热点耗费了大多数的资源”吧。
只有这样才能做到,在某些场景下,一个需要跑在运行时上的语言,可以比直接编译成机器码的语言更“快”