jvm优化
那些年的代码
Java工作者
展开
-
JVM逃逸分析对性能的影响
逃逸分析的基本行为就是分析对象动态作用域:当一个对象在方法中被定义后,它可能被外部方法所引用,称为方法逃逸。甚至还有可能被外部线程访问到,譬如赋值给类变量或可以在其他线程中访问的实例变量,称为线程逃逸。方法逃逸的几种方式如下:public class EscapeTest { public static Object obj; public void globalVariabl...原创 2020-04-20 08:55:48 · 126 阅读 · 0 评论 -
VM options
Java VM 常用设置记录-Xms256m -Xmx256m -XX:MaxNewSize=256m -XX:MaxPermSize=256m原创 2020-04-06 08:57:20 · 530 阅读 · 0 评论 -
新生代Eden与两个Survivor区的解释
1.为什么会有年轻代我们先来屡屡,为什么需要把堆分代?不分代不能完成他所做的事情么?其实不分代完全可以,分代的唯一理由就是优化GC性能。你先想想,如果没有分代,那我们所有的对象都在一块,GC的时候我们要找到哪些对象没用,这样就会对堆的所有区域进行扫描。而我们的很多对象都是朝生夕死的,如果分代的话,我们把新创建的对象放到某一地方,当GC的时候先把这块存“朝生夕死”对象的区域进行回收,这样就会腾出...原创 2020-04-02 18:22:59 · 504 阅读 · 0 评论 -
JVM的内存结构,Eden和Survivor的比例
Eden区是一块,Survivor区是两块。Eden区和Survivor区的比例是8:1:1JVM内存的结构为堆:存放对象栈:运行时存放栈帧程序计数器方法区:存放类和常量Jdk 1.8之后好像取消了方法区,直接将永久代放到了本地内存里面。...原创 2020-04-02 18:06:48 · 2142 阅读 · 2 评论 -
jvm垃圾回收之复制算法——为什么分两块Survivor空间
复制算法的两块Survivor空间概述在《深入理解Java虚拟机》这本书中,对复制算法有一段这样的介绍:现在的商业虚拟机大多采用复制算法来收集新生代。复制算法将内存分为一块较大的Eden空间和两块较小的Survivor空间,每次使用Eden和其中一块Survivor空间,当回收时,将Eden和Survivor中还存活的对象复制到另一块Survivor上,最后清理掉Eden和刚才...原创 2020-03-27 16:54:30 · 437 阅读 · 1 评论 -
GC roots
1.虚拟机栈(本地变量表)引用的对象2.方法区静态属性引用的对象3.方法区常量引用的对象4.本地方法栈JNI(一般指naive方法)中引用的对象常说的GC(Garbage Collector) roots,特指的是垃圾收集器(Garbage Collector)的对象,GC会收集那些不是GC roots且没有被GC roots引用的对象。一个对象可以属于多个root...原创 2020-03-26 18:04:33 · 264 阅读 · 0 评论 -
说下Java堆空间结构,及常用的jvm内存分析命令和工具
Java堆空间结构图:http://www.cnblogs.com/SaraMoring/p/5713732.htmlJVM内存状况查看方法和分析工具:http://blog.csdn.net/neosmith/article/details/47753733原创 2019-06-11 12:19:23 · 184 阅读 · 0 评论 -
Java内存模型及性能优化
最近在做一个项目的性能优化,遇到好多以前没有关注过的性能问题,一头雾水,今天做个笔记,简单记录下JVM相关的参数设置。一、JVM内存模型首先介绍下Java程序具体执行的过程:Java源代码文件(.java后缀)会被Java编译器编译为字节码文件(.class后缀); 由JVM中的类加载器加载各个类的字节码文件,加载完毕之后,交由JVM执行引擎执行; 在整个程序执行过程中,JVM会用一...原创 2019-06-30 17:29:57 · 136 阅读 · 0 评论 -
JVM内存模型与GC算法
1.JVM内存模型JVM内存模型如上图,需要声明一点,这是《Java虚拟机规范(Java SE 7版)》规定的内容,实际区域由各JVM自己实现,所以可能略有不同。以下对各区域进行简短说明。1.1程序计数器 程序计数器是众多编程语言都共有的一部分,作用是标示下一条需要执行的指令的位置,分支、循环、跳转、异常处理、线程恢复等基础功能都是依赖程序计数器完成的。 对于Java的多线...原创 2019-06-30 18:05:58 · 92 阅读 · 0 评论