博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JVM及反射
阅读量:4538 次
发布时间:2019-06-08

本文共 3721 字,大约阅读时间需要 12 分钟。

VM

java virtual machine.sandbox

本地方法栈

程序计数器

栈区:push/pop

堆区:为线程共享,内放对象和数组,

方法区:为线程共享

线程:是进程内并发执行的代码段, 一个线程就是一栈,栈内压入的方法帧

绿色的共享的

dll(windows)

dynamic link library,动态链接库函数库 + 资源.

so(linux)

shared object,共享对象

*.java ---> *.class --> ClassLoader

//类类,类的描述符 Class clazz = Person.class ;

new Person();

OOM

Outof memory,内存溢出.

www.StackOverflow.com //解决问题的网址,多去浏览

Runtime data area

1.Method area    方法区.    存放类描述符.    Class只需加载一次。    扩容.    maven    共享。    Class.forName("");2.heap    堆区.    存放对象和数组的地方。    在所有线程间共享3.java stack    每个线程对应一个栈。    每个进程至少有个一个线程(主线程).    method frame(stack frame).4.native method stack    native方法。5.program conter register    略.

java内存由堆和非堆合成

java堆

heap    :   存放对象和数组1、(yong generation):年轻代        eden:伊甸区:对象创建所在,垃圾回收先去该区回收;        survivor-1(幸存1区):同一时刻和幸存2区只有一个是空的        survivor-2(幸存2区):2、(old generation):年老代non-heap:   非堆 (metaspace+code cache+compressed class space),方法区属于该部分off-heap:   离堆:jvm之外的内存(unsafe)

可通过jvisualvm来查看这些分区

通过jdk自带jvisualvm软件考察

1.cmd>jvisualvm2.安装visualgc的插件    工具菜单 --> 插件 -> visual gc ->安装.

jconsole

jmap

1.查看堆信息    jmap -heap 195242.查看永久区    jmap -permstat 195243.查看类加载信息    jmap -clstats 19524

JVM调优

-Xms            //堆初始值  1/64( < 1G)-Xmx            //堆最大值  1/4 ( < 1G)-Xmn            //年轻代(eden + s0 + s1),-Xmn150M-XX:NewSize     //for 1.3/1.4/1.8,设置年轻带大小                //-XX:NewSize=150m                //优先级 > NewRatio.-XX:MaxNewSize  //for 1.3/1.4/1.8,设置年轻带大小最大值-XX:PermSize    //设置永久代值,1.8移除了该属性                //-XX:PermSize=150m-XX:MaxPermSize //设置永久代值最大值                //-XX:MaxPermSize=150m-XX:MetaspaceSize=2048m-XX:MaxMetaspaceSize=2048m-XX:CompressedClassSpaceSize=2048m      //***** 设置1.8的meta区 *****-Xss            //栈空间-XX:NewRatio    //年轻代和年老代的比例,-XX:NewRation=n,                //代表 年轻代 : 年老代 = 1 : n                //-XX:NewRatio=2                //-XX:NewRatio=0.5,错误的,不能指定小数。-XX:SurvivorRatio   //设置,单个幸存区 : 伊甸区 = 1 : n                     //-XX:SurvivorRatio=2,

堆设置

-Xms :初始堆大小

-Xmx :最大堆大小

-XX:NewSize=n :设置年轻代大小

-XX:NewRatio=n: 设置年轻代和年老代的比值。如:为3,表示年轻代与年老代比值为1:3,年轻代占整个年轻代年老代和的1/4

-XX:SurvivorRatio=n :年轻代中Eden区与两个Survivor区的比值。注意Survivor区有两个。如:3,表示Eden:Survivor=3:2,一个Survivor区占整个年轻代的1/5

-XX:MaxPermSize=n :设置持久代大小

收集器设置

-XX:+UseSerialGC :设置串行收集器

-XX:+UseParallelGC :设置并行收集器

-XX:+UseParalledlOldGC :设置并行年老代收集器

-XX:+UseConcMarkSweepGC :设置并发收集器

垃圾回收统计信息

-XX:+PrintGC

-XX:+PrintGCDetails

-XX:+PrintGCTimeStamps

-Xloggc:filename

并行收集器设置

-XX:ParallelGCThreads=n :设置并行收集器收集时使用的CPU数。并行收集线程数。

-XX:MaxGCPauseMillis=n :设置并行收集最大暂停时间

-XX:GCTimeRatio=n :设置垃圾回收时间占程序运行时间的百分比。公式为1/(1+n)

并发收集器设置

-XX:+CMSIncrementalMode :设置为增量模式。适用于单CPU情况。

-XX:ParallelGCThreads=n :设置并发收集器年轻代收集方式为并行收集时,使用的CPU数。并行收集线程数。

old   : 133.5Myoung : 8  + 8 + 50.5 = 66.5Myoung : old  = 1 : 2        //eden : survivor = 3 : 1     //

ClassLoader加载

1.转换类名到location,定位class文件。2.类加载方法:通过-cp拿到路径,通过解析出的类映射到层次结构,找到字节码文件,加载进去3.

Map :

x instanceof Person ;           //模糊判断.getClass() == Person.class ;    //精准判断

反射

动态访问对象的属性和方法。Person p = new Person();p.setName("xxx");p.getName();1.Class    类的描述符.    描述类的特征。    Person.class ;    Class clazz = Class.forName();    Class clazz = Xxx.class()    Class clazz = obj.getClass();    //通过Class动态创建对象    Class clazz=Class.forName("xxxx");    Object obj=clazz.new Instance();2.Method    方法.    方法描述符。    //得到类中声明的方法(private + public + protected)    Method m = clazz.getDeclaredMethod("name",String.class);    //得到所可用的方法(继承的方法)·    Method m = clazz.getMethod("name",...);    //把私有方法定义为可用    m.setAccessible(true);3.Field    字段。    字段描述符.    Field f = clazz.getField("name");    Field f = clazz.getDeclaredField("name");    f.setAccessible();4.Constructor    构造函数描述符.    clazz.getConstructor(Class...)

转载于:https://www.cnblogs.com/yihaifutai/p/6783387.html

你可能感兴趣的文章
ASP.NET Razor 视图引擎编程参考
查看>>
Vue 基础篇
查看>>
malloc_free_new_delete
查看>>
Python中的open和codecs.open
查看>>
开发Servlet的方法(2)
查看>>
asp.net mvc 伪静态添加
查看>>
EA类图与代码同步
查看>>
Android Studio 智能感知无效
查看>>
javascript 日常
查看>>
让插件帮你优化代码
查看>>
ng 动态的生成option。
查看>>
ORACLE-12C-RAC INSTALL
查看>>
自定义引用类型的Enumerable.Union调用(原创)
查看>>
抽象类实例
查看>>
react context prop-types
查看>>
Java之路——Java初接触
查看>>
2018.12.27学习JavaScript
查看>>
Cocoa编程开发者手册
查看>>
C++框架_之Qt的开始部分_概述_安装_创建项目_快捷键等一系列注意细节
查看>>
理工之 A+B Problem III
查看>>