JVM原理初探
原理初探:
HelloWorld是如何编译运行的?
1.Javac命令是通过Java同居转换成字节码文件,因为计算机是不认识javac的只认识0101。
2.通过Java虚拟机编译字节码文件
3.再把Java字节码文件进入对应JVM
JVM组成
总结:
问题一:JVM的组成?
1.类加载子系统
2.JVM运行时数据区
3.指定引擎
在main方法中运行输出以及调用其他方法输出结果,这是由谁执行的?
可以在mian方法中进行debag调试,发现是由main()方法这个线程执行的。
问题二:那么我如果在main()方法里面调用其他方法,那么这些方法都存在哪里呢?
肯定是存放在方法区的,因为方法区是存储已经被虚拟机加载的数据
栈区主要存储局部变量(还有其他信息)方法代码都是存在方法区中的,不然每个对象都存相同的实例方法,会浪费大量内存静态方法储存在方法区,实例方法存储在堆区
JVM性能调优详解
调优原因:
遇到以下情况,就需要考虑进行JVM调优了:
-
Heap内存(老年代)持续上涨达到设置的最大内存值; (属于堆中的内存达到最大内存值)
-
Full GC 次数频繁; (垃圾回收机制,主要针对java heap)
-
GC 停顿时间过长(超过1秒); (一般加内存或者释放更多的线程)
-
应用出现OutOfMemory 等内存异常; (内存泄露与内存溢出)
内存溢出:申请内存时,没有足够的内存使用
内存泄露:无法释放已经申请的内存空间,一次性内存危害库忽略,但堆积,无论多少内存迟早被吃光
-
应用中有使用本地缓存且占用大量内存空间;
-
系统吞吐量与响应性能不高或下降。
JVM调优的基本原则(注意的)
小项目一般是不需要调优的
JVM调优是一个手段,但并不一定所有问题都可以通过JVM进行调优解决,因此,在进行JVM调优时,我们要遵循一些原则:
-
大多数的Java应用不需要进行JVM优化;
-
大多数