实战
上进唯实战可得,突破绝技成长瓶颈
手记
分享经验交流心得,学习前沿流行技术
-
JVM的方法区和永久带是什么关系?
群里面有小伙伴问到这个问题,说在网上看了很多文章,但是还是没弄明白这俩是啥关系,下面我们就来详细的解释一下:什么是方法区?方法区(Method Area)是jvm规范里面的运行时数据区的一个组成部分,jvm规范中的运行时数据区还包含了:pc寄存器、虚拟机栈、堆、方法区、运行时常量池、本地方法栈。方法区存储东西?主要用来存储class、运行时常量池、字段、方法、代码、JIT代码等。注意:(1)运行时数据区跟内存不是一个概念。(2)方法区是运行时数据区的一部分(3)方法区是jvm规范中的一部分,并不是实际的实现,切忌将规范跟实现混为一谈。我们再来看下永久带(Perm区):永久带又叫Perm区,只存在于hotspot jvm中,并且只存在于jdk7和之前的版本中,jdk8中已经彻底移除了永久带,jdk8中引入了一个新的内存区域叫metaspace。(1)并不是所有的jvm中都有永久带,ibm的j9,oracle的JRocket都没有永久带。(2)永久带是实现层面的东西。(3)永久带里面存的东西基本上就是方法区规定
5660浏览
6推荐
1评论
-
Java中for(;;)和while(true)有啥区别?
群里面有小伙伴提了个问题,说在看并发源码的时候,很多时候源码中都使用for(;;)而不是使用while(true),这两个有什么区别吗?这种问题,在java里面,最简单有效的办法就是打印字节码看一下,javap再次华丽丽的登场:字节码一模一样,能有啥区别?因此,在java里面,就看个人的爱好了,二者没区别!更过关于java字节码的内容可以观看我的一个视频课程:Java生产环境下性能监控与调优详解为啥网上有的文章说二者有区别呢?因为那是在C语言中!在C语言中, while(1)在编译后:mov eax,1 test eax,eax je foo+23h jmp foo+18hfor(;;)在编译后:mp foo+23h这里的区别就非常明显了,for(;;)在c语言中指令较少,也能够节省内存,没有判断跳转,是比while(1)更好的无限循环。C编译后的指令参考:https://blog.csdn.net/baidu_
7093浏览
3推荐
0评论
-
java并发编程之wait&notify VS lock&condition
jdk5之前线程同步可以用synchronized/wait/notify来进行控制,jdk5以后新添加了lock/condition。他们之间有什么联系与区别的?本文就用一个例子循序渐进的给大家展示一下:首先来看一个有界缓存的例子:abstract class BaseBoundedBuffer<V> { private final V[] buff; private int tail; private int head; private int count; protected BaseBoundedBuffer(int capacity){ this.buff = (V[])new Object[capacity]; } protected synchronized final void doPut(V v){//存 buff[tail] = v; tail++; if(
4331浏览
12推荐
0评论
-
java里面i++与++i到底哪一种写法的效率高?
首先我们来看一段简单的代码:f1()和f2()唯一的区别在于:f1()使用的i++,而f2()使用的++i。那么这两种情况之下,哪一种写法的效率高呢?单纯从源码层面我们是看不出来到底是哪一种效率高的,但是我们可以用javap打印一下字节码,然后再来看,命令行执行:javap -verbose SelfAdd.class我们截取两个方法的字节码:从字节码我们就可以很明显的看出来,这两种循环的写法的效率是一样的,并不存在一个比另一个高的情况。结论:很多源码层面看不出来的问题,到了字节码层面会看的非常的清楚。类似的还有:自动拆装箱、String用+做字符串拼接,如果学会了看字节码就能很容易明白背后的原理了。再给大家举一个例子,你能一眼就看出来下面这段代码的输出结果吗,为什么呢?最后,在《Java生产环境性能监控与调优详解》这门课中还讲了一些其他的好玩的例子,欢迎大家观看。
3344浏览
5推荐
1评论
-
Java中如何做GC调优?
首先要明确以下几个东西:(1)评价GC性能的指标有哪些?一个是吞吐量,另一个是最大停顿时间。什么叫吞吐量?GC里面的吞吐量说的是cpu花在垃圾回收的时间和花在应用程序上的时间的占比。什么叫最大停顿时间?就是中断应用程序来做垃圾回收的应用停顿时间。(2)常用的GC有哪些?GC分为3大类:serial 、 parallel、concurrent(CMS、G1)。parallel和concurrent是什么意思?parallel又叫吞吐量优先的收集器,它的意思是说:多个GC线程并行,但是GC线程与应用线程不是并行。concurrent又叫响应时间优先的收集器,它是说GC线程可以和应用线程并行执行。CMS和G1都是concurrent的垃圾收集器,JDK9里面G1已经是默认的垃圾收集器了。(3)不同GC的日志格式是啥样的?每一种GC的日志格式都是不一样的。(4)如何做GC调优?一般就是通过日志分析工具,分析GC的日志,来得出前面说的2个性能指标的数值,然后通过日志查找出现FullGC的原因,主要的原则就是消灭Ful
3570浏览
1推荐
0评论
-
《Java生产环境下性能监控与调优》课程的参考文档链接
课程《Java生产环境下性能监控与调优》第二章jdk8工具集https://docs.oracle.com/javase/8/docs/technotes/tools/unix/index.htmlTroubleshootinghttps://docs.oracle.com/javase/8/docs/technotes/guides/troubleshoot/jpshttps://docs.oracle.com/javase/8/docs/technotes/tools/unix/jps.htmljinfohttps://docs.oracle.com/javase/8/docs/technotes/tools/unix/jinfo.htmljstathttps://docs.oracle.com/javase/8/docs/technotes/tools/unix/jstat.htmljmap:https://docs.oracle.com/javase/8/docs/technotes/tools/u
4112浏览
9推荐
0评论
-
面试回答问题的小套路
先把结论抛出来,如果感觉有道理就继续往下看,如果不认同就省了浪费时间了:(1)面试回答问题不是做选择题,更不是做判断题,面试回答的问题全都是需要展开回答的作文题;(2)要引导面试官往你自己会的题目上问问题,切忌就问题回答问题;(3)首先要分析问题,然后再提出解决的方案。 举一个栗子 问:单例模式哪一种实现效率高? 错误的回答:静态内部类延迟加载效率高,或者:DCL效率高。 正确的回答:单例模式有很多种实现方式,第一种是直接new一个单例做为类的static成员,这种方式
8756浏览
48推荐
2评论