婺源做网站,北京做兼职从哪个网站好,电子商务网站设计原理书籍,胶州网站优化价格java 如何跨平台#xff0c;如何一次编译到处执行
是由于java在不同的jvm上编译#xff0c;jvm在软件层面屏蔽不同操作系统在底层硬件与指令上的区别。
jvm 包括 new 的对象都是放在堆中 栈#xff0c;给线程单独使用#xff08;线程私有#xff09;#xff0c;存储一个…java 如何跨平台如何一次编译到处执行
是由于java在不同的jvm上编译jvm在软件层面屏蔽不同操作系统在底层硬件与指令上的区别。
jvm 包括 new 的对象都是放在堆中 栈给线程单独使用线程私有存储一个一个栈帧存储局部变量 给方法分配一个栈帧放方法自己的局部变量 一个方法对应一个栈帧内存方法结束栈帧销毁。 栈帧由 局部变量表局部变量对象的话存的是对象在堆中的内存地址还有其索引、操作数栈操作的 加载到操作数栈、动态链接把一些符号引用转换为直接引用 类名方法名都是符号引用 通过符号引用找到直接引用的位置方法的话就是方法区域的内存的地址、方法出口方法返回组成。 程序计数器线程私有马上要执行的一行代码的行号或者位置方法区的内存地址存在原因 多线程安全被另一个线程抢占了 重新回到本线程时怎么知道我执行到那里了 类通过类加载子系统 主要将类加载到方法区字节码执行引擎主要执行方法区里面的代码程序计数器的值是字节码执行引擎动态修改的。 方法区 1.8之前 持久代 永久代 1.8后元空间 存放常量静态变量类信息 本地方法栈存储 native 修饰的本地方法 非java 语言实现 字节码执行引擎 垃圾收集 Eden区满了 触发minor gc 有引用的复制到s区中的一个 其他杀掉 分代年龄大于15进入老年区 老年区满了 出发full gc 如果老年代满了垃圾无法回收 造成OOMOutOfMemoryError
调优
cmd jvisualvm(jdk 中包含的 全局配置) 监控所有线程的jvm
使用arthas
查死锁 thread -b 查线程 thread 线程好 面板 dashboard 反编译 jad 加类全名 通过arthas 修改内存变量值 ognl 命令
目的
减少STWSTOP THE WORD 停止掉整个事件在垃圾收集时会触发STW 将所有用户线程全部暂停。
为什么设置STW STW 并不好
如果不设置STW 则线程正在运行过程中触发GC时假设在GC过程中线程执行结束了所以该线程变为垃圾对象了所以造成空间浪费回收麻烦。
优化
调整各个区域的配比 尽可能在年轻代干掉垃圾 尽量不发生full gc 评估每秒的空间 什么时候进入老年代 年龄 大对象 超过幸存区50% 最大年龄对象放入老年代 eden 区如果比较大 则minio gc 消耗时间比较长 导致请求慢重复发送这个要调优 需要垃圾收集器调优 选择合适的垃圾回收器