M

Mike Hearn

blog.plan99.net · Personal blog · on HN since 2017

Mike Hearn, a former Bitcoin and Google developer, writes about garbage collection, language design, Bitcoin, science replication, and COVID-19.

What HN saysCommenters cite his modern garbage collection series to compare GC tradeoffs, including Java HotSpot versus Go, and his post on replication studies.
86HN people shared it
46linked it in comments
58stories submitted
2.6Kstory points
2 months agolast shared
2017people per year2026

Most-shared posts

  1. 1
    The Resolution of the Bitcoin Experiment (2016)
    14 people · 4 points · first shared 2017 · 1 comments on HN
  2. 2
    Modern garbage collection
    13 people · 44 points · first shared 2017 · 2 comments on HN
  3. 3
  4. 4
    Modern garbage collection: Part 2
    7 people · 156 points · first shared 2019 · 91 comments on HN
  5. 5
    Mixing Node.js and OpenJDK
    7 people · 19 points · first shared 2019 · 5 comments on HN
  6. 6
    Is Jigsaw good or is it wack?
    6 people · 1 points · first shared 2017 · discussion on HN
  7. 7
    It’s time to kill the web app
    5 people · 1.0K points · first shared 2017 · 702 comments on HN
  8. 8
  9. 9
    In Defence of the Technical Interview
    4 people · 195 points · first shared 2019 · 294 comments on HN
  10. 10
    What should follow the web?
    3 people · 175 points · first shared 2017 · 168 comments on HN
  11. 11
    The dangers of creating politically partisan AI
    3 people · 6 points · first shared 2017 · discussion on HN
  12. 12
    Replication studies can't fix science
    3 people · 5 points · first shared 2024 · discussion on HN
  13. 13
    The science of Westworld
    2 people · 277 points · first shared 2017 · 142 comments on HN
  14. 14
    Building account systems
    2 people · 140 points · first shared 2017 · 56 comments on HN
  15. 15
    Kotlin doesn’t need an LLVM backend (2016)
    2 people · 80 points · first shared 2017 · 113 comments on HN

What HN people wrote when they linked it

