jvm 宕机 打印jvm

总览

Java中最常见的陷阱之一就是知道如何打印数组。 如果有关如何打印阵列的答案获得了超过1000票赞成票,那么您必须怀疑是否有更简单的方法。 几乎所有其他流行语言都具有这种更简单的方法,所以我不清楚为什么Java仍会这样做。

与其他JDK类不同,数组没有特别健全的toString(),因为它是从Object继承的。

它打印类型和地址吗?

实际上,它不打印地址,只是看起来像一个地址一样。 它打印类型的内部表示形式以及对象的hashCode() 。 由于所有数组都是对象,因此它们具有hashCode()和类型以及同步锁,而对象具有的其他所有内容,但是没有特定于数组的方法。 这就是为什么toString()对数组没有用的原因。

看起来没有什么变化?

如果我运行以下程序。

public class ObjectTest {boolean[] booleans = {true, false};byte[] bytes = {1, 2, 3};char[] chars = "Hello World".toCharArray();short[] shorts = {111, 222, 333};float[] floats = {1.0f, 2.2f, 3.33f, 44.44f, 55.555f, 666.666f};int[] ints = {1, 22, 333, 4_444, 55_555, 666_666};double[] doubles = {Math.PI, Math.E};long[] longs = {System.currentTimeMillis(), System.nanoTime()};String[] words = "The quick brown fox jumps over the lazy dog".split(" ");@Testpublic void testToString() throws IllegalAccessException {Map<String, Object> arrays = new LinkedHashMap<>();for(Field f : getClass().getDeclaredFields())arrays.put(f.getName(), f.get(this));arrays.entrySet().forEach(System.out::println);}
}

它打印。

