JVM学习之札记
来源:互联网 发布:oracle索引优化 工具 编辑:程序博客网 时间:2024/05/17 01:54
1.虚拟机指令
JVM要涉及的东西太多太多,从虚指令开始都可以学习很久,我是直接跳过对于Java虚拟机指令的学习的,我想这个只要能看懂javap工具输出的指令程序。当然了重要的是明白任何一个Java操作它的背后都隐藏着若干步的虚拟机指令,所以这就让我想达到了原子化。这里当然
2.JVM板块划分
当然了JVM内部是有着很多不同区域的:
Java堆,永久代,栈空间(线程私有栈),本地方法栈(C部分的代码区域),C Heap(非Java区域的内存,JNI).
对于程序员来说只需要关注Java堆就ok,那么就来说说Java堆,Java堆里面分为Young代和Old代.
Young代:它有三个区Eden区,Survivor0和Survivor1区,Young代里的垃圾回收叫MinorGC。
Old代:普遍来说如果Survivor区域存放不下的对象会进入到Old区,我们称这个过程为”晋升“,那么如果Old区域也已经存放不下要晋升上来的对象此时
就会开始做FullGC,当然不仅仅是Old区域满的时候才做FullGC,还有很多比如永久代满的时候也会FullGC。一次FullGC会占用大量系统资源,所以会导致系统变慢,当然FullGC越多问题会越严重。
所以JVM调优的本质就是尽量不要让JVM发生FullGC,当然这也要根据具体场景来区分了,这里只是说明普遍现象。一般的做法是尽量的不要在JVM里面使用缓存,或者数据类,而是把他们从JVM分离出来,这样就会减轻JVM负担。
StackOverflowError,栈溢出,一般来说如果是死递归便会导致此问题的出现。
对于出现OOM问题的解决方案:
使用Visual VM直接对监控的JVM进程单击右键,选择“Heap Dump”,将JVM的内存dump出来,使用MAT(Memory Analyzer Tool)来导入此dump文件便可以分析出是什么类占用了大部分内存。如果不能找到到底是哪个类,那么此时使用BTrace工具来实现代码跟踪,具体使用方法百度。
- JVM学习之札记
- 学习札记:JVM的内存布局
- Java学习札记之线程
- NOSQL之Redis学习札记
- Python学习之numpy札记
- jvm学习之jvm基础
- AVR学习札记之工具选择篇
- AVR学习札记之跑马灯程序
- 《悟透JavaScript》学习札记之标准网页
- AVR学习札记之工具选择篇
- AVR学习札记之工具选择篇
- IOS之Objective-C学习札记
- 学习札记
- 学习札记
- 学习札记
- 学习札记
- JVM学习之-栈
- Java学习之JVM
- VELT-0.1.3开发: 常规参数配置
- View setAnimation之后再setVisibility不起作用
- 收集的各类学习网站
- Java知识学习储备
- kali 切换中文 && SecureCRT中文乱码
- JVM学习之札记
- Q 4.4 creates a linked list of all the nodes at each depth
- JAVA鼠标事件
- 4412开发板 DVFS camera预览性能测试
- 协议(delegate)和代理模式
- 学Python中的一个错误
- 黑马程序员-⑤核心语法(上)
- Struts标签库
- 在Linux环境下安装多处理器(SMP)核心