卜娃娃|JVM内存结构和Java内存模型( 二 )


(6)-XX:+PrintGCDetails:开启GC收集日志
(7)-XX:+PrintCommandLineFlags:输出自动优化参数
(8)-XX:UseSerialGC:使用串行垃圾收集器
如何在程序运行的时候查看JVM参数?
(1)先用jps -l获取进程id
卜娃娃|JVM内存结构和Java内存模型(2)然后用jinfo -flag '参数名称' '进程id'
卜娃娃|JVM内存结构和Java内存模型查看JVM出厂参数命令:
卜娃娃|JVM内存结构和Java内存模型查看JVM根据当前运行系统默认优化后的命令:
卜娃娃|JVM内存结构和Java内存模型二、java内存模型(JMM)
(1)JMM本身是一种抽象的概念 , 描述的是一组规范 , 定义了变量的访问方式 。
(2)关于同步的规定:
1.线程解锁前 , 必须将同步变量刷新到主内存中
2.线程获取锁之后 , 必须将同步变量刷新到工作内存中
3.加锁和解锁是同一把锁 。
(3)由于JVM运行程序的主体是线程 , 而每个线程创建的时候都会有一个工作内存(栈) , 工作内存是线程的私有数据区域 , 而java内存模型中规定所有变量都存储在主内存(线程共享区域) , 但线程对变量的操作必须是在工作内存中完成 , 首先要把变量从主内存中拷贝到工作内存中 , 再对变量进行操作 , 操作完成再将变量写回到主内存中 。 不能直接操作主内存中的变量 。
(4)可见性 , 原子性(不可分割 , 例如某个线程正在做某个业务的时候 , 中间不可以被加塞 。 需要整体完整 , 要么同时成功 , 要么同时失败 。 ) , 有序性 。
卜娃娃|JVM内存结构和Java内存模型


推荐阅读