JVM
CallMeJiaGu
个人博客:https://www.callmejiagu.com/
展开
-
JVM 结构学习(图文解释)
最近看了《深入理解java虚拟机》的几章,也翻了翻大牛们的博客,在这里把知识梳理一下,方便回顾。有错误的地方,希望大家指出来。 简单的从Java栈、PC寄存器、堆、方法区、垃圾回收系统等组件来了解一个程序从运行到结束的过程中虚拟机是如何变化的。 这些组件具体用处我将用下面的实例带大家过一遍。/** * Created by jintx on 2017/7/21. */原创 2017-07-21 20:43:26 · 484 阅读 · 0 评论 -
偏向锁、轻量锁、重量锁的理解
java中每个对象都可作为锁,锁有四种级别,按照量级从轻到重分为:无锁、偏向锁、轻量级锁、重量级锁。并且锁只能升级不能降级。 在讲这三个锁之前,我先给大家讲清楚自旋和对象头的概念。 自旋 现在假设有这么一个场景:有两个线程A,B在竞争一个锁,假设A拿到了,这个时候B被挂起阻塞,一直等待A释放了锁B才得到使用权。在操作系统中阻塞和唤醒是一个耗时操作,如果A在很短的时间内就释放了锁,当这个时...原创 2018-03-04 12:59:04 · 8946 阅读 · 3 评论 -
垃圾收集器 参数总结
垃圾收集器参数总结-XX:+ 启用选项-XX:- 不启用选项-XX:= -XX:=参数描述-XX:+UseSerialGCJvm运行在Client模式下的默认值,打开此开关后,使用Serial + Serial Old的收集器组合进行内存回收-XX:+UseParNewGC打开此开关后,使用ParNew + Serial Old的收集器进行垃圾回收-XX:+UseConcMarkSweepGC使用转载 2018-01-21 11:58:24 · 618 阅读 · 0 评论 -
垃圾收集器 问题排查初体验
记得之前碰到一个问题,jvm默认情况下使用的是哪个收集器? 这个问题其实是要分情况考虑的,因为jvm会根据你PC机的配置,选择server还是client模式。 server的性能更好,所以对你机器的配置要求更高,如果是多核处理器,内存大一点就会选择server模式。 server在默认的情况下,会使用UseParallelGC(Parallel Scavenge & Parallel Ol原创 2018-01-21 12:21:50 · 377 阅读 · 0 评论 -
JVM GC垃圾回收器详解
HotSpot JVM收集器 上面有7中收集器,分为两块,上面为新生代收集器,下面是老年代收集器。如果两个收集器之间存在连线,就说明它们可以搭配使用。 Serial(串行GC)收集器 Serial收集器是一个新生代收集器,单线程执行,使用复制算法。它在进行垃圾收集时,必须暂停其他所有的工作线程(用户线程)。是Jvm client模式下默认的转载 2017-12-13 12:16:13 · 388 阅读 · 0 评论 -
JVM GC(垃圾回收)
最近看了看GC,做几张图梳理一下。方便以后回顾。有错误是地方希望能给指出。针对下面两张图,来看看对象在新生代和老年代的变化。原创 2017-07-30 13:22:32 · 575 阅读 · 0 评论 -
JVM 之 逃逸分析和TLAB
来看一道面试题:所有的new 对象都是分配在堆上的吗?如果不是,是什么情况。 在没看到这道题目的时候,我对所有对象都分配在堆上的想法是没有一丝怀疑的,但是事实是不一定的。原创 2017-10-28 15:05:26 · 920 阅读 · 1 评论 -
JVM 之 类的装载机制
看到网上有一道面试题:能不能装载自定义的 java.lang.String? 答案是否定的,我们能自定义一个java.lang.String,但是加载不进来。 我相信很多人在网上看到这样的答案“可以,但在应用的时候,需要用自己的类加载器去加载”。 这个回答是错误的,现在我们来分析一下jvm在装载一个类的时候,是如何进行的。原创 2017-10-28 12:28:02 · 1171 阅读 · 0 评论 -
JVM Finalize实现原理与代价
相信有很大一部分JAVA程序员是从C/C++开始的(在我印象里,本科必修课程没有JAVA),而JAVA在基本语义与C++保持一致的基础上,其更加面向对象,类型安全,RTTI等特性使大部分用惯了CC++的程序员对JAVA爱不释手,然而习惯于C++的程序员不可避免地会在JAVA中寻找C++的影子,其中最典型的就是析构函数问题。 我们说JAVA在基本语义与C++保持一致,并不是说C++的所有特性J转载 2017-08-03 11:35:50 · 1493 阅读 · 1 评论