
深入理解Java虚拟机
柚子爱上花
这个作者很懒,什么都没留下…
展开
-
深入理解JVM虚拟机 内存区域
Java虚拟机运行时数据区程序计数器(线程私有) 是一个较小的内存区域,可以看做是当前线程所执行的字节码的行号指示,由于Java是多线程的,线程中断切换需要恢复执行位置,所以每个线程都需要一个独立的程序计数器来记录当前线程执行的位置。虚拟机栈(线程私有) 是Java方法执行的内存模型,生命周期和线程相同。每个方法在执行时都会创建一个栈帧,用于存储局部变量表、操作数栈、动态链接、方法...转载 2018-03-08 14:19:43 · 402 阅读 · 0 评论 -
深入理解JVM虚拟机 性能分析实战
案例1情况:选用64位的JDK,堆大小固定12GB问题:网站经常是定期,长时间失去响应,GC太长,回收12GB的堆,一次Full GC停顿14秒解决方式:1.通过64位JDK使用大内存。2.使用若干32位虚拟机建立集群使用资源。第一种:控制Full GC频率,则需要大多数对象的生存时间不应该太长。大部分对象都是 朝生夕灭,才能保证超大堆能正常使用而没有Full GC第二种:在一...转载 2018-03-16 15:13:52 · 448 阅读 · 0 评论 -
深入理解JVM虚拟机 性能监控与故障处理工具
JDK监控和故障处理 名称 描述 jps jvm process status tool,显示指定系统内所有的hotspot虚拟机进程 jstat jvm statistics monitoring tool,用于收集hotspot虚拟机各方面的运行数据 jinfo configuration info for java,显示虚拟机配置信息...转载 2018-03-17 13:48:55 · 344 阅读 · 0 评论 -
深入理解JVM虚拟机 垃圾收集和内存分配
如何确认一个对象已经死了垃圾收集器在对堆进行回收前,第一件事情就是要确认那些对象已经死了,哪些对象还活着。我们看以下几种方法引用计数算法 给对象添加一个引用计数器,当有一个地方引用它的时候,计数器+1,当引用失效的时候就-1;0表示已经不能再被使用了,需要被回收。这种效率很高,但是当遇到相互循环依赖的时候就出现问题了,Java虚拟机没有使用这种方法来管理内存。 我们来看一个例子...转载 2018-03-11 22:47:34 · 234 阅读 · 0 评论 -
深入理解JVM虚拟机 虚拟机类加载机制
类加载顺序加载验证准备解析初始化使用卸载验证、准备、解析,统称为连接。 加载、验证、准备、初始化和卸载是顺序是确定的。解析阶段不一定。出现以下5种情况需要立即“初始化”遇到new、getstatic、putstatic、invokestatic这四条指令。java场景是(1)new、(2)读取或者设置一个类的静态字段(final,已在编译器把结果放入常量池的静态...转载 2018-03-22 20:16:44 · 301 阅读 · 0 评论 -
深入理解JVM虚拟机 Java内存模型与线程
内存交互操作lock 作用于主内存的变量,把变量标识为一条线程独占的状态unlock 作用于主内存的变量,把处理锁定状态的变量释放read 作用于主内存的变量,把变量从主内存传输到线程的工作内存中load 作用于工作内存的变量,把read操作从主内存得到的变量放入工作内存的变量副本中use 作用于工作内存的变量,把工作内存的变量值传递给执行引擎assign 作用于工作内...转载 2018-04-08 16:59:17 · 214 阅读 · 0 评论 -
深入理解JVM虚拟机 线程安全与锁优化
java操作共享数据分类不可变 不可变的对象一定是线程安全的。java中基本数据类型,只要被定义为final关键字则保证了不可变的。如果是一个对象,那就需要保证对象的行为不会对其状态产生影响—-把对象中带有状态的变量都声明为final。绝对线程安全 相当严格,“不管运行时环境如何,调用者额都不需要任何额外的同步措施”。大多数都不是绝对的线程安全的。相对线程安全 我们通常意义上说的线...转载 2018-04-03 09:47:00 · 525 阅读 · 0 评论