JVM学习

什么是java虚拟机?

虚拟机是一种抽象化的计算机,通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java虚拟机有自己完善的硬体架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。Java虚拟机屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。简单来说JVM是用来解析和运行Java程序的。

java虚拟机的好处?

java可以跨平台运行最主要的原因就是因为有java虚拟机,同时jvm可以屏蔽系统差异发明一些新的语言就可以使用jvm来完成。这样就做到了《一次编译到处运行》的特点。

2、JVM中内存区域的划分
要想知道JVM中内存区域的划分,拿首先就要知道JVM中的内存区域从什么地方来,JVM中的内存是JVM向操作系统中申请一块内存,在针对这个内存划分一个区域。

堆(运行时常量池)    new的对象就会放在堆中
方法区    加载好的类放在方法区,静态成员
栈(JVM栈和本地方法栈)    局部变量
程序计数器    
存储的是地址描述的是当前线程接下来

要执行的指令在什么地方

 注意:一个进程中存在多个线程,每个线程中都存在自己的栈和程序程序计数器,一个进程中共用一个堆和一个方法区。

判断一个变量是在堆上还是在栈上,和这个变量是基础类型还是引用类型没有关系,和这个变量是局部变量、静态变量还是成员变量有关。

存储已被虚拟机加载的类信息。jdk8的JVM不再有永久代(PermGen),原永久代存储的信息被分成两部分: 1、虚拟机加载的类信息(放在元空间) 2、运行时常量池(放在堆中)

1.频繁GC的原因:
(1)人为原因
例如在代码中调用System#GC或者Runtime#GC方法。

(2)框架原因
在java程序调用相关框架时,框架内部调用了GC方法。

(3)内存原因
当heap大小设置比较小时,会引起频繁的GC,所以在类似于Spark这样对内存性能要求比较高的应用程序运行时,应可能给heap分配较大的内存,这样可以减少频繁的GC现象的发生。

(4)其他原因
当构建的对象实例化十分频繁并且释放该对象也较为频繁时,同样会产生频繁GC现象。

& Scala是一种面向函数式和面向对象相结合的编程语言。从面向函数式编程风格来说,创建的对象一般都是不可变的。这样就给内存的管理带来了极大的好处,避免由于对象频繁的改变而造成的GC。同时,不可变对象也可以在代码中被其他函数复用。

& 对用复用来说,是一把双刃剑。复用即通过缓存对对象进行使用。Cache级别的对象,若是其缓存命中很高时,此时应尽量复用这些对象。若cache命中率不高时,此时既占用内存,又会消耗IO、CPU等内存等资源。

& 一般来说,进行GC时,保证heap 50%的剩余空间,相对来说是比较合适的。并且需要统计缓存命中率的问题,其命中率越高越好。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值