Java拓展笔记JVM篇

1.jvm (java虚拟机)一处编译到处运行,兼容各种操作系统

1.1程序计数器 jvm指令 解释器 编译成2进制字节码,命令按顺序执行地址

线程私有(每个线程都有自己的计数器)

没有内存溢出

1.2 栈,线程运行需要的内存(栈内元素就是栈帧,每一个方法运行需要内存)

栈是由多个栈帧即是方法组成

每个线程只能有一个活动栈 ,对应执行当前的方法(栈顶部方法压栈操作)

(变量是否是共享的)

局部变量是私有的线程是安全

线程内存溢出内存溢出 top检查 查询进程下所有线程ps H -eo pid,tid,%cpu |grep 6622

jstack 进程号 根据线程id转16进制查询对应代码

1.3本地方法栈 Java 举例Object hashcode方式native C方法(本地运行内存空间)

1.4 堆,线程安全问题,线程共享,垃圾回收机制

堆内存溢出 jps 查看堆进程 工具jmp -heap 进程号 新创建的对象在Eden区

jconsole

jvisualvs

1.5方法区(线程共享的区)类相关信息成员方法,构造方法

方法区组成

运行时常量池指令符号地址,永久代1.8之前一个实现之后元空间,可能会抛出内存溢出异常

jdk1.6 copy堆中常量到串池中

jdk1.8 元空间

常量与串池(StringTable)关系,每定义一个常量执行完改一行代码(懒惰加载),会放入到stringTable中 hashtable结构,不能扩容。变量引用,常量不变引用,Javac 编译时从串中指向已存在的变量避免重复创建对象。字符串拼接原理1.8是Stringbuilder,编译时优化。intem方法可以将没有的字符串放入串池中。

常量字符串都在串池中,动态引用字符串都在堆中

 

2.JRE 基础类库

3.JDK基础类库+编译

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值