
JVM
HackerDotCn
If not me, who?
If not now, when?
If I can, why not?
展开
-
JVM:调优
https://www.cnblogs.com/rainy-shurun/p/5830455.html原创 2017-12-11 23:21:10 · 194 阅读 · 0 评论 -
Java JVM 0: Basic
我们常说的JVM一般指的Sun的HotSpot VM,其具备热点探测功能,可将一个被频繁调用的方法或代码块标记为“热点代码”,然后通过内置的JIT(Just In Time Compiler)编译为本地机器指令。 除了HotSpot,市面上还有IBM J9VM,各大linux发行版预装的openjdk等,Java在中国最大的用户淘宝有基于openjdk深度定制的TaobaoVM,改写了大量的Hot原创 2017-12-06 21:49:19 · 239 阅读 · 0 评论 -
Java JVM 5: 认识OOM
OutOfMemoryError对于Java猿们来说自然不陌生,但工作中真碰到这样的问题未免头大,那为什么会内存溢出?碰到这样的问题该怎么办?下面简单探讨。 众所周知,Java数据区包括栈、堆、方法区(直接内存),堆是用来放对象的,栈是用来放线程私有的,而方法区是存放类信息的,那么根据Java内存区域不同可以将OOM原因大致分为:堆溢出一般来说大部分Java的内存溢出应该属于这种情况,程序分配大量原创 2017-12-04 21:54:47 · 291 阅读 · 0 评论 -
Java JVM 4: JMM
Java内存模型、指令重排等等 https://tech.meituan.com/java-memory-reordering.html原创 2017-11-20 19:59:04 · 276 阅读 · 0 评论 -
Java JVM 2: 锁优化
JVM对锁的优化:偏向锁 使用-XX:+UseBiasedLocking参数开启,在竞争激烈的场合下意义不大,大量竞争会导致持有锁的线程不停的切换,锁很难保持在偏向模式。轻量级锁自旋锁 线程没有取得锁时不被挂起,执行一个空循环(即所谓自旋)。 对于锁占用时间短的并发线程有益,对于单线程锁占用时间长的并发程序造成资源浪费。锁消除锁膨胀原创 2017-11-17 16:48:29 · 234 阅读 · 0 评论 -
Java JVM 3: ClassLoading&Initialization
C/C++语言的编译时就要完成连接工作,而在Java里类的加载、连接、初始化都是在程序运行期间完成,在稍稍增加性能开销的同时极大的提高了Java的灵活性。我们知道,编写一个面向接口的程序,可以等到运行时指定其具体的实现类。这就依赖于Java运行时动态加载和动态链接的特性。Java中类的生命周期如下图所示: Java类生命周期 其中,加载、验证、准备、初始化和卸载的开始顺序(仅仅指开始原创 2017-11-02 22:10:32 · 251 阅读 · 0 评论 -
Java JVM 1: 常用GC与参数
垃圾收集器串行(Serial)回收器新生代串行回收器:复制算法 老年代串行回收器:标记整理算法 特点:单线程,”Stop-The-World”,用户体验差但是技术成熟,适合单CPU等硬件性能较差的场合。 参数:-XX:+UseSerialGC制定使用新生代串行回收器和老年代串行回收器。并行(Parallel)回收器新生代ParNew回收器:只是将串行回收器多线程化,回收策略和算法等方面类似串行原创 2017-09-25 06:30:29 · 440 阅读 · 0 评论