读深入理解Java虚拟机有感

上大学期间最开始入门C语言,后来跟着学长学习C++,那时候被学长灌输了一些错误的观念,总觉得C++天下无敌,学好C++才是厉害的技术人,他们天天说,Java就是调用一下封装好的库,工作了就是增删改查。后来,机缘巧合下,觉得有必要学习一下Java,当时的考虑就是面向求职学习,最开始是跟着视频学习,跟着视频敲一些代码,因为有C++基础,所以Java这门高度面向对象的语言,学起来也不是那么吃力。

 

之后就学习所谓的三大框架SSH(Struts2,Spring,Hibernate),然后在网上下载了一些现成代码修修改改就认为学习了Java。大学毕业找工作时确实因为Java找到了工作,不过工作却是安卓,工作后发现自己对Java其实远远谈不上会,工作上的焦虑就逼迫自己重新去学习这方面技术,那时候属于病急乱投医阶段,各种看书,看过fk Java,Java编程思想,最后看到《深入理解Java虚拟机(第一版)》,从这本书里知道了Java字节码,coffee baby,多线程的底层解释等等,也因为这本书有了对JVM的初步理解,同时发现了Java系的伟大,因为这门开源的语言,发现了计算机方面无穷无尽的宝藏,虽然现在还是某种意义上的API程序员,但是正是这本书给我展现了Java世界的美好,才知道了学无止境,有了对技术的更高的追求。

 

通过对《深入理解Java虚拟机》的学习,对Java内存机制有了更加深入的理解,最开始只是会用,自从在App上发生了OOM异常,才发现这些都是比较有深度的知识,因为之前只是粗略的知道Java有垃圾回收机制,所以在内存上的使用也就很少考虑内存的合理分配和回收,使用的时候都是直接new出来对应的数据结构,对于使用之后的的及时回收就缺少了考虑,导致发生这种严重的问题。

 

工作中也发生过内存泄漏的问题,说到底就是生命周期短的对象被一个单例或者生命周期更长的对象引用,在这个对象不使用的时候没有被虚拟机正确的释放,另外的一种情况就是在某个对象内部使用了匿名内部类,而内部类持有了外部类的引用,这就导致如果这个内部类没有执行完毕,导致外部的对象也不能被及时回收。学习了《深入理解Java虚拟机》之后知道了释放内存的算法一些内部实现,例如其中有一个就是测算对象是否可达,如果某个对象依然被别的对象引用,那么通过Root对象到他哪里就是可达的,这时候虚拟机会认为他是被人使用的这时候就不会去释放他,反之如果从Root没有路径可以到达这个对象,那么他就有被回收的可能了,内存的垃圾回收还有一种方式是分代算法,把不同的对象标记为不同的生代区域(新生代,老年代),落入老年代的更有可能被回收,学习到这些深度的知识后再写代码的时候就会考虑到对象之间的合理引用。

 

《深入理解Java虚拟机》还让我知道了各种Java关键字的内部实现,例如interface,synchronized,private等等,有了这些基础知识的加成,写代码的时候才会知道用那些关键字更加合理,这时候写出更加健壮和合理的代码才有了基础。

 

最后,很期待《深入理解Java虚拟机》的第三版,希望可以继续给我带来不一样的惊喜。

来个合照:

2019122017150679.png

 

期待第三版的到来:

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hpYW9XMjAxNA==,size_16,color_FFFFFF,t_70

BuyBuy:

2019122017153054.png

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值