mike_hearn · 2025-06-17
There are no silver bullets. Replication also isn't worth much: https://blog.plan99.net/replication-studies-cant-fix-science-0e195234a… Merely replicating a study doesn't tell you anything about whether the claims are correct, although failure to replicate can be a signal that the claims probably aren't correct.
littlestymaar · 2020-03-02
The op is talking about compacting GCs and Go's isn't a compacting one. Go's GC is a variation of a regular mark and sweep GC: the GC starts exploring the heap to find all reachable memory, and then clears the unreachable one, meanwhile compacting GCs move the reachable memory from one place (the “from space”) to another (the “to space”), which become the new heap. Theses two garbage collectors famillies are completely different. BTW, calling go's GC “state of the art” is debatable at best. See : https://blog.plan99.net/modern-garbage-collection-911ef4f8bd8e?gi=1549…
shmerl · 2020-01-22
Every GC is a trade off. You can't replace RAII with GC without losing some control. No matter how much you innovate in it, you have to pay with something. That's the whole point of GC after all. Here is a good read about it: https://blog.plan99.net/modern-garbage-collection-911ef4f8bd8e
walkingolof · 2019-12-08
JVM GC development has seen an upswing in the last few years, one of the most interesting new GCs are ZGC that show impressive numbers, delivers less than 10 ms pause times for any heap size, often than 1 ms for many applications, while having impressive throughput numbers. Another interesting adoption to the containerized world we live in is that GCs recently started to frequently return memory to the OS when not being used. If you want to read more about these new GCs, this is a great post: https://blog.plan99.net/modern-garbage-collection-part-2-1c88847abcfd
pcwalton · 2019-05-10
Java HotSpot's garbage collector is significantly better for most workloads than that of Go, because it takes throughput into account, not just latency. Mike Hearn makes the point at length in this article: https://blog.plan99.net/modern-garbage-collection-911ef4f8bd8e I predict that over time Go's GC will evolve to become very similar to the modern GCs that Java HotSpot has. Not having generational GC was an interesting experiment, but I don't think it's panned out: you end up leaning really heavily on escape analysis and don't have a great story for what happens when you do fail the heuristics and have to allocate.
pronoiac · 2018-04-17
I recently stumbled on an announcement for Graal and Truffle in my bookmarks: https://blog.plan99.net/graal-truffle-134d8f28fb69 discussed at https://news.ycombinator.com/item?id=13343845 The idea there: "Graal is a research compiler. ... Truffle is a framework for implementing languages using nothing more than a simple abstract syntax tree interpreter." As a bonus, you get high speed, good instrumentation for debugging and profiling, with great garbage collection, and hotswap code as you develop.
bad_user · 2017-05-09
Red Hat has voiced their concerns in the following document, linked in their comment: https://developer.jboss.org/blogs/scott.stark/2017/04/14/critical-defi… Found a follow up in this blog post: https://blog.plan99.net/is-jigsaw-good-or-is-it-wack-ec634d36dd6f Interesting to see Twitter voting No as well, with the comment "Our main concern is that it is likely that this JSR will prove disruptive to Java developers, while ultimately not providing the benefits that would be expected of such a system".
jeremyjh · 2017-04-29
This looks more like a reaction from threatened incumbents than a genuine effort to reach consensus in everyone's best interest. https://blog.plan99.net/is-jigsaw-good-or-is-it-wack-ec634d36dd6f
toast0 · 2023-11-25
> --- Most of the BEAM isn't well-suited for trends in today's immutable architecture world (Docker deploys on something like Kubernetes or ECS). Bootup time on the VM can be long compared to running a Go or OCaml binary, or some Python applications (I find larger Python apps tend to spend a ton of time loading modules). Compile times aren't as fast as Go, so if a fresh deploy requires downloading modules and compile-from-scratch, that'll be longer than other stacks. Now, if you use stateful deploys and hot-code reloading, it's not so bad, but incorporating that involves a bit more risk and specific expertise that most companies don't want to roll into. Basically, the opposite of this article I don't necessarily disagree with your reading of the trends, but if following the trends means losing the best tool for the job, maybe it's not the tool that's in the wrong. Re: deploy time, I don't think there's a need for deployed servers to fetch and compile modules --- you wouldn't do that for a Java or C server, you'd build an archive once and deploy the archive. I guess if you're talking about the speed of the build pipeline, I'd think the pieces in the build could be split into meaningful chunks so builds could be in parallel and/or only on the parts where the dependencies changed. I imagine BEAM startup itself isn't particularly fast at the moment, because I haven't seen a lot of changelogs about speeding it up, but I'm not sure there's a huge amount of perceived need there?…
uncletammy · 2021-05-27
> Well none of this has any effect on the bitcoin network now does it? After having been stripped of most of the functionality that gave BTC it's original value proposition, you might be surprised at the degree to which it really does need ads like this to attract fresh investors. BTC killed it's most powerful tool for cementing it's position as the leading cryptocurrency, it's network effect. They killed it by merging "full replace by fee", making it trivial to cheat bitcoin-accepting merchants during times of higher network congestion. This made it even super risky for merchants and many opted out. They even had a much safer alternative (FSS-RBF) ready to merge. * https://github.com/bitcoin/bitcoin/pull/6352 * https://blog.plan99.net/replace-by-fee-43edd9a1dd6d They killed it by using the size of OP_RETURN to gaslight Counterparty, a company that was trying to build a rich smart contract ecosystem (yeah like Ethereum has now) on top of bitcoin. This was the second time the core devs' hatred of smart contracts killed new use cases for the coin. The first time led Vitalik to create Ethereum. *https://old.reddit.com/r/decred/comments/6wxueo/your_best_pitch_for_de… They killed it by blanket censoring on all the big bitcoin related communication channels all discussion about increasing the blocksize and/or building/supporting alternative BTC full nodes. This censorship completely fractured the community and directly led to the network fork called…
ZenoArrow · 2018-01-30
> "Which works great, as long as those DSLs are complete, standardized, and mostly not leaky. In the spirit of your comment, I'll let you discover for yourself why that doesn't seem to happen." Two reasons: 1. Computing is a relatively young field, and not all of the best practices have made it to the mainstream. 2. The quickest way to develop is to bolt additional code onto the side of a project rather than considering how the overall requirements for the software application may be better served by designing reusable helper functions and refactoring. Also, I think you've dismissed Red a little too quickly. The GUI DSL is not the only factor that keeps the codebase compact. I'm using the word "compact" rather than "small" as I recognise that Red is still in its infancy, but with the word "compact" I'm trying to emphasise that Red does a lot with not a lot of code. > "EDIT: As an aside, the Java 1.1 JVM was only about 15MB." How big was the JCL (Java Class Library) at the same time? Also, 15MB for a VM on its own is not that impressive. Even Oracle have managed to make small (feature complete) VMs, for example: https://blog.plan99.net/graal-truffle-134d8f28fb69 "The resulting runtimes have peak performance competitive with the best hand-tuned language-specific compilers on the market. For example, the TruffleJS engine which implements JavaScript is competitive with V8 in benchmarks." "To give a feel for how easy it is to write these engines, TruffleJS is only about…
apeace · 2017-07-23
For the past two years, the Bitcoin community has been embroiled in a debate about how to scale the network to handle more transactions. The debate has at times become less technical, rhetoric about "centralization" and the values of the community has become introduced, etc. Recently the debates have come to a head, and some have referred to it as a "Civil War"[0]. For technical background, I recommend these two posts by Mike Hearn, who has since left the Bitcoin community [1] [2] Now, what the original article is talking about is the "Core" development team--the people who have commit access on the Bitcoin Github repo. The whole debate has essentially become Core vs. some other factions, mainly miners. You'll see the arguments in [1] and [2]. (Keep in mind, Mike Hearn is strongly on the anti-Core side of the argument. But those articles should give you an idea of what to search for, if you want to hear arguments on the other side.) [0] https://www.bloomberg.com/news/articles/2017-07-10/bitcoin-risks-splin… [1] https://medium.com/@octskyward/on-consensus-and-forks-c6a050c792e7 [2] https://blog.plan99.net/the-resolution-of-the-bitcoin-experiment-dabb3…
candiodari · 2017-02-20
> It is, of course, possible to create libraries that don't follow the idiom. Yeah. Thing is though, there are these libraries who access pointers (especially in Go where lots of stuff are implicit pointers, like maps and interfaces). Or, may God strike them down where they stand, people who use division. Or allocate. Or cast. Or use interface{}. All such code has implicit (non-visible) panics in them. What I mean to say is: in practice, Go code is not fundamentally different from Java/C++ code : everything can throw. Everything. Yes even that thing that you're thinking of right now that couldn't possibly ever think about throwing. There's just people who admit this and people who don't. That the Go authors come up with idioms that are so incredibly shortsighted is emblematic of everything else about the language. This is how Go works. They claim they are perfection, and know better than anyone. For instance, compare: https://blog.golang.org/go15gc with https://blog.plan99.net/modern-garbage-collection-911ef4f8bd8e (just to put up something other than the generics discussion. But everything about go suffers from both massive deficiencies and an extremely arrogant development defending deficiencies ...)
williamcotton · 2022-11-23
I’ll keep an eye on your work on this! Funny enough, another thread introduced me to Truffle and I came across this article of yours! https://blog.plan99.net/graal-truffle-134d8f28fb69
astoor · 2022-03-21
So within 7 years of the start of Bitcoin, pretty much every original Bitcoin developer had become disillusioned, with claims like it was "an experiment" and "has failed"[0]. We're now heading towards 7 years since the start of Ethereum, and it sounds like Vitalik is now too beginning to realise that it has turned into something a lot worse than what it tried to replace, e.g. because it magnifies the most terrible aspects of human nature. [0] https://blog.plan99.net/the-resolution-of-the-bitcoin-experiment-dabb3…
jamoes · 2020-12-29
I'm curious why you chose to use the term "bcash" to refer to BCH. No exchanges or mainstream projects use that term to refer to BCH. As far as I'm aware it's primarily used as a pejorative, so it seems strange that you'd use it here. As far as BCH's additional value: I'd suggest researching the block size debate. This debate is BCH's entire reason for existing. This article [1] from 2016 by Mike Hearn contains a good primer on the block size debate itself. He ended up quitting development of Bitcoin, but others decided to raise the blocksize limit - with or without the majority, thus creating BCH. Succinctly, BCH is the continuation of big-blocker's vision of the Bitcoin experiment. [1] https://blog.plan99.net/the-resolution-of-the-bitcoin-experiment-dabb3…
thu2111 · 2020-07-15
There are no armies of Twitter bots swaying mass public opinion. That's another nonsensical conspiracy theory of the sort of the New York Times has gone all-in on to try and explain how Trump won without having to engage with his policies or arguments. This article looks at just one news story+research paper alleging a Russian Twitter bot army swaying politics, but in the UK rather than the USA: https://blog.plan99.net/did-russian-bots-impact-brexit-ad66f08c014a tl;dr - the paper is filled with fraud but was breathlessly reported by the (London) Times, and it convinced the Prime Minister despite being false.
MaxBarraclough · 2020-03-25
I had to look up 'Brooks pointers'. For anyone else in this position, these two blog posts seem a good place to start: https://rkennke.wordpress.com/2013/10/23/shenandoah-gc-brooks-pointers… , https://blog.plan99.net/modern-garbage-collection-part-2-1c88847abcfd
wpietri · 2020-03-22
I have no knowledge, but did come across an amateur looking into the question: https://blog.plan99.net/cpap-for-covid-d47886bf978c
cozos · 2019-12-15
This is an interesting article on the topic: https://blog.plan99.net/modern-garbage-collection-part-2-1c88847abcfd https://www.reddit.com/r/golang/comments/5j7phw/modern_garbage_collect… > "Go: 67 ms max, 1062 pauses, 23.6 s total pause, 22 ms mean pause, 91 s total runtime > Java, G1 GC, no tuning: 86 ms max, 65 pauses, 2.7 s total pause, 41 ms mean pause, 20 s total runtime" What I got from this is that Go has faster GC pauses at the cost of throughput (i.e. more pauses resulting in higher total pause time). The new JVM Shenandoah GC also makes this tradeoff by adding another layer of indirection ("Brooks forwarding pointer") which has a throughput performance cost but gives you really low GC pauses.
Felz · 2018-06-29
That's definitely such an underspecified claim that it's not even wrong. Fast as C under what conditions? I've personally found that a lot of Go's marketing is, if not misleading, outright false. As an example: https://blog.plan99.net/modern-garbage-collection-911ef4f8bd8e
platz · 2018-02-19
also consider https://blog.plan99.net/graal-truffle-134d8f28fb69 > Truffle is a framework for writing interpreters with annotations and small bits of extra code in them which, when Truffle is paired with its sister project Graal, allow those interpreters to be converted into JIT compiling VMs … automatically. > If Truffle is a framework for writing AST interpreters, then Graal is the thing that makes them fast. > Truffle provides a language interop framework called Polyglot that allows Truffle languages to call each other
kibwen · 2017-11-13
While the Go GC is definitely no slouch when it comes to engineering, the messaging around it has not been entirely forthright: https://blog.plan99.net/modern-garbage-collection-911ef4f8bd8e
Qub3d · 2017-11-02
The high transaction fees are symptomatic a large problem that not only has divided the community, its literally forked the currency. There are several proposed solutions, but unless a majority of all bitcoin users agree to implement it, it won't happen. Here's a rundown of what's happened: https://blog.plan99.net/the-resolution-of-the-bitcoin-experiment-dabb3…
ericb · 2017-10-31
Just chance that the big-block folks happen to be gone? Nice table, but LoC is way different (and less important) than being the person deciding what gets merged. Show me the merge commits table. Hearn: https://blog.plan99.net/the-resolution-of-the-bitcoin-experiment-dabb3… Andresen: https://cointelegraph.com/news/andresen-proposes-block-increase-leadin… Garzik: https://www.cryptocoinsnews.com/bitcoin-core-dev-jeff-garzik-block-siz…
alex_suzuki · 2017-10-19
There was an article recently on HN with a clickbaity title "It's time to kill the web" but its core argument was that HTTP is a document delivery protocol and not meant for building applications, and I think that is the main reason why we are seeing an explosion of frameworks and poor app quality. https://blog.plan99.net/its-time-to-kill-the-web-974a9fe80c89 HN discussion: https://news.ycombinator.com/item?id=15321015 (I am NOT the author)
mannanali413 · 2017-09-25
This is the second article I am reading today that draws parallels between Windows 1.0 and the current state of Web Design. The first article at https://blog.plan99.net/its-time-to-kill-the-web-974a9fe80c89 though predicts the death of the web as a platform
reinhardt1053 · 2017-09-24
The creator of this post is the same guy who said bitcoin was dead in 2016 [1]. [1] https://blog.plan99.net/the-resolution-of-the-bitcoin-experiment-dabb3…

Keyboard shortcuts

/Search
j kNext / previous blog
EnterOpen selected blog
vVisit the blog site
fFollow / unfollow
lSwitch grid / list view
dSwitch dark mode
g hHome
g pTop posts
g tTopics
g fFollowing
g lLiked
g yHistory
g qFAQ
EscBack / close