论坛首页 综合技术论坛

高手问答:实战Java虚拟机——JVM故障诊断与性能优化--获奖名单公布

浏览 15062 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2015-05-11   最后修改:2015-05-11
楼主口否讲讲HOTSPOT 启动过程 与底层操作系统绑定(JAVA线程与LWPS绑定)垃圾回收算法(G1,以及垃圾回收算法策略中使用不同垃圾回收算法的实际场景),以及主动上下文切换与被动上下文切换的比例来判断存在锁的竞争
0 请登录后投票
   发表时间:2015-05-11  
demoxshiroki 写道
楼主口否讲讲HOTSPOT 启动过程 与底层操作系统绑定(JAVA线程与LWPS绑定)垃圾回收算法(G1,以及垃圾回收算法策略中使用不同垃圾回收算法的实际场景),以及主动上下文切换与被动上下文切换的比例来判断存在锁的竞争


启动过程太长了,真不好描述,大致就是 读取配置文件,解析参数,初始化 堆,载入类之类的。
线程的一般是和natvie 线程 一一对应的,这个对应方式在线程的生命周期中是不会改变的。这个LWPS我也没有仔细研究过,这个好像是solaris上用的。不过我solaris没有研究过。

垃圾回收的话G1主要是为了在大堆的时候,可以减少停顿时间。因为它把内存分成了不同的区域,每次只回收一个,而不是整个。

主动上下文切换越多,表示锁竞争的可能性越大。一般认为(经验公式),如果上下文切换的比例超过了5%,则可能存在锁竞争。这个比例是指主动上下文切换上花的时间占cpu时间的比例。可以算一下。需要知道 cpu的频率、cpu的内核数量、做一次上下文切的时钟周期(一般经验值为8万个)
0 请登录后投票
   发表时间:2015-05-12  
想要提升下自己,在网上买了本Java7虚拟机规范,可是看了几章,实在看不懂(可能是自己功力不够)

虚拟机这块确实有点深,想问下楼主,菜鸟想要研究的话,有没有简单点的或者入门的书籍推荐下
0 请登录后投票
   发表时间:2015-05-12  
hae 写道
想要提升下自己,在网上买了本Java7虚拟机规范,可是看了几章,实在看不懂(可能是自己功力不够)

虚拟机这块确实有点深,想问下楼主,菜鸟想要研究的话,有没有简单点的或者入门的书籍推荐下



《实战Java虚拟机》这本书里 就专门照顾了入门的读者。可以一边动手,一边学习。
0 请登录后投票
   发表时间:2015-05-12  
一直对JVM的程序计数器不太理解,这是它的定义:字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、异常处等等;我这里有几个问题:
一.这个计数器是记录一些什么信息
二是如何工作的,能够举几个例子吗?
三。是不是类似寄存器的作用
弱弱的问一下,jvm是用c++、c语言实现的,字节码转成汇编语言,还需要这个计数器做这个类似中断作用的工作吗
0 请登录后投票
   发表时间:2015-05-12  
fqg05 写道
一直对JVM的程序计数器不太理解,这是它的定义:字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、异常处等等;我这里有几个问题:
一.这个计数器是记录一些什么信息
二是如何工作的,能够举几个例子吗?
三。是不是类似寄存器的作用
弱弱的问一下,jvm是用c++、c语言实现的,字节码转成汇编语言,还需要这个计数器做这个类似中断作用的工作吗


计数器 和一般我们说的 硬件的PC寄存器 是一个意思,保存下一个指令的地址。
比如 下面是 在字节码解释执行时,遇到goto指令 就会 这么处理:
      CASE(_goto):
      {
          int16_t offset = (int16_t)Bytes::get_Java_u2(pc + 1);
          address branch_pc = pc;
          UPDATE_PC(offset);//注意这里就是更新PC
          DO_BACKEDGE_CHECKS(offset, branch_pc);
          CONTINUE;
      }
但是在实际中,字节码不会这么解释执行(这是 很久很久以前的事情了),大部分情况可能会JIT编译。这样的话,其实都是机器码,用不到这个PC了。
0 请登录后投票
   发表时间:2015-05-14  
有这样的场景,比如我这里是一个web,我想跟踪每次请求过来,程序调用堆栈情况;我这个能打印出来吗? 类似,报异常的时候会打印出调用方法那样的
0 请登录后投票
   发表时间:2015-05-15  
fqg05 写道
有这样的场景,比如我这里是一个web,我想跟踪每次请求过来,程序调用堆栈情况;我这个能打印出来吗? 类似,报异常的时候会打印出调用方法那样的

可以 你可以在代码里改改。在你需要打印的地方 new 一个Exception 然后 调用printTrace()之类的方法
0 请登录后投票
   发表时间:2015-05-15  
最近看讲java多线程的书,讲讲进入到jvm的内存结构和指令排序里面了,一下就晕了。
我想问下,了解jvm对我编写java程序,会起到什么样的帮助呢?如果能举个简单的例子就太谢谢了。
0 请登录后投票
   发表时间:2015-05-18  
hunter0912 写道
最近看讲java多线程的书,讲讲进入到jvm的内存结构和指令排序里面了,一下就晕了。
我想问下,了解jvm对我编写java程序,会起到什么样的帮助呢?如果能举个简单的例子就太谢谢了。


了解jvm 可以让你对java的基本执行机制有一个了解。比如 多线程上 volatile的含义,和JMM模型就有一定关系。可以帮你更好的理解volatile。
此外,对于多线程中的 锁 以及在jvm中对锁的优化,可以让你写出更高效的并行程序
0 请登录后投票
论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics