jvm - jackssybin 的个人博客
jvm (8)
jvm调优(堆溢出和调优参数) 有更新!
Centos7时间和java获取时间不一致
问题描述 遇到一个问题,web显示的时间比服务器时间快12小时。Tomcat和MySQL安装在同一台服务器,系统是centos7,且服务器时间和MySQL时间一致,均是当前北京时间。 解决思路 1、在程序中使用java的函数设定时区。 2、在启动java程序时加参数-Duser.timezone=GMT+8 3、修改/etc/sysconfig/clock文件,然后重启服务。 (PS:jre是从/etc/sysconfig/clock这个文件中获取时区信息的) 附/etc/sysconfig/clock文件内容: #设置上海时区 ZONE="Asia/Shanghai" UTC=false ARC=false ## ZONE -- 时区 ## UTC -- 表明时钟设置为UTC。 ## ARC -- 仅用于alpha表明使用ARC。 4、修改MySQL连接参数 jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&useOldAliasMetadataBehavior....
java触发gc的条件和时机
1.什么时候触发GC (1)程序调用System.gc时可以触发,也不是立即触发,只是发了个通知要触发,时机由jvm自己把握 (2)系统自身来决定GC触发的时机(根据Eden区和From Space区的内存大小来决定。当内存大小不足时,则会启动GC线程并停止应用线程) GC又分为 minor GC 和 Full GC (也称为 Major GC ) Minor GC触发条件:当Eden区满时,触发Minor GC。 Full GC触发条件: a.调用System.gc时,系统建议执行Full GC,但是不必然执行 b.老年代空间不足 c.方法区空间不足 d.通过Minor GC后进入老年代的平均大小大于老年代的可用内存 e.由E....
javap分析java汇编指令 有更新!
一、javap命令简述 javap是jdk自带的反解析工具。它的作用就是根据class字节码文件,反解析出当前类对应的code区(汇编指令)、本地变量表、异常表和代码行偏移量映射表、常量池等等信息。 当然这些信息中,有些信息(如本地变量表、指令和代码行偏移量映射表、常量池中方法的参数名称等等)需要在使用javac编译成class文件时,指定参数才能输出,比如,你直接javac xx.java,就不会在生成对应的局部变量表等信息,如果你使用javac -g xx.java就可以生成所有相关信息了。如果你使用的eclipse,则默认情况下,eclipse在编译时会帮你生成局部变量表、指令和代码行偏移量映射表等信息的。 通过反编译生成的汇编代码,我们可以深入的了解java代码的工作机制。比如我们可以查看i++;这行代码实际运行时是先获取变量i的值,然后将这个值加1,最后再将加1后的值赋值给变量i。 通过局部变量表,我们可以查看局部变量的作用域范围、所在槽位等信息,甚至可以看到槽位复用等信息。 javap的用法格式: javap <options> <classes> ....
java对象不再使用时,为什么要赋值为 null
1.示例代码 我们来看看一段非常简单的代码: jvm配置参数: -verbose:gc -XX:+PrintGC public static void main(String[] args) { if (true) { byte[] placeHolder = new byte[64 * 1024 * 1024]; System.out.println(placeHolder.length / 1024); } System.gc(); } 我们在if中实例化了一个数组placeHolder,然后在if的作用域外通过System.gc();手动触发了GC,其用意是回收placeHolder,因为placeHolder已经无法访问到了。来看看输出: 65536 [GC (System.gc()) 73404K->67241K(251392K), 0.0013637 secs] [Full GC (System.gc()) 67241K->67073K(251392K), 0.0064233 secs] 本次GC后,内存占用从67241K降到了67073K。意思其实是说G....
Java虚拟机(JVM)你只要看这一篇就够了!垃圾回收器(2) 有更新!
Java虚拟机(JVM)你只要看这一篇就够了!(1)
- Java 内存区域与内存溢出异常 1.1 运行时数据区域 根据《Java 虚拟机规范(Java SE 7 版)》规定,Java 虚拟机所管理的内存如下图所示。 1.1.1 程序计数器 内存空间小,线程私有。字节码解释器工作是就是通过改变这个计数器的值来选取下一条需要执行指令的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖计数器完成 如果线程正在执行一个 Java 方法,这个计数器记录的是正在执行的虚拟机字节码指令的地址;如果正在执行的是 Native 方法,这个计数器的值则为 (Undefined)。此内存区域是唯一一个在 Java 虚拟机规范中没有规定任何 OutOfMemoryError 情况的区域。 1.1.2 Java 虚拟机栈 线程私有,生命周期和线程一致。描述的是 Java 方法执行的内存模型:每个方法在执行时都会床创建一个栈帧(Stack Frame)用于存储
局部变量表、操作数栈、动态链接、方法出口等信息。每一个方法从调用直至执行结束,就对应着一个栈帧从虚拟机栈中入栈到出栈的过程。 局部变量表:存放了编译期可知的各种基本类....