booleans=[Z@277c0f21
bytes=[B@6073f712
chars=[C@43556938
shorts=[S@3d04a311
floats=[F@7a46a697
ints=[I@5f205aa
doubles=[D@6d86b085
longs=[J@75828a0f
words=[Ljava.lang.String;@3abfe836

我认为这对每个人都是显而易见的。 O_O喜欢的事实,J是一个翁内部码和L为的J ava类的内部码。 当b未使用时, Z也是布尔值的代码。

我们对于它可以做些什么呢?

在此程序中,我们最终不得不编写一个特殊的toString方法,以供需要通过打印Map.Entry的特殊方法调用对象时使用。 重复此操作多次可以提高程序的吞吐量,并且避免在Java中使用数组很容易,因为它们很难调试。

黑客JVM呢?

我们可以做的就是更改Object.toString()。 我们必须更改此类,因为它是我们有权访问的数组的唯一父级。 我们无法更改数组的代码,因为它是JVM内部的。 例如,对于所有byte []特定方法,没有byte [] Java类文件。

取得java.lang.Object的源代码副本,并将toString()替换为

public String toString() {if (this instanceof boolean[])return Arrays.toString((boolean[]) this);if (this instanceof byte[])return Arrays.toString((byte[]) this);if (this instanceof short[])return Arrays.toString((short[]) this);if (this instanceof char[])return Arrays.toString((char[]) this);if (this instanceof int[])return Arrays.toString((int[]) this);if (this instanceof long[])return Arrays.toString((long[]) this);if (this instanceof float[])return Arrays.toString((float[]) this);if (this instanceof double[])return Arrays.toString((double[]) this);if (this instanceof Object[])return Arrays.deepToString((Object[]) this);return getClass().getName() + "@" + Integer.toHexString(hashCode());}

在Java <= 8中,我们可以通过添加到命令行将此类添加到bootclasspath的开头

-Xbootclasspath/p:target/classes

(或您的类已编译到的任何位置),现在当我们运行程序时,我们看到

booleans=[true, false]
bytes=[1, 2, 3]
chars=[H, e, l, l, o,  , W, o, r, l, d]
shorts=[111, 222, 333]
floats=[1.0, 2.2, 3.33, 44.44, 55.555, 666.666]
ints=[1, 22, 333, 4444, 55555, 666666]
doubles=[3.141592653589793, 2.718281828459045]
longs=[1457629893500, 1707696453284240]
words=[The, quick, brown, fox, jumps, over, the, lazy, dog]

就像您使用其他任何语言一样。

结论

虽然这是一个很酷的技巧,但是最好的解决方案是他们最终修复Java,以便为数组生成合理的输出。 它知道您需要一个并提供了它,但是将其隐藏在您必须通过Google查找的类中,以便每个新的Java开发人员在第一次尝试使用数组时都必须拥有一个WTF时刻。

翻译自: https://www.javacodegeeks.com/2016/03/printing-arrays-hacking-jvm.html

jvm 宕机 打印jvm

jvm 宕机 打印jvm_通过入侵JVM打印阵列相关推荐

  1. java 宕机_Java应用/JVM宕机排查步骤操作

    相信大家都遇到过,自己的Java应用运行一段时间就宕机了或者响应请求特别慢.这时候就需要我们了来找出问题所在了.绝大部分都是代码问题导致的. 一.服务宕机 如果是服务宕机,发生致命问题导致进程已经死掉 ...

  2. linux线程引起jvm崩溃,JVM宕机分析

    1.可以引发JVM崩溃的常见缘由有:linux 线程阻塞数据库 CPU 使用率太高服务器 JVM Crash工具 堆内存不足google 类装载spa Java虚拟机自身的Bug操作系统 JDK与服务 ...

  3. JVM宕机问题排查,产生hs_err_pidpid.log与replay_pidpid.log日志

    另一个案例(也比较完善)参考:https://blog.csdn.net/chenssy/article/details/78271744 oracle官方文档: https://www.oracle ...

  4. 【甘道夫】HBase随机宕机事件处理 JVM GC回顾

    一.引言 本文记录了困扰团队两周的HBase随机宕机事件的解决方案,并回顾了JVM GC调优基础知识,供各位参考. 欢迎转载,请注明出处: http://blog.csdn.net/u01096738 ...

  5. java 内存溢出时打印_如何在JVM内存溢出的时候自动dump内存快照

    解决OOM问题的一个初步思路 首先第一个问题,假设发生OOM了,必然说明系统中某个区域的对象太多了,塞满了那个区域,而且一定是无法回收掉那些对象,最终才会导致内存溢出的. 既然是这个思路,要解决OOM ...

  6. 入侵JVM?Java Agent原理浅析和实践(上)

    声明:本文首发于京东零售技术公众号,为博主本人撰写投稿. 前言: 在平时的开发中,我们不可避免的会使用到Debug工具,JVM作为一个单独的进程,我们使用的Debug工具可以获取JVM运行时的相关的信 ...

  7. Java内存泄漏、性能优化、宕机死锁的N种姿势

    导读 本文介绍Java诸多优化实例:第一,排查堆上.堆外内存泄露:第二,使用arthas.jaeger.tcpdump.jstack做性能优化:第三,排查进程异常退出的原因,如被杀.System.ex ...

  8. IBM WebSphere Portal宕机或性能低常见问题分析 及解决措施

    使用IBM WebSphere Portal构建企业门户系统是用户比较睿智的一个选择,但是由于Portal产品比较复杂,宕机或性能低也通常是用户较为头疼的问题.经常有客户门户上线后出现页面空白或无法访 ...

  9. HBase问题诊断 – RegionServer宕机

    本来静谧的晚上,吃着葡萄干看着球赛,何等惬意.可偏偏一条报警短信如闪电一般打破了夜晚的宁静,线上集群一台RS宕了!于是倏地从床上坐起来,看了看监控,瞬间惊呆了:单台机器的读写吞吐量竟然达到了5w op ...

最新文章

  1. java集成网站微信,微博,qq登录
  2. httpservletrequest和requestbody是否可以同时使用_净水器超过三天没用,是否可以直接使用?...
  3. 概览屏幕(最新动态屏幕、最近任务列表)
  4. java 矩阵求逆_java实现的顺时针/逆时针打印矩阵操作示例
  5. mysql 迭代更新_MySQL、MongoDB、Redis 数据库之间的区别与使用(本章迭代更新)
  6. processon.com - 在线团队协作软件(草巾冒小子)推荐 - 资源篇
  7. Python 字符编码 b
  8. Atitit 软件开发中的艾提拉思想与理念总结 后端优先 手机优先 做好政治动员 高层抽象 一定要出理论结果书籍总结 技术就是艺术 三个软件层次的划分 实现层 规划层 艺术层 无限生
  9. Mysql JSON对象和JSON数组查询
  10. 2021金九银十面试季!java开发微信公众号图片上传功能
  11. jBox----弹出层插件
  12. CSS 圆形图片,类似头像形状。
  13. HBuilder/HBuilderX真机运行、手机运行、真机联调常见问题
  14. Python爬取动态网页实例讲解
  15. python 是否可以一键修图_一键修图功能强大吗?想知道哪个软件比较好用?
  16. 数据结构与算法基础Day1
  17. 基于FPGA的一维卷积神经网络CNN的实现(二)资源分配
  18. 408计算机组成原理有哪几题,2019考研408计算机组成原理选择题及答案(3)
  19. Tensorflow一些常用基本概念与函数(2)
  20. maven-pom文件dependence标签

热门文章

  1. CF1100F Ivan and Burgers(线性基)
  2. 猜数(二分、线段树)
  3. P3911-最小公倍数之和【莫比乌斯反演】
  4. P3287-[SCOI2014]方伯伯的玉米田【二维树状数组,dp】
  5. ssl1626-花店橱窗布置【日常dp】
  6. 【差分】Tallest Cow(poj 3263/luogu 2879)
  7. P4445 最长回文串
  8. 2017西安交大ACM小学期数据结构 [分块,区间修改,单点查询]
  9. mybatis源码阅读(八) ---Interceptor了解一下
  10. Spring的核心模块解析